2012-02-14 41 views
10

kể từ khi chia và tải mỗi cửa sổ mỗi khi được kinda khó chịu, tôi đã lưu phiên của tôi sử dụng:nổi bật cú pháp không hoạt động sau khi khôi phục lại một phiên vim trước

mksession ~/session1.vim 

và phục hồi nó bằng cách sử:

vim -S session1.vim 

hoặc

source session1.vim 

nó khôi phục lại phiên trước một cách hoàn hảo, nhưng không hiển thị bất kỳ cú pháp nào x làm nổi bật.

Tôi đã tìm thấy câu hỏi tương tự tại đây: No syntax highlighting after session restore in terminal nhưng không giúp ích gì nhiều.

có ai có ý tưởng gì không?

+0

Cần nhiều dữ liệu hơn: Những loại tập tin bạn đang tải lại? Làm nổi bật làm việc cho bất kỳ loại tập tin ở tất cả? Vimrc của bạn có bất kỳ lệnh liên quan đến cú pháp nào không? vv –

+0

chúng là các tệp C++ và môi trường của tôi là Ubuntu. Tôi đang thực sự sử dụng cùng một cấu hình (cùng vimrc, vv) cho máy Debian của tôi, nhưng điều kỳ lạ là nó không chỉ hoạt động trong máy Ubuntu của tôi. – devEvan

Trả lời

17

Tôi gặp vấn đề tương tự; nếu tôi đã lưu các phiên mà không có 'tùy chọn' trong phiên họp, khi tôi tải lại Vim, các bộ đệm đã được tải lại, nhưng không làm nổi bật cú pháp.

Giải pháp là sử dụng một autocmd có lồng nhau khi tải lại.

Wikia có một bài viết rộng rãi about loading and saving sessions. Tùy chọn 'lồng nhau' được đề cập ở dưới cùng.

tôi sử dụng một phiên bản sửa đổi của this StackOverflow answer, ở đây nó là:

fu! SaveSess() 
    execute 'mksession! ' . getcwd() . '/.session.vim' 
endfunction 

fu! RestoreSess() 
    if filereadable(getcwd() . '/.session.vim') 
    execute 'so ' . getcwd() . '/.session.vim' 
    if bufexists(1) 
     for l in range(1, bufnr('$')) 
     if bufwinnr(l) == -1 
      exec 'sbuffer ' . l 
     endif 
     endfor 
    endif 
    endif 
endfunction 

autocmd VimLeave * call SaveSess() 
autocmd VimEnter * nested call RestoreSess() 

set sessionoptions-=options " Don't save options 
+1

Vì vậy, không hoàn toàn chắc chắn tại sao câu trả lời này không có hơn 1k upvotes rồi. Công việc tuyệt vời. –

+0

rực rỡ! Vì vậy, qa tự động lưu phiên làm việc và vim trên thư mục đó sẽ tự động khôi phục nó! Chỉ có một "lỗi". Khi tôi 'qa' và sau đó tôi' vim' một tập tin cụ thể (s), nó messes lên các tập tin (s) tôi muốn vim với phiên. Sẽ tốt hơn nếu nó chỉ phục hồi phiên khi không có tệp nào được chỉ định! – Paschalis

+1

Để thực hiện việc trên, hãy đảm bảo rằng bạn lồng thân của 'RestoreSess' với điều này: ' if argc() == 0' .... 'endif' – Paschalis

Các vấn đề liên quan