是否可以按照 grep -n 结果中的格式打开文件到特定行号?

是否可以按照 grep -n 结果中的格式打开文件到特定行号?

我经常使用列出行号的选项grep-n例如

$ grep -n xyz .*
/ext1/acheong/foo/bar/a.cc:42:    inline bool abc(int xyz);
/ext1/acheong/foo/bar/a.cc:43:    inline bool def(int xyz);
/ext1/acheong/foo/bar/b.cc:415:            int xyz = result;
/ext1/acheong/foo/bar/b.cc:490:                xyz += result;
$

是否可以vim这样使用别名

vim /ext1/acheong/foo/bar/b.cc:415

是否会打开文件并自动查找第 415 行?

有可能吗csh?(是的,是的,csh会带来魔鬼和一切不圣洁的东西;但我别无选择……)对其他外壳的回答也会很有用。

答案1

嗯,这不是一个别名,你可以像这样使用 vim:

vim +<LineNumberHere> fileName

例如

vim +150 .bash_history

打开你的 .bash_history 文件(用于 bash),并导航到第 150 行。

顺便说一句,您也可以使用搜索词来实现这一点。例如

vim +/MyTerm MyFile

打开 MyFile 并从顶部导航到 MyTerm 的第一个匹配项。

享受!

答案2

解决此问题的一个方法是使用文件行.vim插件,它允许您指定文件名和行号作为 Vim 或在 Vim 的命令行上的参数,就像您所展示的那样。

另一个是这个脚本,

$ cat $(which vimgrep)
#!/bin/bash

tmp=$(mktemp)

cat > $tmp
exec < /dev/tty
vim --cmd 'let &efm=&gfm' -q $tmp "$@"
rm $tmp

可以像这样使用:

$ grep -Hn xyz .* | vimgrep

并将所有匹配项加载到 Vim 的快速修复错误列表中。请参阅

:help quickfix.txt

请注意grep 的选项,以确保即使仅扩展为一个文件名,-H文件名也包含在 grep 的输出中。.*

答案3

你可以从 Vim 本身进行 grepping:

:grep xyz *

然后打开 quickfix 窗口:

:cw

答案4

最简单且有弹性的方法:

  1. 创建一个新文件~/.bin/vim并粘贴以下代码
  2. 创建 shell 别名:在~/.bashrc添加行中alias vi=~/.bin/vim

这称为参数替换,基本上会将提供的参数拆分为'' (冒号)。

#!/usr/bin/env bash

if [[ ${1} == *":"* ]]; then
    vim ${1/:*/} -c "${1/*:/}"
else
    vim ${1}
fi

然后你可以简单地使用它作为: vim /ext1/acheong/foo/bar/b.cc:415

相关内容