当我在命令行输入时,如何使用Vim使用绝对行号,否则使用相对值?

lsi*_*ert 6 vim

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

我目前的代码是:

augroup cmdWin
  autocmd!
  autocmd CmdwinEnter  *  setglobal  nornu   
  autocmd CmdwinLeave *  setglobal  rnu 
augroup END
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

Ing*_*kat 4

: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
Run Code Online (Sandbox Code Playgroud)

nu + nornu这在和之间切换nonu + rnunu如果您想继续并切换,请调整逻辑rnu