VIM:零索引行号:设置号

时间:2009-07-24 08:02:59

标签: vim

使用VIM,可以很容易地显示任何给定文件的行号:

:set number

但是,行编号为1索引,这意味着编号从1开始。 通常这正是我想要的,但是我用来编译代码的特定工具报告零索引行号 - 也就是说,行号从零开始。

如何更改vim的行编号以进行补偿,以便查看vim缓冲区中的数字对应于工具提供的错误,此外跳转到特定数字也对应于工具的数字。

也就是说,如果该工具告诉我第98行有错误,我想通过输入“98G”而不是“97G”来跳转到该行,我想要那条线(实际上是第97行) vim)在行号列表中显示“98”。

编辑:

虽然我可以过滤工具的输出,虽然相当简单但它不是一项简单的任务,因为该工具还输出对应于每一行的十六进制值,它具有相同的零索引形式,并且这是输出的信息性消息,不仅仅是错误,我有很多这样的项目。

3 个答案:

答案 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开始计数