vimの作業ディレクトリを現在作業中のファイルに変更するのが本当に好きです。このために私は私のvimrcで使用します:
autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif
私が気に入っているのはgF
、vimで(*)を使用して、カーソルの下のファイルを新しいバッファーで開くことです。
ただし、この組み合わせは、私の好みのワークフローで問題を引き起こします。
- プロジェクト内のすべての「foo」を検索したいので、シェルを使用
cd
してフォルダーに移動しpath/to/project/src
、実行しますgrep -Ern 'foo' * | vim -
。引数のために、vimで開かれる出力は次のとおりです。a/file1.c:42: foo b/file2.c:13: foo
ここで、ヒットを調べたい
file1
ので、そこにgF
飛び込みます。このアクションにより、作業ディレクトリが変更されますpath/to/project/src/a
私はの出力を持つタブに戻る場合は
grep
、作業ディレクトリにとどまるpath/to/project/src/a
ので、%:p:h
明らかに標準入力から読み込み、何かのためにパスを解決することはできません。問題:相対パスが間違っているため、
file2
viaにジャンプできなくgF
なりました。
vimの作業ディレクトリを、バッファに切り替えたときに呼び出された場所に自動的に変更するとよいでしょう。この例では、これは、grep
バッファに切り替えるときに作業ディレクトリがになることを意味しますpath/to/project/src
。
これを達成する方法についてのアイデアに感謝します。
(*)完全開示:spf-13 vimを使用しますが、基本的な問題はvim全般に適用されるはずです。
回避策をありがとう!VIMを通して真の解決策は、しかし、まだ:)いただければ幸い
—
真剣に
grep -Ern 'foo' $PWD/* | vim -
ます。Grepはフルパスを出力し、vimは現在のディレクトリに関係なくファイルにジャンプします。