固定线的相对行号

时间:2012-11-02 20:15:17

标签: vim

我正在使用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

2 个答案:

答案 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这样的插件,它会在暂存缓冲区中打开一个选定的范围,并在保存时同步内容。