4

ファイル内で、.vimrcファイルが特定のディレクトリからロードされた場合にのみ autocmd を実行することは可能ですか?

MacVim には、.vimrc編集中のファイルを含むディレクトリに自動的に移動するコード行がありますが、:Gedit が作成する git ファイルにアクセスするとエラーが発生します (vim package fugitive )。

autocmd は次のとおりです。

autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')

エラーは次のとおりです。

Error detected while processing BufEnter Auto commands for "*":

:echo expand("%")Fugitive が で始まるパスを作成することは明らかなfugitive:///ので、ファイルのパスの最初の 12 文字 == かどうかをテストする方法を見つけようとしています。fugitive:///

4

3 に答える 3

2

うーん、私は誤解していると思います。Vim ではなく、シェルでディレクトリを変更しているのですね。その場合、autochdir では十分ではありません。

:Geditファンキーな名前で一時ファイルを作成します。

:e vimrc
:Gedit ~2
:echo expand("%")
fugitive:///home/romainl/.vim/.git//8aece3dc3c19522c33c997bc82a2487e3bdf013b/vimrc
:echo expand("%:p:h")
fugitive:///home/romainl/.vim/.git//8aece3dc3c19522c33c997bc82a2487e3bdf013b/

有効なパスではないため、シェルがcdその「ディレクトリ」に移動する方法はありません。

ただし、現在のファイルを含むディレクトリに自動的にset autochdirvimに指示するものがあります。cdそのおかげで、一時ファイルが次の場所にあることがわかります。

:pwd
/tmp/vGiSmH2

:pwdそこへの出力を使用できますcd

于 2012-08-25T09:23:36.177 に答える
1

これは、関数を使用して実現できますstrpart

私は最終的に次のことに落ち着きました:

if strpart(expand("%:p:h"), 0, 15) == "/Users/myputer/"
   autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')
endif

cdで始まる場合にのみフォルダーに送信されます/Users/myputer/

于 2012-09-16T02:58:08.557 に答える