私はよくgrep
を-n
オプションと一緒に使用して、行番号を一覧表示します例
$ grep -n xyz .*
/ext1/acheong/foo/bar/a.cc:42: inline bool abc(int xyz);
/ext1/acheong/foo/bar/a.cc:43: inline bool def(int xyz);
/ext1/acheong/foo/bar/b.cc:415: int xyz = result;
/ext1/acheong/foo/bar/b.cc:490: xyz += result;
$
vim
にエイリアスを作成することは可能でしょうか。
vim /ext1/acheong/foo/bar/b.cc:415
ファイルを開いて415行目を自動的にシークしますか?
csh
で可能ですか? (はい、はい、csh
は悪魔とすべての不聖なものを引き出しますが、私には選択の余地がありません...)他のシェルの答えも役に立ちます。
まあ、それはエイリアスではありません、あなたはこのようにvimを使うことができます:
vim +<LineNumberHere> fileName
だから、例えば
vim +150 .bash_history
.bash_historyファイル(bash用)を開き、150行目に移動します。
ちなみに、これは検索語でも実行できます。例えば
vim +/MyTerm MyFile
myFileを開き、MyTermの最初のオカレンスに上から移動します。
楽しい!
これに対する1つの解決策は、 file_line.vim プラグインを使用することです。これにより、ファイル名と行番号をVimの引数として、またはVimのコマンドラインで指定できます。
もう1つは、このスクリプトです。
$ cat $(which vimgrep)
#!/bin/bash
tmp=$(mktemp)
cat > $tmp
exec < /dev/tty
vim --cmd 'let &efm=&gfm' -q $tmp "$@"
rm $tmp
これは次のように使用できます:
$ grep -Hn xyz .* | vimgrep
そして、すべての一致をVimのquickfixエラーリストにロードします。見る
:help quickfix.txt
-H
が1つのファイル名のみに展開された場合でも、ファイル名がgrepの出力に含まれるようにするには、grepの.*
オプションに注意してください。
最も単純で回復力のある方法:
~/.bin/vim
そして以下のコードを貼り付けます~/.bashrc
行を追加alias vi=~/.bin/vim
これはパラメータ置換と呼ばれ、基本的に提供されたパラメータを ':'(コロン)で分割します。
#!/usr/bin/env bash
if [[ ${1} == *":"* ]]; then
vim ${1/:*/} -c "${1/*:/}"
else
vim ${1}
fi
次に、次のように単純に使用できます。vim /ext1/acheong/foo/bar/b.cc:415
Vim自体からgrepを実行できます。
:grep xyz *
次に、クイックフィックスウィンドウを開きます。
:cw
vim-fetch コロンで区切られた値として提供される特定の場所でファイルを開くことができます。