在Vim中同时显示相对和绝对的行数

在Vim中有没有办法同时显示相对绝对行号? 无论是并排,还是其他有趣的演示都很好。

是的你可以。 使用RltvNmbr.vim显示相对数字,并使用Vim显示绝对值:

在这里输入图像说明

当设置“relativenumber”和“number”时,Vim 7.4(Patch 7.3.787 )将显示绝对行号而不是“0”。

来自:h relativenumber ,7.3

设置此选项时,“号码”被重置。

来自:h relativenumber ,7.4

光标行前面的数字也取决于'number'的值,参见| number_relativenumber | 为这两个选项的所有组合。

合理地说,你不能。 行号是每个缓冲区一个,仅由'number'选项控制。

一个疯狂的想法我试过了: :vertical diffsplit plus :setlocal relativenumber 。 这会得到两个相邻的缓冲区副本,因为它们处于diff模式,所以链接在滚动位置。 但是,它确实无法正常工作。 相关的数字没有成功更新(7.3.154,稍后可能会修复的错误,但我怀疑它 – 这是几乎不值得的),即使他们这样做,你会被困在一个伟大的眼睛和更难的pipe理和导航。

你可以用一个插件写一个特殊的缓冲区来实现,但是实现起来会很难看,而且还会导致导航困难(因为这是另一个缓冲区)。 我当然不会花时间写这样一个插件,但我必须承认我想要显示两种行号的forms。

结合plnxMacario的答案与Vim 7.4。

 autocmd WinEnter,FocusGained * :setlocal number relativenumber autocmd WinLeave,FocusLost * :setlocal number norelativenumber 

这会在关注的窗口中显示“相对编号”(绝对当前行),在非关注窗口中显示“绝对”。

这是我的映射关系相对和绝对行号切换相对和绝对。

进入一个窗口将窗口设置为相对数字,而将其设置为绝对。 然后,如果你做一个垂直分割的窗口,你会select相对和绝对数字相同的缓冲区。

 " setglobal relativenumber autocmd WinEnter * :setlocal relativenumber autocmd WinLeave,FocusLost * :setlocal number autocmd InsertEnter * :setlocal number autocmd InsertLeave * :setlocal relativenumber function! g:ToggleNuMode() if(&relativenumber == 1) set number else set relativenumber endif endfunc map <Cl> :call g:ToggleNuMode()<CR>