我经常发现自己正在做这样的工作流程:
$ 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中进行编辑,而无需剪切&使用鼠标或制表符粘贴文件名 - 完成文件路径。
答案 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。