2017-03-28 16 views
0

特定のバッファの現在の作業ディレクトリを変更し、他のバッファの以前の値に変更するにはどうすればよいですか?VIM:現在のバッファの作業ディレクトリのみを変更する

より正確には、ファイルタイプを含むバッファがアクティブなときに現在の作業ディレクトリを変更する特定のファイルタイプに対して自動コマンドを使用することです。他のバッファを使って作業するときは元に戻してください。

私は私のvimrcでそのようなものを持っていた:

autocmd BufEnter *.py :lcd%:p:h 
autocmd BufLeave *.py :lcd- 

ここでの考え方は、私はPythonのファイルで作業する場合、ファイルのディレクトリに切り替えて、何か他のもの、例えば上で作業するときに、前のディレクトリに移動したかったということですテキスト、vimLなど。明らかに、それは動作しませんでした。私もBufWinLeaveを使ってみましたが、何も変わっていませんでした。

ここで何が間違っていると指摘できますか?それとも簡単な解決法がありますか?

augroup CDRooter 
    autocmd! 
    autocmd BufWinEnter * if &filetype == 'python' | lcd %:p:h | else | lcd! | endif 
augroup END 

注:

+0

::より多くのヘルプを参照してください

lcd'はのみ*の.pyファイルに影響を与え、なぜあなたも他のバッファのためのCWDを元に戻すことを試みます!そのバッファのCWDが決して変更されなかった場合、あなたは何に戻りますか? –

+0

':lcd'はバッファローカルではなくウィンドウローカルであることに注意してください。 – romainl

+0

@ work.bin romainlとして言及されたウィンドウローカル、バッファまたはファイルローカルではありません。同じウィンドウで、私はさまざまなファイルタイプのいくつかのバッファを持つことができます。そして、私はcwdを.pyファイルを除いてすべてのバッファで同じにしたいので、CWDを.pyファイルを含むディレクトリに変更したい。 – mfedoten

答えて

0

は、私はあなたが以下のと似た何かを成し遂げることができると思う私は:lcd -がうまくいくことを確認していません。代わりに、私は:lcd!を使用して、単にグローバルな現在の作業ディレクトリを使用するようにウィンドウを元に戻します。

基本的な考え方は、ファイルタイプをスニッフィングするウィンドウを入力し、それに応じて:lcdを実行するときです。 `もし

:h 'filetype' 
:h BufWinEnter 
:h :lcd 
:h :augroup 
:h :autocmd 
:h :if 
+0

実際には動作しません。それは期待どおりに動作しますが、私が望むものではありません。私はホームディレクトリに行きたくないので、ファイル(.py以外)を開いたディレクトリに行きたいと思っていました。 ':lcd -'は手動で試してもうまく動作します。しかし、私の質問からの自動コマンドでは、 'lcd -'が同じディレクトリ(pythonファイルを囲んでいる)を返すので、cwdが同じdirに何度か変更されたようです。 – mfedoten

+0

@mfedoten私は ':lcd!'を使って、非Pythonのウィンドウにグローバルな現在の作業ディレクトリを使用するように変更しました。これはあなたが望むものではないかもしれません。特定の非Pythonのバッファには ':lcd'を使いたいかもしれません。そうであれば、適切なディレクトリをバッファ変数に格納し、 ':lcd'を正しいディレクトリに使用するためのメカニズムが必要になるでしょう。あるいは、いくつかのコマンドを使って適切な場所に '' lcd':rege ''することができます(例えばfugitive.vimの ':Glcd') –

関連する問題