我正在尝试创建一个自动打开包含特定模式的任何文件的脚本。
这是我迄今取得的成就:
xargs -d " " vim < "$(grep --color -r test * | cut -d ':' -f 1 | uniq | sed ':a;N;$!ba;s/\n/ /g')"
问题是vim不能将该命令识别为列表的单独文件,而是整个文件名:
zsh: file name too long: ..............
有没有简单的方法来实现它?我错过了什么?
答案 0 :(得分:2)
调用xargs的常用方法是通过管道传递带换行符的参数:
grep -Rl test * | xargs vim
请注意,我还将-l
参数传递给grep
以列出包含我的模式的文件。
答案 1 :(得分:1)
使用此:
vim -- `grep -rIl test *`
-I
跳过二进制文件中的匹配-l
首次匹配时打印文件名尝试省略xargs
,因为这会导致vim
的行为不正确:
Vim: Warning: Input is not from a terminal
答案 2 :(得分:0)
我通常做的是将以下行附加到文件列表中:
> ~/.files.txt && vim $(cat ~/.files.txt | tr "\n" " ")
例如:
grep --color -r test * > ~/.files.txt && vim $(cat ~/.files.txt | tr "\n" " ")
我的.bashrc中有以下内容绑定VV
(大写两次V
)以自动插入:
insertinreadline() {
READLINE_LINE=${READLINE_LINE:0:$READLINE_POINT}$1${READLINE_LINE:$READLINE_POINT}
READLINE_POINT=`expr $READLINE_POINT + ${#1}`
}
bind -x '"VV": insertinreadline " > ~/.files.txt && vim \$(cat ~/.files.txt | tr \"\\n\" \" \")"'