Answers:
您可以使用命令替换:
vim $(find -name somefile.txt)
要么
find -name somefile.txt -exec vim {} \;
vim `find -name somefile.txt`
。@StuartPowers或者,vim `!-1`
如果您已经使用过此命令,则可以使用以前的命令
如果您不介意再次运行该命令:按下Up并附加xargs
命令。或使用历史记录替换并运行
!! | xargs vim # won't work with file names containing \'" or whitespace
!! | xargs -d \\n vim # GNU only (Linux, Cygwin)
有一种轻量级的方法来保存在ksh和zsh而不在bash中工作的命令的输出(它需要在父shell中执行管道的输出端)。管的命令到函数K
(下面的zsh的定义),其ķ EEPS其在可变输出$K
。
function K {
K=("${(@f)$(tee /dev/fd/3)}") 3>&1;
}
find … |K
vim $K
仅使用shell确实不可能自动保存每个命令的输出,您需要在仿真终端中运行该命令。您可以通过在内部运行script
(BSD实用程序,但在大多数unices上可用,包括Linux和Solaris)来完成此操作,该操作可以通过文件保存会话的所有输出(仍然需要付出一些努力才能可靠地检测到打字稿中的最后一个提示。 )。
我写了一个函数pvim
,它可以满足您的需求。如果有多行被pvim
忽略,那么除了第一行外,其他所有行都可以忽略,但可以扩展以在vim中打开多个文件。
stu@sente ~ $ function pvim() { read -r somefile; exec < /dev/fd/1; vim "$somefile"; }
stu@sente ~ $ type pvim
pvim is a function
pvim ()
{
read -r somefile;
exec < /dev/fd/1;
vi "$somefile"
}
像这样使用它:
stu@sente ~ $ find . -name "foo.txt" | pvim
它将把第一个“ foo.txt”加载到vim中,就像您键入了一样:
vim $(find . -name "foo.txt | head -n1")