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

Eri*_*rik 5 unix vim bash shell

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

$ find . |grep somefile
./tmp/somefile.xml
./test/another-somefile.txt
Run Code Online (Sandbox Code Playgroud)

(评论输出)

$ vim ./tmp/somefile.xml
Run Code Online (Sandbox Code Playgroud)

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

我提出的最好的是:

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

(评论输出)

$ vim `!!|nth 2`
Run Code Online (Sandbox Code Playgroud)

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

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

Ken*_*ent 4

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

目前您正在分两步进行:

1 - 启动 find/grep... cmd

2 - 维姆!!...

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

find. (with grep if you like)  |vim -
Run Code Online (Sandbox Code Playgroud)

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

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

这根本不是什么难事。然后你就可以 vim !!

你的 nth() 很好。但是想象一下输出中有 30 行,并且您的文件位于第 16 行。您如何计算它?当然可以|nl在最后添加,那么就不能直接使用!!不再..

只是我的 2 美分