一种极简侵入性的解决方案:
寄存器 0
始终包含最后一次 yank 的内容(正如 Rafael、alex2k8 和 idbrii 已经提到的那样)。不幸的是,总是选中寄存器 0
可能会很烦人,因此如果 p
默认使用 "0
,那就太好了。这可以通过将以下行放入您的 .vimrc
文件中来实现:
noremap p "0p
noremap P "0P
for s:i in ['"','*','+','-','.',':','%','/','=','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
execute 'noremap "'.s:i.'p "'.s:i.'p'
execute 'noremap "'.s:i.'P "'.s:i.'P'
endfor
第一行将每个
p
笔画映射为
"0p
。然而,这会阻止
p
访问任何其他寄存器。因此,所有具有显式选定寄存器的
p
笔画都被映射到循环内相应的命令行表达式。对于
P
也是如此。
这种方式保留了标准行为,除了隐式的
p
和
P
笔画现在默认使用寄存器
0
。
提示 1:现在剪切命令是
"0d
而不只是
d
。但我懒得打这么长 ;) 因此,我使用以下映射:
noremap <LEADER>d "0d
noremap <LEADER>D "0D
默认情况下,leader键是
\
,因此您可以轻松通过键入
\d
或
\D
来剪切文本。
提示2:多键映射的默认超时时间相当短。您可能需要增加它以在选择寄存器时获得更多时间。有关详细信息,请参见
:help timeoutlen
,我正在使用:
set timeout timeoutlen=3000 ttimeoutlen=100