有没有办法在Vim中持续更改活动寄存器?
默认情况下使用"
寄存器,如果我想使用a
寄存器,我必须在我的普通模式命令前加"a
。发出命令后,活动寄存器将切换回"
。
有没有办法告诉Vim保持特定的注册活动,直到明确告知不这样做?
答案 0 :(得分:1)
没有这样的选择来实现你的目标。
您可以确定地阅读和更改您的要求的vim源代码。
用vimscript实现它也不容易,我能想到的是:
a
d D s S c C y Y p P ...
命令创建映射,让他们调用您的函数"[targetReg]command
或致电set/getreg()
但是我不认为这是个好主意。您必须考虑许多极端情况,以使您的脚本适用于所有情况。例如,用户按下了"_dd
或"bx
,您的脚本应该知道用户已经明确声明了他想要使用的寄存器,并且您应该绕过目标变量。
所以只需使用默认的无名注册。
答案 1 :(得分:0)
如果目标只是附加到"
,则这些函数和映射应该适用于视觉和操作员待处理(例如$
,w
,fx
等。 ..)。
function! AppOp(type, ...)
call App(a:type, a:0)
endfunction
function! App(type, visual)
let r = @"
if a:visual
execute "normal! `<" . a:type . "`>y"
else
execute "normal! `[v`]y"
endif
let @" = r . @"
endfunction
xnoremap <silent> <leader>a :call App(visualmode(), 1)<cr>
nnoremap <silent> <leader>a :set opfunc=AppOp<cr>g@
将y
换成d
以删除而不是猛拉。定义映射到味道。