在Vim中持续设置活动寄存器

在Vim中持续设置活动寄存器,vim,Vim,有没有办法持续更改Vim中的活动寄存器 默认情况下使用“寄存器,如果我想使用a寄存器,我必须在正常模式命令前添加”a。发出命令后,活动寄存器切换回“ 有没有办法告诉Vim保持特定寄存器处于活动状态,直到明确告知不要这样做?没有这样的选项来实现您的目标 您可以阅读并更改vim源代码以满足您的需求 用vimscript实现它也不容易,我可以想到: 声明一个变量,指出目标“未命名注册表”,例如a 为d s c y y p…命令创建映射,让它们调用您的函数 在函数中,检查变量以获取目标,最后触发“[t

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

默认情况下使用
寄存器,如果我想使用
a
寄存器,我必须在正常模式命令前添加
”a
。发出命令后,活动寄存器切换回


有没有办法告诉Vim保持特定寄存器处于活动状态,直到明确告知不要这样做?

没有这样的选项来实现您的目标

您可以阅读并更改vim源代码以满足您的需求

用vimscript实现它也不容易,我可以想到:

  • 声明一个变量,指出目标“未命名注册表”,例如
    a
  • d s c y y p…
    命令创建映射,让它们调用您的函数
  • 在函数中,检查变量以获取目标,最后触发
    “[targetReg]命令
    或调用
    set/getreg()
然而,我认为这不是一个好主意。你必须考虑许多极端情况,才能使你的脚本适用于所有情况。例如,用户按了
“\u dd
”bx
,您的脚本应该知道用户已明确声明了要使用的寄存器,并且您应该绕过目标变量


因此,只需使用默认的未命名注册表。

如果目标只是附加到
,这些函数和映射应适用于可视和操作员挂起(例如
$
w
fx
,等等)

函数!AppOp(类型,…)
呼叫应用程序(a:类型,a:0)
端功能
功能!应用程序(类型,可视)
让r=@“
如果a:视觉
执行“正常!`y”
其他的
执行“正常!`[v`]y”
恩迪夫
设@“=r@”
端功能
xnoremap a:调用应用程序(visualmode(),1)
nnoremap a:set opfunc=AppOpg@

y
替换为
d
以删除而不是猛拉。定义到味觉的映射。

否。未命名寄存器有什么问题?您希望实现什么?你为什么想和我一起工作“a而不是标准寄存器”,而使用命名寄存器时很容易做到这一点。就是这样。而且,有时我需要切换寄存器以避免覆盖未命名的寄存器,我想知道是否有办法在进一步通知之前保持命名寄存器处于活动状态。除此之外,纯粹出于好奇。仍然不确定您想做什么,但如果您需要保存一个特定的变量以备以后使用,请将其分配给一个命名变量:让var=@a,然后在需要时将其放回。当我有变量要在会话之间保存时,我会将它们写入一个var文件
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@