我希望在命令行上进行grepping后自动获取Vim中结果的位置。有这样的功能吗?
要在Vim上打开的文件,请参阅grep:
% grep --colour -n checkWordInFile *
SearchToUser.java:170: public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:17: public boolean checkWordInFile(String word, File file) {
SearchToUser.java~:41: if(checkWordInFile(word, f))
答案 0 :(得分:26)
如果您将grep
的输出传输到vim
% grep -n checkWordInFile * | vim -
你可以将光标放在文件名上并点击gF
跳转到该文件中由该行grep输出引用的行。 ^WF
会在新窗口中打开它。
从vim中你可以用
做同样的事情:tabedit
:r !grep -n checkWordInFile *
相当于
但不太方便:lgrep checkWordInFile *
:lopen
它会显示超级快速修复窗口,以便您方便地浏览搜索结果。
通过使用vim的本机grep,您可以选择速度更慢,但在某种程度上更灵活的结果:
:lvimgrep checkWordInFile *
:lopen
这个使用vim RE和路径(例如允许**)。跑步可能需要2-4倍(可能更多),但你可以使用花哨的\(\)\@<=
和羽毛。
答案 1 :(得分:7)
查看“Grep search tools integration with Vim”和“Find in files within Vim”。基本上,vim提供了搜索文件的这些命令:
:grep
:lgrep
:vimgrep
:lvimgrep
这些文章提供了有关其用法的更多信息。
答案 2 :(得分:5)
你可以这样做:
% vim "+/checkWordInFile" $(grep -l checkWordInFile *)
这将在vim命令行中放入与正则表达式匹配的所有文件的列表。 “+ / ...”选项将告诉vim从每个文件的开头搜索,直到找到与正则表达式匹配的第一行。
<强>校正:强>
+ / ...选项仅搜索正则表达式的第一个文件。要搜索您需要的每个文件:
% vim "-c bufdo /checkWordInFile" $(grep -l checkWordInFile *)
如果这是你经常需要做的事情,你可以写一个bash函数,这样你只需要指定一次正则表达式(假设正则表达式对grep和vim都有效)。
答案 3 :(得分:4)
我认为这就是你要找的东西:
http://www.vim.org/scripts/script.php?script_id=2184
当你打开一个文件:line时,例如当从编译器(或grep输出)中复制和粘贴时,vim会尝试打开名称中带冒号的文件。如果冒号之后的东西是一个数字,并且存在一个文件存在,并且冒号之前有一个文件存在,冒号将打开这个文件并带你到你想要的第一行。
这绝对是我想要的。
答案 4 :(得分:2)
答案 5 :(得分:2)
您可能想要为这些功能创建功能。 :)
vim
电话(控制台)grep -rn "implements" app | # Or any (with "-n") you like
awk '{
split($0,a,":"); # split on ":"
print "</dev/tty vim", a[1], "+" a[2] # results in lines with "</dev/tty vim <foundfile> +<linenumber>
}' |
parallel --halt-on-error 1 -j1 --tty bash -ec # halt on error and "-e" important to make it possible to quit in the middle
使用:cq
中的vim
停止编辑。
gvim
)启动服务器:
gvim --servername GVIM
打开标签:
grep -rn "implements" app | # again, any grep you like (with "-n")
awk "{ # double quotes because of $PWD
split(\$0,a,\":\"); # split on ":"
print \":tabedit $PWD/\" a[1] \"<CR>\" a[2] \"G\" # Vim commands. Open file, then jump to line
}" |
parallel gvim --servername GVIM --remote-send # of course the servername needs to match
答案 6 :(得分:1)
如果使用git,则仅在git跟踪的文件中搜索时,结果通常更有意义。要在给定的行中打开文件,这是git grep
在vim中的搜索结果,您需要先fugitive plugin,然后
:copen
:Ggrep pattern
将为您提供缓冲区中的列表,您可以从git grep结果中选择打开文件。
答案 7 :(得分:-2)
在这个特定的例子中:
vim SearchToUser.java +170