在Vim

时间:2015-08-17 20:59:05

标签: vim

有没有办法在Vim中持续更改活动寄存器?

默认情况下使用"寄存器,如果我想使用a寄存器,我必须在我的普通模式命令前加"a。发出命令后,活动寄存器将切换回"

有没有办法告诉Vim保持特定的注册活动,直到明确告知不这样做?

2 个答案:

答案 0 :(得分:1)

没有这样的选择来实现你的目标。

您可以确定地阅读和更改您的要求的vim源代码。

用vimscript实现它也不容易,我能想到的是:

  • 声明一个var,表示目标"未命名的reg",例如a
  • d D s S c C y Y p P ...命令创建映射,让他们调用您的函数
  • 在您的函数中,检查变量以获取目标,最后触发"[targetReg]command或致电set/getreg()

但是我不认为这是个好主意。您必须考虑许多极端情况,以使您的脚本适用于所有情况。例如,用户按下了"_dd"bx,您的脚本应该知道用户已经明确声明了他想要使用的寄存器,并且您应该绕过目标变量。

所以只需使用默认的无名注册。

答案 1 :(得分:0)

如果目标只是附加到",则这些函数和映射应该适用于视觉和操作员待处理(例如$wfx等。 ..)。

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以删除而不是猛拉。定义映射到味道。