vim:切换相对编号


15

setl nu!

我可以切换数字(开/关),类似于relativenumber

setl rnu!

如何切换{off,number,relativenumber}?


5
w 为什么这个问题迁移到SU?这是一个与编程工具有关的编程问题。它获得的SO不会比这更多。现在,专注于SO的程序员(如我)将无法找到此答案,因为5个人不知道什么是vim。去搞清楚。META:meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe 2011年

@sehe,我同意,这是一个stackoverflow的问题
juanpablo 2011年

Answers:


9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif

感谢贝努瓦,我说你的解决方案作为一个要点
juanpablo

1
@JuanPablo:嗯。我更喜欢我的版本:)
sehe 2011年

1
@sehe:我会对我的版本说同样的话。:-)

17

因为我喜欢一个逻辑难题,所以当vim命令适合一行以进行简短重复时,我真的很喜欢它(这@:是个人喜好):

:exec &nu==&rnu? "se nu!" : "se rnu!"

这将保持相同的周期。我认为这主要是因为let &nu=1将隐式设置norelativenumber-出于可能在文档中找到的原因:)


3
+1,因为我可以将它放在.vimrc文件中,作为一行nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>来使用F3切换三个选项。

3
您可以这样做nnoremap <silent> <F3>...以减少视觉干扰和干扰其他贴图。
sehe 2011年

阅读问题时,我想出了几乎相同(但更短的:-)行exe'se'&nu+&rnu?'rnu!':'nu'

顺便说一下,要确保自己numberrelativenumber选项之间的联系,请参阅:helpg When setting this option

@ib:感谢您的分享。我真的很喜欢您的vim代码高尔夫-那里的宝石真的可以加快我的日常工作;但是,在这种情况下,我特别选择了我的版本(除了whtiespace抽筋外,净长3个字符),因为它清晰易读。在我看来,进一步精简并没有任何好处:即使您不得不从内存中键入它,它的键入也会变得更加困难且难以记住。这将在映射中。因此,Benoit的版本很好,除了它不能很好地放在一行上
sehe

8

从Vim 7.3.1115开始,这变得有些复杂。

原因是,除了“无行号”和“绝对行号”之外,相对行号现在有两个设置:普通“相对行号”和“光标行上具有绝对号的相对行号”。

更从技术上来讲,所有四种组合'number''relativenumber'现在是可能的。

切换方法如下:

  • 切换所有四个设置,没有数字绝对相对光标线上的绝对为相对

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • 无数字绝对相对之间切换:

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • 无数字之间切换→ 绝对相对于光标线上的绝对

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    

7

对于那些想要更具可读性的解决方案的人,以下是我的.vimrc文件中的内容

" Relative or absolute number lines
function! NumberToggle()
    if(&nu == 1)
        set nu!
        set rnu
    else
        set nornu
        set nu
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>

很棒的事情是您可以按ctrl+ n在相对和绝对数字模式之间切换!


0

像上面的Eric Anderson这样的另一种选择:

"Relative with start point or with line number or absolute number lines
function! NumberToggle()
    if(&number == 1)
        set number!
        set relativenumber!
      elseif(&relativenumber==1)
        set relativenumber
        set number
      else
        set norelativenumber
        set number                                                  
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>

0
" put this in your .vimrc or source it from your .vimrc


  function! ToggleRelativeNumber()

      if &relativenumber

           set norelativenumber

      else

           set relativenumber

      endif

  endfunction

  nmap ;r :call ToggleRelativeNumber()<CR>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.