2015-08-17 30 views
2

有没有办法在Vim中持久地改变活动寄存器?在Vim中持久地设置活动寄存器

"寄存器默认情况下使用,如果我想要使用a寄存器,我必须将"a加到我的正常模式命令。发出命令后,活动寄存器被切换回"

有没有办法告诉Vim保持一个特定的寄存器激活,直到明确告诉不这样做?

+0

编号无名寄存器有什么问题? – romainl

+0

你想实现什么?你为什么要用“一个而不是标准寄存器?” – flaschenpost

+0

[我不能轻易将内容追加到未命名的注册表中](http://stackoverflow.com/questions/18536511/vim-how-to-append-yanked -text-to-unnamed-register),而使用一个已命名的寄存器很容易, – zool

回答

1

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

您可以根据自己的需求阅读和更改vim源代码。

这也是不容易Vimscript中,我能想到的实现:

  • 声明一个变种,指示目标“无名REG”,例如a
  • 创建映射d D s S c C y Y p P ...命令,让他们在你的函数调用你的函数
  • ,你检查变量来获取目标,最后火"[targetReg]command或致电set/getreg()

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

所以只需使用默认的未命名的reg。

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>[email protected] 

交换yd删除,而不是使劲。定义映射到品味。