2015-08-17 68 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刪除,而不是使勁。定義映射到品味。