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

vim将冒号为filename:line:column的参数解释为,vim,Vim,如果我输入 vim filename:123:89 它打开文件filename进入第123行和第89列 如果不是通过VIM,可能是通过破解外壳 我不知道如何跳到本专栏,但多年来我一直想拥有相同的功能,所以我刚刚破解了“跳转到行”功能。在.bashrc中,设置 VIM=$(which vim) function vim { local args IFS=':' read -a args <<< "$1" "$VIM" "${args[0]}" +0"$

如果我输入

vim filename:123:89
它打开文件
filename
进入第123行和第89列


如果不是通过VIM,可能是通过破解外壳

我不知道如何跳到本专栏,但多年来我一直想拥有相同的功能,所以我刚刚破解了“跳转到行”功能。在
.bashrc
中,设置

VIM=$(which vim)

function vim {
    local args
    IFS=':' read -a args <<< "$1"
    "$VIM" "${args[0]}" +0"${args[1]}"
}
+0
是一种确保默认行号为零的方法

(如果您不使用Bash,您可以将其改编为脚本并放入您的路径中,或者将其转换为您最喜欢的shell语言。要编辑
filename:with:colons
,请使用
$VIM

您可以安装该插件以打开文件名后指定行和列的文件。()

来自github上的自述文件

打开
文件时:行
,例如从 编译器vim试图打开一个文件时出错,文件中有冒号 它的名字

示例:

vim index.html:20 
vim app/models/user.rb:1337
如果冒号后面的内容是一个数字,并且在冒号之前存在一个名为specified的文件,那么在你的plugins文件夹中使用这个小脚本,vim将打开这个文件并将你带到你想要的行


我一直在使用文件行插件,但它有一些未解决的问题,并破坏了其他一些vim插件。所以我去寻找更好的解决办法。这是:

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

  • 仅猛击
  • 仅解析第一个参数,而vim+X解析第一个文件参数。通过正确的命令行解析,可以轻松地生成更复杂的版本
优点:

  • 不会破坏其他vim插件
  • 例如,您可以轻松地使用$EDITOR并将其用于emacs
  • 与Fred的答案相比,它没有使用IFS/read来解析参数,而是使用bash参数展开
  • 还发送剩余的参数,这可能偶尔是必要的

您可以使用
$vim-c'norm跳转到行和列!123G89 |'filename
。使用
$vim filename-c“37norm 13 |”
跳转到第37行的第13列或
filename
。好的,我通过将函数
vim
中的最后一行替换为
if[-z“${args[1]}”行来实现它;然后args[1]=“1”;fi
“$VIM”“${args[0]}”-c”norm!${args[1]}G0${args[2]}|”
。欢迎提供如何更好地执行此操作的建议。使用
命令vim
而不是
$vim
在路径中启动vim可能会更容易。命令builtin禁止函数查找。只是好奇文件行如何破坏其他插件。我已经用了很长时间,没有注意到任何东西。到目前为止,这是我看到的唯一比这更好的东西。文件行甚至处理
:e
,如果您从未关闭,我发现这一点很重要vim@FDinoff:看看这些问题,例如:
function vim() {
        local first="$1"
        case $first in
                *:*)
                        shift
                        command vim ${first%%:*} +0${first##*:} $@
                        ;;
                *)
                        command vim $@
                        ;;
        esac
}