2010-11-19 20 views
22

NERDtreeパネルがあり、Vimセッション(mksession [filename])を保存した後、セッション(vim -S filename)を開くと、パネルが開き、 "NERDtree"ポピュレートされていません。コマンドラインから ":NERDtree"を実行しようとすると、ウィンドウは表示されますが、別のパネルが開きます。セッション復旧時にVim、NERDtreeが復旧しない

この奇妙な動作はありますか? (右augroup NERDTree行の後)NERDTreeのオートコマンド・グループへの自動コマンドを追加

答えて

1

おそらくNERD_tree.vimにパッチを適用されたセッションで期待通りNERDTreeを作用させるための最も簡単な方法は、:

exec "autocmd BufEnter ". s:NERDTreeBufName ."* call <SID>initNerdTreeInPlace(\"\")" 

それは徹底的にテストされていませんしかし、これはいくつかのレイアウトとNERDTreeウィンドウの異なる数で私のために働くようです。

編集:実際には、NERDTreeにプライマリとセカンダリのウィンドウがあり、セッションファイルにNERDTreeバッファがあるかどうかの表示がないため、実際にはこれはあまり効果がありません。プラグインにこれ​​を確実にサポートすることはそれほど大きなチャレンジではないようですが、それは簡単なことです。一方、単純な場合のために、(代わりに上記1の)は、次の自動コマンドを追加すると、あなたがやりたいことがあります

exec "autocmd BufEnter ". s:NERDTreeBufName ."* :NERDTreeToggle | :NERDTreeToggle" 
+0

現在NERDtree 5.0では動作しません... –

6

私は同じ問題を抱えていたし、私の研究の間、私は2つの解決策が見つかりました:

を「session.vim」というプラグインを使用することができます。このプラグインには、NERDTreeを復元するための基本的なサポートがあります。あなたはここにそれを見つけることができます:http://www.vim.org/scripts/script.php?script_id=3150

このプラグインは私のためではないことがわかりましたので、私は別のアプローチを取った。 バッファのディレクトリを作業ディレクトリと同じに設定するようにvimを設定することができます。

autocmd BufEnter * lcd %:p:h 

初めてNERDTreeを開くと作業ディレクトリが開きますので、すでにどこにいても構いません!

のファイルを開き、この場合はセッションを開いた後にNERDTreeを開くだけです。

しかし、マジックは1つのタブで初めてしか動作しないので、次のコマンドを使用して、NERDTreeにがツリー内のファイルを見つけるようにすることができます。

map <leader>r :NERDTreeFind<cr> 

「p」コマンドを使用して「C」と入力するだけで、いくつかのディレクトリにツリーを表示することができます。

私は、コマンドを見つけたこの記事では、みんなのおかげ:

https://superuser.com/questions/195022/vim-how-to-synchronize-nerdtree-with-current-opened-tab-file-path

+0

1の場合:真実が何であるかの基本的なsupport'を持って ' "session.vim"、!さらに、session.vimには、自動保存ストアの最後のセッションオプションがあります。正確に私が望むもの... –

19

は、ただ非常に自分自身を発行これに対処することにしました。私は私のvimrcに以下でVimを終了したときに私の場合は、セッションが作成されます。

autocmd VimLeave * mksession! [filename]

Vimがで開かれたとき、私はまた、自動的にNERDTreeをオープンしようとしていた。

autocmd VimEnter * NERDTree

その結果、私のセッションは元の投稿のようにNERDTreeの2つのインスタンスで開かれました。私の解決策は、セッションを保存する前にNERDTreeを閉じるだけでした。そのようにして、私の自動オープンコールはNERDTreeの1つのインスタンスを開きます。

私の解決策は、

" Save session on quitting Vim 
autocmd VimLeave * NERDTreeClose 
autocmd VimLeave * mksession! [filename] 

" Restore session on starting Vim 
autocmd VimEnter * call MySessionRestoreFunction() 
autocmd VimEnter * NERDTree 

それは今のところ私にとって魅力のように働いています。お役に立てれば。

+1

シンプルでクリアです。 btw、ここでセッション復元コードを使用しました:http://stackoverflow.com/questions/5142099/auto-save-vim-session-on-quit-and-auto-reload-session-on-start/6052704#6052704 –

+0

'NERDTreeClose'の代わりに、私は[vim-nerdtree-tabs](https://github.com/jistr/vim-nerdtree-tabs)で使われている' NERDTreeTabsClose'というタブを使うのが好きです。この組み合わせは、複数のタブセッションでも完璧に動作します。 – Egel

4

セッションプラグインでNERDTressセッションを修正するには、セッションプラグインに埋め込まれた新しいセッションコマンド "SaveSession"と "OpenSession"を "mksession"と "source"の代わりに使用する必要があります。セッションプラグインの作者のコメントによると

: Vimの:mksessionコマンドが生成されたコンテンツを持つバッファを作成するプラグインと本当に互換性がなく、このためsession.vimのようにプラグインのための具体的な回避策が含まれています • BufExplorer、ProjectおよびNERDツリーウィンドウがサポートされています。 •shell.vimがインストールされている場合Vimのフルスクリーン状態は維持されます。 •netrwおよびtaglist.vimプラグインは、そのまま使用できるセッションをサポートします。

NERDTreeセッションの問題を克服するために新しいコマンドを使用する必要があるのはなぜでしょうか。

詳細については、http://peterodding.com/code/vim/session/を参照してください。

2

Vimpanelを使用することもできますし、他の機能の中でもセッションサポートが組み込まれています。

0

stevelove者に基づいて別の解決策:

fun! Mksession(name) 
    let need_tree = g:NERDTree.IsOpen() 
    NERDTreeClose 
    execute "mksession! " . a:name 
    if need_tree 
     call writefile(readfile(a:name)+['NERDTree'], a:name) 
     NERDTree 
    endif 
endfun 

command! -nargs=1 Mksession call Mksession(<f-args>) 
関連する問題