【发布时间】:2019-08-26 20:36:27
【问题描述】:
我正在尝试 grep 文件并将行号输出到
vim +{lineNumber} filetoedit
不幸的是,Vim 抛出了一个错误提示
Vim:警告:输入不是来自终端
一个例子:
grep -nF 'Im looking for this' testfile.txt | cut -f1 -d: | xargs vim +{} testfile.tx
【问题讨论】:
我正在尝试 grep 文件并将行号输出到
vim +{lineNumber} filetoedit
不幸的是,Vim 抛出了一个错误提示
Vim:警告:输入不是来自终端
一个例子:
grep -nF 'Im looking for this' testfile.txt | cut -f1 -d: | xargs vim +{} testfile.tx
【问题讨论】:
xargs 运行的命令从xargs 继承stdin,因此它的输入从cut 连接到管道,而不是终端。
将结果分配给一个变量并使用它。
line=$(grep -nF 'Im looking for this' testfile.txt | cut -f1 -d: )
vim "+$line" testfile.txt
【讨论】:
vim 实例几乎没有意义。他也没有使用xargs 选项为每个输入单独运行命令。
xargs 只是因为这是他知道将标准输入转换为参数的唯一方法,而不是因为他期望有多个参数。
xargs 通常用于将stdin 转换为多个参数。如果它只是一个参数,您通常使用命令替换。
var=$(shellcommand)。也可以直接配音到vim命令:vim "+$(grep...)" testfile.txt。
-m 1。