Vim: используйте + в качестве регистра по умолчанию только для команды yank

Я бы хотел использовать регистр + (системный буфер обмена) только для команды yank (то есть не перезаписывать этот регистр в dd или других командах).

:set clipboard+=unnamed

не будет работать, потому что это вводит dd перезапись, описанную выше.


person sheerun    schedule 14.11.2012    source источник
comment
set clipboard=unnamedplus использует + для всех операций с буфером обмена. :help clipboard-unnamedplus. Просто оставлю это здесь, вдруг кому понадобится.   -  person dza    schedule 17.06.2016


Ответы (2)


Вы можете перезаписать команды копирования по умолчанию, чтобы они по умолчанию помещались в системный буфер обмена, если явно не указан другой регистр:

:nnoremap <expr> y (v:register ==# '"' ? '"+' : '') . 'y'
:nnoremap <expr> yy (v:register ==# '"' ? '"+' : '') . 'yy'
:nnoremap <expr> Y (v:register ==# '"' ? '"+' : '') . 'Y'
:xnoremap <expr> y (v:register ==# '"' ? '"+' : '') . 'y'
:xnoremap <expr> Y (v:register ==# '"' ? '"+' : '') . 'Y'
person Ingo Karkat    schedule 14.11.2012
comment
Спасибо. Теперь тоже пользуюсь тем же, но для p и d - person sheerun; 17.11.2012

d больше похоже на "вырезать", чем на "удалить". То, что вы получаете, является нормальным поведением.

Однако вы можете использовать «регистр черной дыры»: "_d. Я сопоставил его с <leader>d.

person romainl    schedule 14.11.2012
comment
+1 Я почти никогда не использую регистр черной дыры, потому что мне никогда не приходило в голову сопоставить его с чем-то простым, например <leader>d - person Michael Berkowski; 14.11.2012
comment
И это работает так же, как d. С let mapleader=",": ,dd, ,di(, ,dtx, ,d/foo. - person romainl; 14.11.2012