Почему сдвиг вставки работает только полностью в режиме вставки?

13

Просто попытался вставить некоторый контент (в Git Bash на сервере CentOS) в файл, используя vim.
Я просто открыл файл и попытался использовать shift+, insertи я заметил, что первая половина (примерно) обрезается, но если я установил vim для режима вставки и нажал shift+, insertвсе вставляется отлично.
Было просто интересно, почему это?

Благодарность

treyBake
источник
Эй, у меня тоже два больших пальца !!! : D
RonJohn

Ответы:

24

И Shift+, Insertи « вставка » в терминал ведут себя одинаково - они эмулируют нажатия клавиш.

Это важное различие, которое зачастую невозможно сделать терминалам - вы печатаете или вставляете? Примечание : некоторые терминалы поддерживают режимы вставки в скобках ", после комментария @ Джоша я даже наткнулся на вставку в скобках vim в xterm, которая может вас заинтересовать.

Ваши вставленные данные будут потеряны до первого символа, который входит в режим вставки. Вы также можете обнаружить, что курсор перемещен и что другие части файла изменились (например: изменен регистр / был удален / и т. Д.) ...

Таким образом, если вы вставляете текст, который хотите вставить в файл, сначала войдите в режим вставки.


Попробуйте скопировать следующий текст и вставить его в терминал с Vim (не в режиме вставки):

hello how are you

Результат такой же, как при наборе одинаковых букв на клавиатуре:

результат вставки в Vim

В этом случае он оставляет вас в режиме вставки ...

Теперь попробуйте выйти из режима вставки Esc- и вставить следующее

/are
n

Это выполняет поиск "являются":

результат вставки в Vim

Теперь вставьте это:

:0
dG

О нет ... все прошло!

все ушли


Вы также обнаружите, что если у вас включен отступ, то вставка блока кода в vim (в режиме вставки) сделает слишком много отступов - это автоматически сделает отступ, а затем вставленный код будет содержать отступы.

def my_print(message):
    print(message)
    print('done...')

код вставки

Чтобы исправить это, используйте :set pasteи :set nopasteкоманды

вставка кода (режим вставки)

Attie
источник
4
«Это важное различие, которое терминалы не могут сделать - вы печатаете или вставляете?» - это не совсем верно, некоторые терминалы и приложения поддерживают «вставку в скобках», когда специальная последовательность отправляется до и после вставленного текста.
Ash
@Josh: интересно, спасибо ... ваш комментарий даже привел меня к плагину vim
Attie
Я единственный, кого это беспокоит set nopaste? Я бы ожидал unset paste.
Эрик Думинил
@ThisGuyHasTwoThumbs в качестве альтернативы, по крайней мере, при использовании Vim вы можете использовать "+регистр для взаимодействия с системным буфером обмена, поскольку он будет вести себя более разумно. Недостатком является то, что некоторые системы или сборки Vim могут использовать "*вместо этого или просто не иметь поддержки системного буфера обмена, но, по моему опыту, "+это было довольно надежно.
8bittree