Vim 当我';我在命令行中键入,否则?

Vim 当我';我在命令行中键入,否则?,vim,Vim,我想要一个简单的augroup,当我进入命令窗口时,它将所有缓冲区切换为绝对行号(对于Ex命令) 我目前的代码是: augroup cmdWin autocmd! autocmd CmdwinEnter * setglobal nornu autocmd CmdwinLeave * setglobal rnu augroup END 但这似乎不起作用。我建议看两个vim插件: :setglobal不起作用,因为它只设置未来的默认值,而不更新现有窗口中的值。您

我想要一个简单的augroup,当我进入命令窗口时,它将所有缓冲区切换为绝对行号(对于Ex命令)

我目前的代码是:

augroup cmdWin
  autocmd!
  autocmd CmdwinEnter  *  setglobal  nornu   
  autocmd CmdwinLeave *  setglobal  rnu 
augroup END

但这似乎不起作用。

我建议看两个vim插件:


: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

就可以调整逻辑。您可以在Ex命令中使用相对数:
:-8,+12m$
。也许将
&nu
&rnu
值保存到窗口变量中,然后还原它们会更好。@PeterRincker当然,这可以变得更加方便和健壮。我只是给出一个答案,没有完整的插件:-)嘿,如果我在VimL方面做得更好,我将制作一个完整的插件并相信你Ingo,假设这很酷的话