使用VIM,可以很容易地显示任何给定文件的行号:
:set number
但是,行编号为1索引,这意味着编号从1开始。 通常这正是我想要的,但是我用来编译代码的特定工具报告零索引行号 - 也就是说,行号从零开始。
如何更改vim的行编号以进行补偿,以便查看vim缓冲区中的数字对应于工具提供的错误,此外跳转到特定数字也对应于工具的数字。
也就是说,如果该工具告诉我第98行有错误,我想通过输入“98G”而不是“97G”来跳转到该行,我想要那条线(实际上是第97行) vim)在行号列表中显示“98”。
虽然我可以过滤工具的输出,虽然相当简单但它不是一项简单的任务,因为该工具还输出对应于每一行的十六进制值,它具有相同的零索引形式,并且这是输出的信息性消息,不仅仅是错误,我有很多这样的项目。
答案 0 :(得分:4)
我不认为这是可能的;但是,假设外部工具的输出只是文本,那么过滤输出可能相当容易,因此编号是1索引以匹配Vim。你能给我们一个你输出的例子吗?
修改
或者,如果你从Vim调用外部命令,你可以做类似的事情(基本上,添加一个空行,运行外部命令,然后删除空行):
command! RunMyExternalProgramme call RunMyExternalProgramme()
func! RunMyExternalProgramme()
" Save the old setting of makeprg
let s:savedMakePrg = &makeprg
" Save the screen layout
let s:savedView = winsaveview()
if config_file != ''
" Put a blank line at the start of the file
:1put! =''
" Save
write
" Change makeprg and run it
let &makeprg = '/path/to/programme -options etc'
make
" Delete the blank line
1d
" Save
write
endif
" Restore the screen layout (optional)
call winrestview(s:savedView)
" Restore the old setting of 'makeprg'
let &makeprg = s:savedMakePrg
endfunc
答案 1 :(得分:3)
我建议将您的工具包装在一个小脚本中。在脚本中,复制源代码并在源顶部添加空行或使用awk
来修复输出(解析错误消息并添加1)。
使vim
显示以0开头的行号的唯一方法是修补源并创建一个新选项(比如行号偏移为lno
)并将此值添加到行号。你需要在很多地方修补它(显示,goto命令,搜索模式等)。不应该花费超过一两年的时间才能使它工作:)祝Vim的作者接受这个作为补丁。祝你好运。
答案 2 :(得分:0)
设置相对编号或简称为“ set rnu” 从0开始计数