vim将带有冒号的参数解释为filename:line:column

时间:2014-11-04 11:10:38

标签: vim

是否可以以这样的方式配置VIM,如果我输入

vim filename:123:89

它打开文件filename转到第123行和第89列?

如果没有通过VIM可能有一个hack的shell?

3 个答案:

答案 0 :(得分:5)

您可以安装file-line插件,将文件打开到文件名后指定的行和列。 (github mirror

来自github上的自述文件

  

当您打开file:line时,例如在处理和粘贴时   编译器vim的错误尝试打开带冒号的文件   它的名字。

     

示例:

vim index.html:20 
vim app/models/user.rb:1337
     

如果冒号之后的东西是一个数字,并且冒号后面的文件存在,并且冒号之前的文件存在,则冒号将打开此文件并带您到达您希望的行。< / p>

答案 1 :(得分:2)

我不确定如何跳到专栏,但我已经想要相同的功能多年了,所以我只是劈开了#34;跳到了线上#34;功能。在.bashrc中,设置

VIM=$(which vim)

function vim {
    local args
    IFS=':' read -a args <<< "$1"
    "$VIM" "${args[0]}" +0"${args[1]}"
}

这会将参数拆分为Vim :,然后构造一个表单的命令行

vim <filename> +0<line>

+0是一个黑客,以确保默认行号为零。

(如果您未使用Bash,则可以将其改编为脚本并将其放入路径中,或将其翻译为您喜欢的shell语言。要编辑filename:with:colons,请使用$VIM }。)

答案 2 :(得分:0)

我一直在使用文件行插件,但它有一些未解决的问题,并打破了其他一些vim插件。所以我去钓鱼寻求更好的解决方案。这是:

function vim() {
        local first="$1"
        case $first in
                *:*)
                        shift
                        command vim ${first%%:*} +0${first##*:} $@
                        ;;
                *)
                        command vim $@
                        ;;
        esac
}

限制:

  • 仅限bash
  • 仅解析第一个参数,而vim + X解析第一个文件参数。使用适当的命令行解析可以轻松地创建更复杂的版本。

优点:

  • 不会破坏其他vim插件
  • 您可以轻松使用$ EDITOR并将其与emacs一起使用。
  • 与Fred的回答相比,它不使用IFS / read来解析参数,而是使用bash参数扩展。
  • 还会发送剩下的参数,这可能偶尔也是必要的。