Как заставить вырезать / копировать / вставлять в GVim на Ubuntu работу с Ctrl + X, Ctrl + C, Ctrl + V?

54

По умолчанию ярлыки вырезать / копировать / вставить в GVim в Ubuntu:

 Cut "+ x
 Копировать "+ у
 Вставить "+ gP

Я хотел бы использовать комбинации клавиш управления в GVim, как я использую в Firefox и других приложениях gnome. Как настроить GVim для работы как другие приложения Gnome?

pcapademic
источник
Чтобы избежать конфликтов с клавишами vim по умолчанию, выберите Ctrl + Shift + Key вместо Ctrl + Key
Sheharyar

Ответы:

50

Добавьте следующие строки в ваш _vimrcили.vimrc

source $VIMRUNTIME/mswin.vim
behave mswin

Но будьте осторожны, тогда визуальный режим - это CTRL-Q вместо CTRL-V.

Для обзора того, что mswin.vim видит sourcode mswin.vim . Он очень хорошо прокомментирован, и если какая-то команда неясна, вы можете легко найти ее в справке vim.

Вот краткий обзор, составленный из источника:

  • клавиши возврата и курсора переносятся на предыдущую / следующую строку
  • CTRL-X и SHIFT-Del обрезаются
  • CTRL-C и CTRL-Insert являются копиями
  • CTRL-V и SHIFT-Insert - Вставить
  • Используйте CTRL-Q, чтобы сделать то, что делал CTRL-V
  • Используйте CTRL-S для сохранения, также в режиме вставки
  • CTRL-Z - Отменить; не в cmdline, хотя
  • CTRL-Y - Повторить (хотя и не повторить); не в cmdline, хотя
  • Alt-Space - Системное меню
  • CTRL-A - Выбрать все
  • CTRL-Tab - следующее окно
  • CTRL-F4 - Закрыть окно

По просьбе Nippysaurus: я добавил следующее в мой .gvimrc, чтобы показать Ctrl-V помимо Paste в меню:

unmenu! Edit.Paste
aunmenu Edit.Paste
nnoremenu 20.360 &Edit.&Paste<Tab>Ctrl-V        "+gP
cnoremenu    &Edit.&Paste<Tab>Ctrl-V        <C-R>+

Я не проверил это полностью, просто быстрая проверка, если это сделало то, что я ожидал. У меня работает, надеюсь, у вас работает ;-)

Людвиг Вайнцерль
источник
1
Я понимаю и ценю замечания, которые Манни и Питер Торин высказали в комментариях к ответу Питера Торина. Я считаю, что я изучил GVim на Windows, как замену блокнота, и я хочу меньше трений. Спасибо Людвиг
pcapademic
2
Есть ли способ изменить текст ярлыка меню, чтобы он соответствовал новым сочетаниям клавиш?
Nippysaurus
@Nippysaurus: я попробовал это с menutrans в .gvimrc. Не получил его на работу, вечером еще раз посмотрю на него ...
Людвиг Вайнцерль
2
Похоже, mswin.vimуже есть behave mswinзвонок. Нужно ли называть это снова по-своему _vimrc?
Натан Френд
1
@NathanFriend Ditto. Он работает даже без behave mswin, по крайней мере, в моей системе с Vim 8.0.
Микель
46

Если вы хотите, чтобы операции «Вырезать / Копировать / Вставить» работали с использованием «стандартных» горячих клавиш, но вы не хотите изменять какие-либо другие параметры конфигурации в gvim, попробуйте добавить следующее в ~/.vimrc.

vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

Вставка работает только в визуальном режиме и режиме вставки, поэтому вам не нужно беспокоиться о конфликте с Ctrl-V и блочном визуальном режиме. Это не проблема, потому что Copy и Cut переводят вас в режим вставки, так что вы можете сразу же вставить. Если вы попробуете это, вы обнаружите, что это чувствует себя совершенно естественно.

Я придумал эту конфигурацию после нескольких итераций настройки, и я думаю, что сейчас она «идеальна». Если вы даже немного недовольны текущей конфигурацией копирования / вставки, попробуйте это, и я уверен, что вам понравится.

Коген
источник
Это именно то, что я искал. Благодарю.
Шон МакКлири
2
После некоторых экспериментов и консультаций :help i_ctrl-r_ctrl-oя решил перейти imap <C-v> <ESC>"+paна imap <C-v> <C-r><C-o>+; это работает, как и ожидалось, когда курсор находится слева от первого символа строки, и наиболее близко имитирует «стандартное» поведение.
Хольгер
Я думаю о переходе <C-v>на shift + insert, который на моей машине кажется намного быстрее. Но в середине проекта и не хочется перезапускать vim прямо сейчас. Просто делюсь
Будет
Вы потрясающий =)
Югаль Джиндл
9

Если вы хотите поддерживать нормальное поведение vim, но при этом разрешаете менее громоздкое использование системного буфера обмена, см. Доступ к системному буферу обмена . Если вы хотите Gvim использовать системный буфер в качестве буфера по умолчанию (так что любой x, y, pи т.д. команда использует буфер обмена) , затем добавить следующую строку в ваш vimrc:

set clipboard=unnamed

Я лично использую буферы гораздо больше в vim, чем между vim и системой; так что я бы предпочел немного более громоздкий ярлык, чем постоянная работа моего системного буфера обмена. Но приятно, что есть вариант для тех, кто предпочел бы его.

JTB
источник
2

Я думаю, вы можете добавить это с помощью команды: imap (пробовал это только с помощью Ctrl + X в Windows, которая работала, нажатие ctrl + c, кажется, отменяет команду, хотя, возможно, вам придется делать это в vimrc).

:imap <C-X> "+x
:imap <C-C> "+y 
:imap <C-V> "+gP

Если вы добавите его в ~ / .vimrc, вам просто нужно удалить: перед imap.

imap добавляет привязки только в режиме вставки, так что вы можете изменить его на карту или что-то еще. Посмотрите, :help mapmodeчтобы узнать больше о переназначении и разметке вещей.

Удачи!

Питер Торин
источник
1
Это должно сделать немного хитрости. Но это плохая идея. Ctrl-V должен перейти в визуальный режим, Ctrl-C отменит любые команды. И трюк будет работать только на вашей системе; на другой машине вы потеряетесь.
InnaM
1
Я частично согласен с тем, что это плохая идея, я не хотел бы использовать ее сам, но если вы являетесь обычным пользователем gvim, то вы, вероятно, не пропустите привязки, которые удаляете в любом случае.
Питер Торин
1
Зачем вообще использовать gvim? Как долго вы будете оставаться случайным пользователем?
InnaM
2
Я не думаю, что это такая плохая идея. Люди привыкли к Ctrl + X и т. Д., И есть миллиарды других причин использовать vim.
Людвиг Вайнцерль