Вставка в визуальный блок заменить буфер обмена - PullRequest
2 голосов
/ 16 января 2020

Допустим, у меня есть слово "the" в буфере обмена vim. Если я введу визуальный блок, выберите слово (скажем, это слово «а») и вставьте. Слово «а» заменено словом «the», мой буфер обмена изменился: теперь он содержит слово «a». Как я могу изменить это поведение, чтобы не заменять буфер обмена при вставке в визуальный блок?

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

В документации достаточно подробно изложена вставка в визуальном режиме. Удаленное содержимое будет всегда go в безымянный регистр (регистр по умолчанию).

Если вы хотите вставить один и тот же текст несколько раз, рекомендуется вместо этого использовать именованный регистр. Нажмите "the", используя "xyw, чтобы вставить его в регистр "x", затем вставьте его, используя "xp в визуальном режиме. Регистр "x не будет затронут этой операцией.

Обратите внимание, что нумерованный регистр "0 действительно может быть здесь полезен, поскольку значение по умолчанию yank также переходит к "0 зарегистрироваться, но текст, замененный положением в визуальном режиме, попадает только в безымянный регистр и не изменяет "0.

См. :help v_p:

Ранее выбранный текст помещается в безымянный регистр. Если вы хотите поместить один и тот же текст в визуальный выбор несколько раз, вам нужно использовать другой регистр. Например, дерните текст для копирования, визуально выберите текст для замены и используйте "0p. Вы можете повторять это столько раз, сколько хотите, безымянный регистр будет меняться каждый раз.


Другой вариант - переопределить это поведение, создавая пользовательские сопоставления.

Вы можете создавать сопоставления для операций p и P в визуальном режиме, которые будут сохранять и восстанавливать безымянный регистр до и после операции.

Эти функции и сопоставления будут выполнять следующие действия:

function! SaveReg(cmd) abort
    let b:saved_reg = getreg('"')
    let b:saved_type = getregtype('"')
    return a:cmd.":\<C-U>call RestxyzoreReg()\r"
endfunction
function! RestoreReg() abort
    call setreg('"', b:saved_reg, b:saved_type)
    unlet b:saved_reg
    unlet b:saved_type
endfunction

xnoremap <silent> <expr> p SaveReg('p')
xnoremap <silent> <expr> P SaveReg('P')
0 голосов
/ 19 января 2020

См. :help registers. Вы можете восстановить / вставить текст в указанные регистры.

В данном случае просто нажмите слово "the" с помощью "by, и это поместит его в регистр b. Затем вы можете :put это с "bp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...