2009-11-10 26 views
36

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

例:Viにfile.jsfile2.js

cd /src 
vi lib/foo/file.js 

のlib/fooのは、2つのファイルを持っている

:e file2.js # doesn't work 

答えて

27

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

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

ファイルを開く前に、最初にそのディレクトリに 'cd'を実行しないでください。ファイルが開かれた後に他のディレクトリにアクセスするという点でも等しく制限されていますか?以下の@hgmnzソリューションははるかにエレガントでフレキシブルです – trim

9

あなたvimrc設定

に次の行を追加します。

%現在のファイル名
:pはフルパス
に展開:Hヘッド(除去最後のパスコンポーネント)

は詳細について:help expandを参照してください。

+0

それは素晴らしい、ありがとうございます。今この '%:p:h'が意味することを学ぶために: – cloudhead

+1

このサイトは、vim-stuffを検索する際に私を助けてくれます:http://rayninfo.co。uk/vimtips.html – flokra

+0

追加情報ありがとうございます。 – cloudhead

12

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

:e %:p:h/file2.js 
+0

これは、最も一般的な解決法を用いた最短の答えです。現在のパスのショートカットとして '%:p:h /'について学習すると、 ':r'、':w'のような現在のパスが必要な他の状況にも適用できます。 – eMBee

1

別のオプションは、実行することです:作業ディレクトリ内のフォルダ経由

:e <Tab> 

このサイクル。

+0

これは私の作業ディレクトリは私が編集しているファイルではないので、うまくいきません。 – cloudhead

2

あなたは、おそらくあなたはvimの中にいると、あなたはLIB/fooのに変更する

:cd lib/foo 

を使用することができることを知っています。

一方、現在編集しているファイルのディレクトリに変更するために、あなたは常にあなたの現在の作業ディレクトリを確認するために

:pwd 

を使用することができます

:cd %:p:h 

を試してみてください。

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

2

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

map ;o :Sex <CR> 

+0

素晴らしい。私はファイルが他のペインで開くことを望む! – cloudhead

+0

ああ、それは ':Ex'です。私は分裂に恋しているので、私はそう思う。私はその答えを編集します。 –

+0

hehe no私が分かったのは、分割を維持することですが、ファイルを開くと、ファイルリストではなく、別のペインでファイルが開きます。 – cloudhead

3

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

autocmd BufEnter * lcd %:p:h 
+0

rcsはあなたにそれを打つ! – cloudhead

3

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

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>は、このバッファに開きます

35

は、私は私の.vimrcで以下の3行を持っています。 ,t,sは同じですが、新しいタブ/分割ウィンドウで行います。

+4

これはここに掲載されたソリューションの中で私のお気に入りです。私は現在のファイルのディレクトリに自動的に変更する考え方が嫌いです。私はプロジェクトのルートディレクトリでvimを開く方が好きです。つまり、 ':e'は常に上からドリルダウンします。これまでのところ、現在のファイルと同じディレクトリにあるファイルを開く場合は、 ':E'を使用してnetrwファイルエクスプローラを表示します。 '、e'マッピングを使用する方がはるかに早く感じます。現在のディレクトリ内のファイルをタブで表示する方法は素晴らしいです。 – nelstrom

+0

あなたに同意します。また、ディレクトリを変更する必要がなければ、常に ':cd%:h'があります。 – hgmnz

+0

その解決に感謝します!それは驚くほど効果的です! – Eric

24

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

set autochdir 

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

注:この機能を追加したバージョンはわかりません。これを動作させるにはvim 6から7.2に更新しました。

+0

何らかの理由でこれは私のためには動作しません。 '7.2.108' – cloudhead

+0

これは、Vimがnetbeans統合またはSun visual workshopとの統合で構築された場合にのみ利用できます。前者は後者よりも一般的ですが、どちらも内蔵していないことは珍しいことではありません。これは、gregfの回答が働く 'autochdir'オプションの存在をテストする理由です。 – jamessan

+0

autochdirはファイルをロードしようとする前にディレクトリを切り替えるので痛みです。コマンドラインで 'gvim path/to/file.c'を実行するとpath/toにcdしてパス/ to/file.cを使用して、存在しない場所に空のバッファを与えます。 :(Windowsの64ビット7.2、とにかく) –

5

autochdirの解決方法には独自の落とし穴があります。たとえば、タグは相対パスで定義されているか、現在のディレクトリにMakefileまたはpom.xmlが必要なため、dirにいる必要があります。

あなたは

:e <C-R>% 

を使用して、現在のファイルの名前を削除することによって、パスを変更して、新しいものを入力することができます。 または はあなたの現在のファイルがある、そのオープンディレクトリのコマンドを受信すると、次のことができ

nnoremap <leader>e :edit <C-R>=fnamemodify(@%, ':p:h')<CR>/ 

そして \ Eまたはを押すことによって、電子は、(リーダーの設定に依存)マップを使用して、このコマンドを手動で完了し、現在のファイルディレクトリからすべてのファイルを表示するにはctrlDを使用できます。

または。 0scanプラグインを試すことができます。

キー F

+0

タグは「再帰的に」見つけることができます。 set tag = _tags/tags; c:/ work'は、 '_tags/tags'と一致するものが見つかるまで上がりますが、' c:/ work'を押すと停止します。/work/project/main/_tags/tags –

36

:のための例は短い:探検あなたは尋ねまさにありません。

+3

これは実際のソリューションでは最も単純な答えと思われます。 – klokop

+0

これで新しいファイルが作成されますか? –

+1

Exの時は%を押してください。新しいファイルのために。 @JacobSharf – Alan