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