dur*_*597 3 grep bash vim find xargs
我用 find 搜索了几个文件,我想在 Vim 的选项卡中打开所有这些文件。所以我试过这个:
find . | xargs fgrep -l myExpression | xargs vim -p
Run Code Online (Sandbox Code Playgroud)
这很好用,除了当我完成并退出 Vim 时,我在 vim 中输入的所有内容都是不可见的,并且退格键不起作用(所以当我像ls<backspace><backspace>exit
生成的历史一样输入ls^?^?exit
而不是exit
。它也警告我我的管道不是从终端。
不过,当我重新启动 shell 时,一切又都好了。这始终是可重现的。
bash 版本:
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)
维姆版本:
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr 14 2015 05:43:37)
Included patches: 1-699
Run Code Online (Sandbox Code Playgroud)
小智 5
命令行程序可以通过两个来源从用户那里获取输入:来自标准输入(您要通过管道输入),以及直接附加到 TTY。当这些混合在一起时,可能会发生不好的事情。Vim 不想从管道中读取输入,它需要您,即用户,直接读取。所以让我们给它真正的标准输入。
作为解决方案,我们可以使用命令替换直接将文件作为参数传递给 Vim:
vim -p $(find . | xargs fgrep -l myExpression)
Run Code Online (Sandbox Code Playgroud)
请注意,由于 shell 执行的扩展,这将无法正确处理名称中带有空格的文件,但我的 Bash-fu 太弱了,无法轻松解决。
此外,find options | xargs some command
可以写为find options -exec some command {} +
,这可能被认为更优雅。
归档时间: |
|
查看次数: |
828 次 |
最近记录: |