9

Vim でいくつかのものをコンパイルする関数を作成しました。次のようになります。

function! MyFunc(mode)
  lcd ./build
  pwd
  let &makeprg='the_command some_script_file'
  let &errorformat='some format'.','
  let &errorformat.='%-G%.%#'
  silent make
  lcd ..
  cwindow
endfunction

私は通常、プロジェクト ディレクトリで vim を開きます。この関数を実行すると、cd でビルドされ、ビルドされ、cd で戻るので、プロジェクト ディレクトリにとどまります。

ただし、ビルドが失敗してクイックフィックス ウィンドウが表示されると、プロジェクト ディレクトリに相対的なファイル名が表示されることがありますが (yay)、同じファイルに絶対パスが表示されることもあります。ビルド スクリプトからの出力は常に相対パスを示し、vim は両方を正しく処理します。つまり、正しいファイルを見つけます。

パス処理に責任があると思います。私の質問は、何が問題なのかということです。また、ビルド ディレクトリへの切り替えを処理するより良い方法はありますか? 常に相対パスを表示したい。

ありがとう!!

4

2 に答える 2

5

これは と関係があると思いますlcd。関数からクイックフィックス ウィンドウを開くと、現在のウィンドウからローカル ディレクトリが継承されます。ただし、クイックフィックス ウィンドウが他の場所から (または関数を実行する前に) 開かれると、グローバル作業ディレクトリが保持されます。不一致がある場合、Vim は絶対パスを表示する必要があります。

本当に を使用する必要がある場合は:lcd、ロケーション リスト ( :lmake) を使用することをお勧めします。これは、ウィンドウに対してもローカルになるためです。:cdただし、スイッチはとにかく一時的なものであり、これまでのところ実際の元の値を復元することは気にしないため、最初に global を使用してみます。

于 2012-10-30T15:04:43.317 に答える