2010-11-19 39 views
22

Khi tôi có bảng điều khiển NERDtree và tôi lưu phiên Vim (mksession [filename]), sau đó mở phiên (vim -S filename), bảng điều khiển được mở và gắn thẻ "NERDtree" nhưng không có dân cư. Nếu tôi thử ": NERDtree" từ dòng lệnh, cửa sổ sẽ được điền, nhưng một bảng điều khiển khác sẽ mở ra.Vim, NERDtree không phục hồi trong phiên khôi phục

Bất kỳ ý tưởng nào có hành vi lạ lùng này?

Trả lời

1

Cách dễ nhất để thực hiện hành động NERDTree như mong đợi với phiên có lẽ để vá NERD_tree.vim, thêm một autocommand vào nhóm NERDTree autocommand (ngay sau khi dòng augroup NERDTree):

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

Nó không thử nghiệm rộng rãi , nhưng điều này dường như làm việc cho tôi với một số bố trí và với số lượng khác nhau của cửa sổ NERDTree mở.

Chỉnh sửa: Trên thực tế, tính năng này không hoạt động tuyệt vời vì NERDTree có cửa sổ chính và phụ và không có chỉ báo trong tệp phiên cho dù bộ đệm NERDTree là bộ đệm hay cái kia. Dường như việc thêm hỗ trợ đáng tin cậy cho plugin này sẽ không phải là một thách thức lớn, nhưng nó còn hơn cả tầm thường. Trong khi đó, đối với trường hợp đơn giản, thêm autocommand sau (thay vì một ở trên) có thể làm những gì bạn muốn:

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

không làm việc với NERDtree hiện tại 5,0 ... –

6

tôi đã cùng một vấn đề và trong quá trình nghiên cứu của tôi tôi tìm thấy hai giải pháp:

Bạn có thể sử dụng một plugin được gọi là "session.vim", có hỗ trợ cơ bản để khôi phục NERDTree. Bạn có thể tìm thấy ở đây: http://www.vim.org/scripts/script.php?script_id=3150

Tôi phát hiện ra rằng bản thân plugin này không dành cho tôi, vì vậy tôi đã tiếp cận một phương pháp khác. Bạn có thể cấu hình vim để tự động thiết lập thư mục bộ đệm của bạn bằng thư mục làm việc của bạn.

autocmd BufEnter * lcd %:p:h 

Vì NERDTree mở thư mục hoạt động khi bạn mở thư mục lần đầu tiên, bạn đã ở nơi bạn muốn!

Chỉ cần mở NERDTree sau bạn đã mở tệp của mình hoặc phiên của bạn trong trường hợp này.

Tuy nhiên, vì phép thuật sẽ chỉ hoạt động lần đầu tiên trong một tab, bạn có thể sử dụng lệnh sau để cho NERDTree tìm thấy tệp của bạn trong cây.

map <leader>r :NERDTreeFind<cr> 

Để làm lộn xộn cây, bạn chỉ cần đi lên một vài giám đốc khi bạn muốn sử dụng lệnh "p" rồi nhập "C".

tôi phát hiện ra các lệnh nhờ vào những kẻ trong bài viết này:

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

+0

1 Mục đích: ' "session.vim", trong đó có một support' cơ bản những gì là sự thật! Và bên cạnh session.vim có tùy chọn phiên cuối cùng. Chính xác những gì tôi muốn ... –

19

Chỉ cần quyết định để đối phó với điều này rất phát hành bản thân mình.Trong trường hợp của tôi, phiên giao dịch được tạo ra khi tôi bỏ Vim những điều sau đây vimrc của tôi:

autocmd VimLeave * mksession! [filename]

Tôi cũng đã cố gắng để mở NERDTree tự động khi Vim mở với:

autocmd VimEnter * NERDTree

Kết quả là phiên của tôi đã mở với hai phiên bản của NERDTree, như được mô tả trong bài đăng gốc. Giải pháp của tôi là chỉ cần đóng NERDTree trước khi lưu phiên, theo cách đó, cuộc gọi tự động mở của tôi sẽ chỉ mở một phiên bản của NERDTree.

Giải pháp của tôi

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

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

Nó làm việc như một say mê đối với tôi cho đến nay. Hi vọng điêu nay co ich.

+1

đơn giản và rõ ràng. btw, tôi đã sử dụng mã khôi phục phiên tại đây: http://stackoverflow.com/questions/5142099/auto-save-vim-session-on-quit-and-auto-reload-session-on-start/6052704#6052704 –

+0

Thay vì 'NERDTreeClose', tôi thích sử dụng các tab' NERDTreeTabsClose' được sử dụng bởi [vim-nerdtree-tabs] (https://github.com/jistr/vim-nerdtree-tabs). Sự kết hợp này cũng hoạt động hoàn hảo cho nhiều phiên tab. – Egel

4

Để khắc phục phiên NERDTress với plugin phiên, lệnh phiên mới được nhúng trong plugin phiên: "SaveSession" và "OpenSession" nên được sử dụng, thay vì "mksession" và "source".

Theo nhận xét của tác giả plugin phiên: Vim: lệnh mksession không thực sự tương thích với trình cắm tạo bộ đệm có nội dung được tạo và do phiên này.vim bao gồm cách giải quyết cụ thể cho các trình cắm như vậy: • Cửa sổ cây BufExplorer, Project và NERD được hỗ trợ; • Khi shell.vim được cài đặt, trạng thái toàn màn hình của Vim vẫn được duy trì; • Các plug-in netrw và taglist.vim hỗ trợ các phiên trong hộp.

Có lẽ đó là lý do tại sao chúng tôi nên sử dụng các lệnh mới để khắc phục sự cố phiên NERDTree.

Để biết thêm chi tiết, vui lòng tham khảo http://peterodding.com/code/vim/session/.

2

Hoặc bạn có thể sử dụng Vimpanel, nó có hỗ trợ phiên được tích hợp sẵn trong số các tính năng khác.

0

Một giải pháp dựa trên stevelove của:

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>) 
Các vấn đề liên quan