我想一個簡單的augroup切換到絕對行號的所有緩衝區(防爆指令)當我進入命令行窗口當我在命令行中輸入相對位置時,如何讓Vim使用絕對行號?
我當前的代碼是:
augroup cmdWin
autocmd!
autocmd CmdwinEnter * setglobal nornu
autocmd CmdwinLeave * setglobal rnu
augroup END
但這並不似乎工作。
我想一個簡單的augroup切換到絕對行號的所有緩衝區(防爆指令)當我進入命令行窗口當我在命令行中輸入相對位置時,如何讓Vim使用絕對行號?
我當前的代碼是:
augroup cmdWin
autocmd!
autocmd CmdwinEnter * setglobal nornu
autocmd CmdwinLeave * setglobal rnu
augroup END
但這並不似乎工作。
:setglobal
將無法正常工作,因爲它只是設置了未來違約,但不更新現有窗口中的值。您需要將其應用於所有當前窗口,通常使用:windo
,但在涉及特殊命令行窗口時更改窗口是個壞主意。因此,我們通過切換setwinvar()
選項(多個)「在距離」和一個循環:
augroup cmdWin
autocmd!
autocmd CmdwinEnter * for i in range(1,winnr('$')) | call setwinvar(i, '&number', 1) | call setwinvar(i, '&relativenumber', 0) | endfor
autocmd CmdwinLeave * for i in range(1,winnr('$')) | call setwinvar(i, '&number', 0) | call setwinvar(i, '&relativenumber', 1) | endfor
augroup END
此切換nu + nornu
和nonu + rnu
之間;如果您想保留nu
並只需切換rnu
,請修改邏輯。
也許將'&nu'和'&rnu'值保存到窗口變量然後恢復它們會更好。 –
@PeterRincker當然,這可以變得更加方便和強大。我只是給出了一個答案,沒有完整的插件:-) –
嘿,如果我在VimL中變得更好,我會製作一個完整的插件並稱贊你Ingo,假設這很酷 – lsiebert
您可以在Ex命令中使用相對數字:':-8,+ 12m $'。 – romainl