當我有一個NERDtree面板並保存Vim會話(mksession [文件名]),然後打開會話(vim -S文件名),打開面板並標記爲「NERDtree」但沒有填充。如果我從命令行嘗試「:NERDtree」,窗口會填充,但現在打開另一個面板。Vim,NERDtree在會話還原中沒有恢復
對這種奇怪的行爲有何想法?
當我有一個NERDtree面板並保存Vim會話(mksession [文件名]),然後打開會話(vim -S文件名),打開面板並標記爲「NERDtree」但沒有填充。如果我從命令行嘗試「:NERDtree」,窗口會填充,但現在打開另一個面板。Vim,NERDtree在會話還原中沒有恢復
對這種奇怪的行爲有何想法?
使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"
我有同樣的問題,我的研究過程中我發現了兩個解決方案:
您可以使用名爲「session.vim」的插件,它具有恢復NERDTree的基本支持。你可以在這裏找到它:http://www.vim.org/scripts/script.php?script_id=3150
我發現自己這個插件不適合我,所以我採取了另一種方法。 你可以配置vim來自動設置緩衝區的目錄等於你的工作目錄。
autocmd BufEnter * lcd %:p:h
由於NERDTree在第一次打開工作目錄時會打開工作目錄,因此您已經是您想要成爲的地方了!
只需在之後打開NERDTree 即可在此情況下打開文件或會話。
但是,由於魔術只能在一個選項卡內第一次工作,因此您可以使用以下命令讓樹中的NERDTree 找到文件。
map <leader>r :NERDTreeFind<cr>
要使用「p」命令,然後輸入「C」,就可以按照您的意願上移幾個導向器。
我發現了命令,這要歸功於這個職位的人:
+1:' 「session.vim」,其中有一個基本的support'什麼是真的!除了session.vim還有一個autorestore last session選項。正是我想要的... – 2012-01-03 03:09:39
剛剛決定處理這一非常問題我自己。就我而言,當我退出Vim在我的vimrc下面是創建的會話:
autocmd VimLeave * mksession! [filename]
我還試圖打開NERDTree時自動Vim的打開與:
autocmd VimEnter * NERDTree
結果是我的會話以兩個NERDTree實例打開,就像原始文章中所述。我的解決方案是在保存會話之前簡單地關閉NERDTree,這樣我的自動打開的呼叫只會打開NERDTree的一個實例。
我的解決方案
" Save session on quitting Vim
autocmd VimLeave * NERDTreeClose
autocmd VimLeave * mksession! [filename]
" Restore session on starting Vim
autocmd VimEnter * call MySessionRestoreFunction()
autocmd VimEnter * NERDTree
它的工作就像一個魅力對我來說至今。希望這可以幫助。
簡單明瞭。順便說一句,我在這裏使用會話恢復代碼:http://stackoverflow.com/questions/5142099/auto-save-vim-session-on-quit-and-auto-reload-session-on-start/6052704#6052704 – 2013-06-05 02:28:53
我更喜歡使用由[vim-nerdtree-tabs](https://github.com/jistr/vim-nerdtree-tabs)使用的標籤'NERDTreeTabsClose',而不是'NERDTreeClose'。這種組合對於多個標籤會話也可以完美地工作。 – Egel 2015-10-13 13:31:15
要使用會話插件修復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/。
或者您可以使用Vimpanel,它具有內置的會話支持以及其他功能。
基於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>)
不符合當前NERDtree 5.0工作... – 2016-03-26 19:39:21