TL; DR; версия - Как мне отменить текст, который был вставлен из моего буфера копирования ОС, не отменяя другой текст, который был введен, так как я перешел в режим вставки?
Более подробное описание:
- Поместите что-нибудь в буфер копирования вашей ОС (например, выделите текст и сделайте
Command-c
на Mac) - Войдите в режим вставки в vim (
i
) - Введите что-нибудь (например
asdf
) - Не выходя из режима вставки, вставьте из буфера копирования в vim (
Command-v
на Mac) - Ударил
escape
- Попробуйте отменить пасту (
u
)
Он отменяет все с того момента, как вы в последний раз переходили в режим вставки. Другими словами, это очищает asdf
плюс весь текст, который я вставил.
Как мне просто отменить вставленный текст? Должен ли я всегда выходить из режима вставки и обратно, прежде чем вставлять текст, чтобы иметь возможность отменить вставленный текст?
:h i_CTRL-G_u
(то есть, «прервать последовательность отмены, начать новое изменение» в режиме вставки).В MacVim вам нужно
Edit > Paste
отменить отображение пункта меню, чтобы переопределить ярлык, затем вы можете переназначить Cmd-V (D-v
на языке MacVim) на соответствующую команду в каждом режиме. Я добавил это к моему,~/.gvimrc
и теперь все работает чудесно:<C-g>u
Необходимо только в режиме вставки , чтобы исправить историю отмены;noremap
иcnoremap
просто восстановить поведение по умолчанию вставить в нормальных и командных режимах.Спасибо Инго Каркату за то, что он указал мне правильное направление.
источник
На самом деле решение заключается в том, что вы должны Escсначала перейти в командный режим (например ) и снова войти в режим вставки, но он работает только при вводе вручную, но кажется, что «случайно» перестает работать, если я проверяю его
~/.vimrc
. Google не помогает вообще.Я трачу много времени, пытаясь решить эту проблему, и я просто выясняю причину в моем случае:
Не сопоставляйте ключ вставки так же, как терминал с существующим ключом вставки
например , Ctrl+Shift+Vвставит в моем терминале Konsole, но если я назначаю этот ключ
<C-S-v>
в~/.vimrc
, то «отмены для только одной пасты вместо нескольких паст» не будет работать.В моем случае я должен использовать
<C-v>
вместо<C-S-v>
:Ваш случай может отличаться, но суть в том же: не назначайте одинаковые конфликты ключей вставки с существующим ключом эмулятора терминала.
Я на 100% подтвердил этот вывод, установив мой ключ вставки терминала, Ctrl+Vи теперь
<C-v>
перестал работать, но<C-S-v>
работает.Обратите внимание, что vim слишком чувствительный и странный. Я понял, что должен использовать,
i
а затем 2 правые клавиши вручную, чтобы заставить его работать в правильном положении курсора, это означает, что я должен поставитьi
и 2 правые клавиши~/.vimrc
тоже. Ваш случай может отличаться, но суть в том, что порядок клавиш + в ~ / .vimrc 100% совпадает с тем, что вы вводите вручную.источник