web-dev-qa-db-ja.com

vimで現在のファイルと同じフォルダにあるファイルを開く

Vimでは、バッファを開いているときに、ファイルと同じディレクトリに別のファイルをロードする必要があることがよくありますが、通常はcdをそのファイルにロードしないため、pwdは親フォルダなので、毎回パスを再入力する必要があります。これに対するショートカットはありますか?または、pwdをファイルが存在するディレクトリに変更する方法はありますか?

例:

cd /src
vi lib/foo/file.js

lib/fooには2つのファイルがあります:file.jsおよびfile2.js

viで:

:e file2.js  # doesn't work
45
cloudhead

新しいバージョンのvimにはautochdirコマンドが組み込まれていますが、そうでない場合は、セットアップのようにBufEnterにフォールバックできます。

" set vim to chdir for each file
if exists('+autochdir')
    set autochdir
else
    autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /
endif
31
gregf

:Exの略:Exploreはあなたが要求したことを正確に実行します。

51
sumek

.vimrcに次の3行があります。

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
map ,t :tabe <C-R>=expand("%:p:h") . "/" <CR>
map ,s :split <C-R>=expand("%:p:h") . "/" <CR>

これで、このバッファで,e <some-file>が開きます。 ,t,sは同じことを行いますが、新しいタブ/分割ウィンドウで行います。

45
hgmnz

簡単なアイデアは、autochdir設定を使用することです。 .vimrcでこれを試してください:

set autochdir

これにより、vimの作業ディレクトリが開いたファイルのディレクトリに変更されます。

注:この機能が追加されたバージョンがわかりません。これを機能させるためにvim6から7.2にアップデートしました。

26

次のことを試してください。

:e %:p:h/file2.js
15
user156676

この行をvimrc構成に追加します

autocmd BufEnter * cd %:p:h

%現在のファイル名
:pフルパスに展開
:hヘッド(最後のパスコンポーネントが削除されました)

見る :help expand 詳細については。

9
rcs

これを.vimrcファイルに入れます。これにより、現在のディレクトリがバッファ内のファイルに変更されます。これにより、バッファの現在のディレクトリが設定され、バッファを切り替えると更新されます。

autocmd BufEnter * lcd %:p:h
3

したがって、vimには変数 'path'を使用する:findコマンドがあります。ディレクトリ「src」の下にあるすべてのソースなど、コードに一貫したディレクトリ構造がある場合は、それを「path」変数に追加するだけです。次に、:find foo.jsを実行すると、現在の場所とパス変数にリストされているフォルダーの両方が検索されます。これは基本的に、bashまたは他のシェルがPATH変数を使用して、実行する適切なバイナリを見つける方法をエミュレートします。

3
Neg_EV

あなたはおそらくvimに入ったらあなたが使うことができることを知っているでしょう

:cd lib/foo

lib/fooに変更します。

一方、現在編集しているファイルのディレクトリに移動するには、

:cd %:p:h

いつでも使えます

:pwd

現在の作業ディレクトリを確認します。

もちろん、編集しているファイルを忘れた場合は、ctrl-gを押してください。

2
Gene Goykhman

「ショートカット」の面で、:Sexコマンドを調べましたか?これにより、ファイルブラウザが分割して開き、他のファイルを簡単に開くことができます。 :Sexデフォルトは現在のバッファのディレクトリです。私がそう言うなら、かなり気の利いた機能。
簡単にアクセスできるように;oにバインドします。

map ;o :Sex <CR>

分割を作成する代わりに現在のバッファに保持する場合は、:Exを使用することもできます。

2
Jack M.

別のオプションは次のとおりです。

:e <Tab> 

これにより、作業ディレクトリ内のフォルダが循環します。

0
Eric