多くのファイルをgrepして行を見つけると、grepは1つの結果を返します。ファイル名をコピーして新しいコマンドに貼り付けるのではなく、エディターでその1つの結果を開くことができるようにします。次のようなものですgrep foo | vim
。BASHでそれを行う方法はありますか?
多くのファイルをgrepして行を見つけると、grepは1つの結果を返します。ファイル名をコピーして新しいコマンドに貼り付けるのではなく、エディターでその1つの結果を開くことができるようにします。次のようなものですgrep foo | vim
。BASHでそれを行う方法はありますか?
回答:
を使用grep -l
して、一致するテキストではなく、一致するファイルのファイル名を取得し、次にそれを結合しvim
ます。
vim "$(grep -l some_pattern file_names)"
-q
のフラグをgrep
確認グレップは確かにいくつかの一致するファイルをもたらした作るために:grep -q patterns fnames && vim $(grep -l pattern fnames)
vi
、OPはそうでないかもしれません。
プロジェクトでの検索では、Fugitiveで vimを離れる必要はありません
autocmd QuickFixCmdPost *grep* cwindow
以下に例を示します :Ggrep config
編集:あなたのコメントを読んだ後、私は最初は質問を理解していなかったことがわかります。検索用語を引数として使用し、検索パスの入力を求める簡単なスクリプトを次に示します。結果が1つのファイルのみで見つかった場合、検索結果の場所で編集するためにファイルを開きます。
#!/bin/bash
SRCHTRM="$1"
read -p "Where to search: " SRCHPATH
FILEFOUND=$(grep "$SRCHTRM" $SRCHPATH)
FILEFOUNDCNT=$(grep "$SRCHTRM" $SRCHPATH | wc -l)
FILEAWK=$(echo "$FILEFOUND" | awk -F":" '{ print $1 }')
if [ "$FILEFOUNDCNT" -eq "1" ];then
vi +/"$SRCHTRM" "$FILEAWK"
else
echo "$1 was found in more than one file"
fi
vim
から読み取るためにSTDIN
:grep foo | vim -