我正在执行查找命令 $PWD -name 'filename' | vim -
期望文件名为 filename 的文件能在 vim 编辑器中打开,但是没有成功。 在这种情况下,我确信只有一个名为 'filename' 的文件存在。
同时,find 命令的结果会在 stdout 中显示完整路径。
vim "$(find "$PWD" -name 'filename')"
或者find "$PWD" -name 'filename' -exec vim {} \;
顺带一提,你可以省略"$PWD"
。默认情况下,find
会从当前目录开始搜索。
vim "$(find "$PWD" -name 'filename')"
打开一个新文件,其名称是从查找输出的所有文件名连接而成的。这是在OSX上。 - Jonathan Hartleyfind
命令时,如果想要在一个 vim
实例中打开多个文件(以便可以在 :args
中访问它们),建议使用 +
运算符来连接结果,而不是使用 ;
操作单个结果。因此,可以使用以下命令:find "$PWD" -name 'filename' -exec vim {} +
。 - idbriifind . -name 'filename' -print0 | xargs -0 vim
这个命令也可以使用。你可能想要了解一下xargs,它是一个很方便的工具。
find . -name 'utility' -print0 | xargs -0 vim
会打开一个新文件,其名称是从 find 命令的输出串联而成的。这是在OSX上的情况。 - Jonathan Hartley在 @idbrii 的评论中提到,但我最喜欢的是:
find . -name 'filename' -type f -exec vim {} \+
这将每个找到的文件都在自己的缓冲区中打开,可用:next
和:prev
进行导航。已在OSX上测试,但我相当确定它也适用于Linux。
我觉得一种非常简单的方法是用反引号(大多数键盘下波浪线下面的字符)将查找命令包含起来,并将其传递给vim。
vim `find . -name myfile`
实际上,你可以在任何命令中使用反引号来获取该命令的文字字符串输出。
command | vim -
命令告诉 Vim 读取command
的输出并将其放入缓冲区中(而不是打开这些文件)。 - idbriivim <(command)
也可以使用Bash进程替换来完成相同的操作,而且这不仅限于vim。例如,要查看两个目录之间的差异,请使用diff <(ls -l dir1) <(ls -l dir2)
。 - Jonathan Hartley