Vim 如何打开或关闭(所有)行号

Vim 如何打开或关闭(所有)行号,vim,Vim,假设我有以下几种组合: " one if not both is usually on set number " could be on or off set relativenumber " could be on or off 有没有一种方法可以在不丢失信息的情况下打开/关闭这些选项(不知道设置了什么,例如,我想制作一个简单的键盘快捷键来切换当前行号选择的可见性)?例如,如果我只设置了rnu,我会: :set number! 这真的对我一点帮助都没有,因为我仍然会设置rn

假设我有以下几种组合:

" one if not both is usually on
set number         " could be on or off
set relativenumber " could be on or off
有没有一种方法可以在不丢失信息的情况下打开/关闭这些选项(不知道设置了什么,例如,我想制作一个简单的键盘快捷键来切换当前行号选择的可见性)?例如,如果我只设置了
rnu
,我会:

:set number!
这真的对我一点帮助都没有,因为我仍然会设置
rnu
,并且在左侧仍然会有一个
行号列
。如果是这样的话,怎么做呢?

试试看:

  • 目前,我正在将其映射到
    如果您愿意,可以更改映射
  • 我正在使用全局变量,如果需要,可以更改范围
此功能将禁用所有行号显示,并恢复到旧的行号设置

function! MagicNumberToggle() abort
    if &nu + &rnu == 0
        let &nu = g:old_nu
        let &rnu = g:old_rnu
    else
        let g:old_nu = &nu
        let g:old_rnu = &rnu
        let &nu = 0
        let &rnu =0
    endif
endfunction
nnoremap <F7> :call MagicNumberToggle()<cr>
函数!MagicNumberToggle()中止
如果&nu+&rnu==0
让&nu=g:old\u nu
let&rnu=g:旧的
其他的
设g:old_nu=&nu
设g:old_rnu=&rnu
设&nu=0
设&rnu=0
恩迪夫
端功能
nnoremap:调用MagicNumberToggle()
一行解决方案

:nnoremap <silent> <C-n> :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]<cr>

欲了解更多信息,请访问:hNu

真棒。这就像是黑魔法的vimscript,但很酷。非常感谢。顺便说一句,我在这里发布了一些后续问题,关于如何从此功能进入/退出“模式”,或者如果可能的话。@David542我没有看到后续问题。什么意思?谢谢你。它在某些情况下有效,但在其他情况下无效(例如,如果只有绝对数)。它似乎在三种状态之间切换。但是,您只能将逻辑调整为两个值。
:echo [&nu, !&rnu]

&nu ............. gets the value of number
!&rnu ........... the oposite value of relative number