Отменить вставку в vim

Отменить вставку в vim

Я знаю о 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?

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

решение1

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

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

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

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

(То есть: на самом деле наберите то, что там написано, а не нажимайте ctrl+v и escape).

На первый взгляд это выглядит такдолженобеспечивают желаемое поведение — это просто автоматизация стандартного процесса вставки, который я описал выше. Но это не так. 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.

решение2

В 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 за то, что указал мне правильное направление.

Связанный контент