NERDtree パネルがあり、Vim セッション (mksession [ファイル名]) を保存してからセッション (vim -S ファイル名) を開くと、パネルが開き、「NERDtree」というタグが付けられますが、データが取り込まれません。コマンドラインから ":NERDtree" を実行すると、ウィンドウは表示されますが、別のパネルが開きます。
この奇妙な動作に関するアイデアはありますか?
この問題を自分で処理することにしました。私の場合、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
これまでのところ、私にとって魅力のように機能しています。お役に立てれば。
私は同じ問題を抱えていましたが、調査中に2つの解決策を見つけました。
NERDTree の復元を基本的にサポートする「session.vim」というプラグインを使用できます。ここで見つけることができます: 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」と入力します。
この投稿の人たちのおかげでコマンドを見つけました:
セッションプラグインを使用してNERDTressセッションを修正するには、セッションプラグインに埋め込まれた新しいセッションコマンド「mksession」と「source」の代わりに「SaveSession」と「OpenSession」を使用する必要があります。
セッションプラグインの作成者のコメントによると、Vimの:mksessionコマンドは、生成されたコンテンツでバッファーを作成するプラグインとは実際には互換性がありません。このsession.vimには、このようなプラグインの特定の回避策が含まれています。•BufExplorer、Project、NERDツリーウィンドウがサポートされています。•shell.vimがインストールされると、Vimのフルスクリーン状態が維持されます。•netrwおよびtaglist.vimプラグインは、すぐに使用できるセッションをサポートします。
たぶんそれが、NERDTreeセッションの問題を克服するために新しいコマンドを使用する必要がある理由です。
詳細については、http://peterodding.com/code/vim/session/を参照してください。
または、 Vimpanelを使用することもできます。これには、他の機能の中でもセッションサポートが組み込まれています。
セッションで NERDTree を期待どおりに動作させる最も簡単な方法は、おそらく NERD_tree.vim にパッチを適用し、自動コマンドを NERDTree 自動コマンド グループ (augroup NERDTree
行の直後) に追加することです。
exec "autocmd BufEnter ". s:NERDTreeBufName ."* call <SID>initNerdTreeInPlace(\"\")"
広範囲にテストされているわけではありませんが、これはいくつかのレイアウトとさまざまな数の NERDTree ウィンドウが開いている場合に機能するようです。
編集: 実際には、NERDTree にはプライマリ ウィンドウとセカンダリ ウィンドウがあり、セッション ファイルには NERDTree バッファがどちらであるかが示されていないため、これはうまく機能しません。これに対する信頼できるサポートをプラグインに追加することはそれほど大きな課題ではないように見えますが、それは些細なことではありません。それまでの間、単純なケースでは、(上記の代わりに) 次の自動コマンドを追加すると、必要なことが実行される場合があります。
exec "autocmd BufEnter ". s:NERDTreeBufName ."* :NERDTreeToggle | :NERDTreeToggle"