2

Я знаю , о u и Ctrl-r для отмены и повтора. Но u меня уходит обратно к последнему сохраненному состоянию. Я хочу знать, как отменить вставку cmd-v .

Например,

I am typing here bla bla bla, [link to website](here I paste a wrong http link 
with cmd-v)

Тогда я хочу вернуться к

I am typing here bla bla bla, [link to website](

Есть ли способ, которым я могу сделать это в VIM?

Заранее спасибо.

2 ответа2

1

Отказ от ответственности: я совершенно не осведомлен о том, как клавиатуры Apple с cmd, а не ctrl взаимодействуют с vim, поэтому вам может потребоваться изменить или настроить некоторые из них.

Правильный способ вставки в vim - использовать команду p . Чтобы вставить из системного буфера обмена, вы должны использовать "*p . Таким образом, стандартным способом действий было бы выйти из режима вставки и "*pa (a , конечно, снова входит в режим вставки).

Если вы хотите использовать сочетание клавиш в режиме вставки, было бы естественно сделать что-то вроде:

inoremap <c-v> <esc>"*pa

(То есть: на самом деле наберите то, что есть, вместо нажатия Ctrl + V и выхода).

На первый взгляд может показаться, что это должно обеспечить желаемое поведение - это просто автоматизация стандартного процесса вставки, который я описал выше. Но это не так. Vim рассматривает все части команды как часть одного и того же блока отмены, и сам режим вставки vim является своего рода командой.

Однако вы можете вручную запустить новый блок отмены, находясь в режиме вставки, используя ctrl+g, за которым следует u (да, я знаю, эта комбинация клавиш кажется довольно не похожей на vim, но все готово). Таким образом, вы можете изменить переназначение ключей следующим образом:

inoremap <c-v> <c-g>u<esc>"*pa

Все это будет работать с Ctrl + V (я только что проверил это на Windows, и оно работает там, по крайней мере), вам может потребоваться использовать что-то другое (кроме <c-v>) для ярлыков на основе cmd в vim. Если вы используете клавиатуру Apple, это подразумевает OSX - если cmd + v является системным ярлыком, я не уверен, что будет иметь приоритет. Некоторые поверхностные поиски в Google предполагают, что вам, возможно, придется поиграться с некоторой конфигурацией на уровне ОС, чтобы заставить cmd правильно работать с vim.

0

В MacVim вам нужно отменить отображение пункта меню Edit > Paste , чтобы переопределить ярлык, затем вы можете переназначить Cmd-V (язык D-v на MacVim) в соответствующую команду в каждом режиме. Я добавил это в мой ~/.gvimrc и теперь все работает чудесно:

macmenu Edit.Paste key=<nop>
noremap <D-v> "*P
cnoremap <D-v> <C-r><C-o>*
inoremap <D-v> <C-g>u<C-r><C-o>*

<C-g>u необходим только в режиме вставки для исправления истории отмены; noremap и cnoremap просто восстанавливают поведение вставки по умолчанию в обычном и командном режимах.

Спасибо Evilsoup за то, что указал мне правильное направление здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .