我经常使用列出行号的选项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
最简单且有弹性的方法:
- 创建一个新文件
~/.bin/vim
并粘贴以下代码 - 创建 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