编辑上一个命令输出的第n行的快速方法

时间:2011-11-30 10:13:43

标签: bash shell unix vim

我经常发现自己正在做这样的工作流程:

$ find . |grep somefile
./tmp/somefile.xml
./test/another-somefile.txt

(评论输出)

$ vim ./tmp/somefile.xml

现在,如果有一些方便的方法来使用find命令的输出并将其提供给vim,那将会很简洁。

我提出的最好的是:

$ nth () { sed -n $1p; }
$ find . |grep somefile
./tmp/somefile.xml
./test/another-somefile.txt

(评论输出)

$ vim `!!|nth 2`

我想知道是否有其他的,可能更漂亮的方法来完成同样的事情?

为了澄清,我想要一种方便的方法从先前运行的命令中抓取第n行,以快速打开该文件以便在vim中进行编辑,而无需剪切&使用鼠标或制表符粘贴文件名 - 完成文件路径。

5 个答案:

答案 0 :(得分:4)

方式1:不要将精确文件传递给vim,而是整个输出。在vim中选择文件

目前您分两步工作:

1 - 启动find / grep ... cmd

2 - vim !! ....

如果您确定要使用vim从查找结果中打开一个(或多个)文件。你可以试试:

find. (with grep if you like)  |vim -

然后你将整个输出放在vim中,现在你可以使用vim magic将光标移动到你想要编辑的文件,然后按gf。 (我有时这样做)

方式2:在您的查找(或grep)中优化您的正则表达式,以获取您要编辑的单个文件。

这根本不是一件难事。然后你可以vim !!

你的nth()很好。但是想象输出中有30行,你的文件位于#16行。你怎么算?确定你可以在最后添加|nl,然后你不能直接使用!!再过......

只是我的2美分

答案 1 :(得分:1)

评论后修改。不确定它是否“方便”但是......

command | tail -n3 | head -n1 | xargs vim

答案 2 :(得分:0)

也许这就是你要找的东西?

find . -name "*somefile*" -exec vim -p {} \;

答案 3 :(得分:0)

如果您想进行互动评论,可以使用以下内容:

TMP_LIST=""; for i in `find . | grep somefile`; do echo $i; read -p "(y/n)?"; [ $REPLY == "y" ] && TMP_LIST="$TMP_LIST $i"; done; vim $TMP_LIST

答案 4 :(得分:0)

你几乎做到了!!

pearl.251> cat file1
a b c d e f pearl.252> find . -name "file*"
./file1
./file2
./file3
./file4
./file5
./file6
./file7
pearl.253> vi `!!|awk 'NR==1'`

此处的最后一行将打开vi中的文件1。