递归查找含指定文本的文件后,xargs vim打开无反应怎么解决
解决
grep -r 'something' . | xargs vim无反应的问题 你当前的grep命令默认输出的是匹配行的完整信息(文件名:行号:匹配内容),xargs会把每一行整串当成要打开的文件名,但系统里根本不存在这些带行号和内容的“文件”,所以vim找不到目标,自然没反应。
两种解决办法:
只打开匹配的文件:用grep的
-l(小写L)参数让它只输出匹配到内容的文件名,命令改成:grep -rl 'something' . | xargs vim这样xargs传递给vim的就是正确的文件名列表,vim会正常打开所有匹配文件,你可以用
:n/:prev在文件间切换。打开文件并直接跳转到匹配行:如果想打开文件后自动定位到匹配的行,可以用循环处理grep的输出,提取文件名和行号后传给vim:
grep -rn 'something' . | while read -r match_line; do target_file=$(echo "$match_line" | cut -d: -f1) line_number=$(echo "$match_line" | cut -d: -f2) vim +"$line_number" "$target_file" done这个脚本会逐个打开文件并跳转到对应匹配行,关闭当前文件后会自动打开下一个匹配的位置。
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

