2015-10-21 39 views
0

我想創建一個腳本,它自動打開包含特定模式的任何文件。將一個變量中捕獲的多個文件名傳遞給一個命令(vim)

這是我取得了迄今:

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: .............. 

是有一個簡單的方法來實現它?我錯過了什麼?

回答

2

通常的方法來調用xargs的只是通過管道傳遞與新行參數:

grep -Rl test * | xargs vim 

請注意,我也傳遞-l參數grep列出包含我的模式的文件。

1

使用這樣的:在二進制文件

vim -- `grep -rIl test *` 
  • -I跳過匹配
  • -l打印文件名,在第一場比賽

儘量省略xargs,becouse這會導致不正確的行爲vim

Vim: Warning: Input is not from a terminal 
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\" \" \")"' 
相關問題