我正在使用vim来管理程序将使用的数据文件,数据文件的格式如下:
<Header line 1>
<Header line 2>
<Header line 3>
<Data line 1>
<Data line 2>
...
<Data line N>
使用这种格式,我无法更改,数据值直到文件中的第4行才开始。但是,程序的输出是按数字引用数据值,这使得很难快速搜索文件以找到正确的行。我尝试了vim 7.3 +的:set relativenumber
(:set rnu
)选项,但它旨在不断更新用于计算相对行数的基线。
我想知道是否有办法在第3行修复基线,这样第4,5和6行将显示为第1行,第2行和第3行(与程序输出一致)。任何帮助将不胜感激!
更新:我最终做的是在源代码中手动添加此选项。很少需要改变;我所做的就是将:set relativenumber
的所有代码复制到一个名为:set fixednumber
的新选项中,然后禁用在行更改时自动更新行号的部分(此部分位于vim源文件中) move.c)。现在有三种互斥的模式:
:set number -- normal line numbers
:set relativenumber -- automatically updating relative numbers
:set fixednumber -- relative line numbers that are fixed against the currently selected row when the option was set
答案 0 :(得分:2)
没有。 0
中的relativenumber
始终是光标所在的行,1
中的number
始终是缓冲区/文件的行1
。
但是,您可以打开一个只包含4
行的新窗口 - &gt; N
并在那里工作。
或者为每个“跳转到行 n ”添加+3
...
使用此映射:
nnoremap <F9> :3+
您只需点击<F9>
,输入行号并点击<Enter>
。
答案 1 :(得分:0)
Vim用于按原样编辑文本文件,因此需要一些扭曲才能满足您的需求。
您可以在数据文件的缓冲区中重新定义G
命令,如下所示:
:nnoremap <buffer> G :<C-u>execute (v:count ? v:count + 3 : line('$'))<CR>
但是,数字列仍将关闭。要纠正这个问题,你必须在加载缓冲区时删除三个初始标题行(可能将它们存储在缓冲区局部变量中),并在保存缓冲区之前简单地重新插入它们。这可以通过autocmds来实现,但是要做到这一点有点棘手。
另一种选择是使用像NarrowRegion这样的插件,它会在暂存缓冲区中打开一个选定的范围,并在保存时同步内容。