विम में मेरे कार्य के आधार पर मेरे पास कई टैब खुले हैं।
मैं बाद के उपयोग के लिए विभिन्न सत्रों को कैसे बचा सकता हूं?
विम में मेरे कार्य के आधार पर मेरे पास कई टैब खुले हैं।
मैं बाद के उपयोग के लिए विभिन्न सत्रों को कैसे बचा सकता हूं?
जवाबों:
आप जैसा कुछ चाहते हैं
:mksession ~/mysession.vim
फिर बाद में आप उस विम फ़ाइल को स्रोत बना सकते हैं और आपके पास अपना पुराना सत्र वापस आ जाएगा:
:source ~/mysession.vim
या -S विकल्प के साथ खुला विम:
$ vim -S ~/mysession.vim
Session.vim
। इसलिए यदि आप केवल अपनी वर्तमान निर्देशिका में केवल एक सत्र बचाना चाहते हैं, तो आप अपने वर्तमान सत्र को बचाने के लिए :mksession
या :mks
विम का उपयोग कर सकते हैं , और बस vim -S
इसे वापस खोलने के लिए।
आप इन सत्र विकल्पों को अपने vimrc में सेट करना चाह सकते हैं। विशेष रूप से विकल्प तब कष्टप्रद होता है जब आपने सत्र बचाने के बाद अपना vimrc बदल दिया हो।
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
ध्यान दें: mksession आपके द्वारा की गई किसी भी फाइल में परिवर्तन को नहीं बचाएगा। मैंने सत्र को बचाने के बाद समापन की यह गलती कर दी कि मैं वहां से उठूंगा। लेकिन अगली बार जब मैंने सत्र खोला, तो मैंने फाइलों में जो बदलाव किए थे, वे चले गए थे।
:mksession
।
:wqa
:xa
एक कम कीस्ट्रोक। वाह!
.vimrc
: vimrc au FocusLost * silent! wa
यह किसी भी समय बफ़र को फोकस खो देता है ऑटो को बचाएगा।
यदि आप अपनी फ़ाइल एक्सप्लोरर / डैश के रूप में NERDTree का उपयोग करते हैं, तो मैं अंतर्निहित कमांड के बजाय xolox / vim-session प्लगइन की सिफारिश करूंगा । किसी कारण के लिए: NERDTree बफ़र्स को पुनर्स्थापित करने के लिए mksession विफल रहता है। आपका माइलेज अलग हो सकता है, लेकिन मुझे लगा कि मैं अपना अनुभव साझा करूंगा।
let g:nerdtree_tabs_open_on_gui_startup=0
और let g:nerdtree_tabs_open_on_new_tab=0
xolox / vim-session काम करने के लिए।
यदि आप किसी भी प्लगइन्स का उपयोग किए बिना प्रक्रिया को स्वचालित करना चाहते हैं, तो आप दूर जा सकते हैं और विम टिप्स विकी से वापस आ सकते हैं ।
हर बार जब आप विम से बाहर निकलते हैं, तो यह चालू सत्र को बचा लेगा ~/.vim/sessions
और विम खुलने के बाद इसे फिर से लोड करेगा। यह आपके वर्तमान पथ पर भी आधारित है, इसलिए यदि आप विभिन्न निर्देशिकाओं से विम खोलते हैं, तो आपके पास अलग-अलग सत्र होंगे, जो विभिन्न परियोजनाओं पर काम करते समय काफी उपयोगी है।
बस अपनी ~/.vimrc
फ़ाइल संपादित करें और निम्नलिखित जोड़ें:
function! MakeSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()
यहां तक कि एक शुरुआत के लिए इस स्क्रिप्ट को समझना और अनुकूलित करना कुछ आसान है।
कृपया ध्यान दें कि यह स्क्रिप्ट केवल यूनिक्स सिस्टम (MacOS / Linux) के लिए ठीक से काम करेगी, इसे विंडोज पर काम करने के लिए अनुकूलित करने की आवश्यकता है।
अद्यतन: जोड़ा जा रहा है 0xc0de के सुझाव, आप की जगह ले सकती VimEnter
आप लोड सत्र के लिए विम चाहते हैं, तो इन लोगों के लिए लाइन ही अगर कोई तर्क प्रदान की जाती हैं :
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
) पर निर्भर करता है, मैं इसे कैसे बाहर निकलने से पहले अंतिम कार्य निर्देशिका सेट कर सकता हूं? ताकि यह सत्र के बजाय पिछले कार्य सत्र को लोड कर सके ~/
?
इस कार्य के लिए एक बहुत ही उपयोगी प्लगइन है vim-startify जो हाल ही में खोली गई फ़ाइलों आदि जैसी कई अन्य चीजों को संभालता है, इसमें बहुत आसान इंटरफ़ेस भी है।
मैं कुछ दिनों से और अब तक इसका पूरी तरह से काम कर रहा हूं। आशा है कि यह आपकी मदद करता है।
चूँकि यह मेरे (और शायद अन्य) के लिए Google पर पहली हिट है, क्योंकि विम में सत्रों के साथ कैसे काम करना है, मैंने इसे स्वचालित बनाने के लिए @ मैथिलियो के जवाब में थोड़ा जोड़ने का फैसला किया है।
मुझे उसका कोड पसंद है, लेकिन "केवल अगर बिना आर्ग्स के" समाधान के अलावा कुछ कमी लग रही थी। यह मेरा संशोधित संस्करण है:
function! MakeSession(overwrite)
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
if a:overwrite == 0 && !empty(glob(b:filename))
return
endif
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
if(argc() == 0)
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession(1)
else
au VimLeave * :call MakeSession(0)
endif
यहां उल्लेखनीय परिवर्तन वैकल्पिक ओवरराइड है। यदि आप विकल्पों के बिना विम खोलते हैं, तो यह किसी भी मौजूदा सत्र को खोलेगा और आपके छोड़ने पर किए गए बदलावों को अधिलेखित कर देगा। यदि विम विकल्पों के साथ खोला जाता है, तो यह केवल एक नया सत्र बनाएगा यदि कोई भी मौजूद नहीं है, इसका मतलब है कि आप एक निर्देशिका में एकल फ़ाइलों को खोल सकते हैं जिसमें एक सत्र बिना अधिलेखित किया गया है। फिर आप सत्र को चलाने के लिए विकल्प के बिना विम को खोल सकते हैं। यदि कोई सत्र मौजूद नहीं है, तो यह एक नया बनाता है।
$HOME/.vim/plugin/sessions.vim
लेकिन यह सत्र फ़ाइलों को सहेज नहीं रहा है। ¯ \ _ (ツ) _ / ¯
इस अद्भुत प्लगइन कॉल विम-सत्र है । यह बहुत शक्तिशाली है। इसे स्थापित करने के लिए:
cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git
मैंने अपनी .vimrc
फ़ाइल में इसकी कार्यक्षमता को इस तरह मैप किया है :
nnoremap <leader>so :OpenSession
nnoremap <leader>ss :SaveSession
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>
अब सामान्य मोड में बस टाइप करें <leader>ss
और आपको इस तरह का कमांड दिखाई देगा
:SaveSession
अब अपने सत्र का नाम जोड़ें
:SaveSession namesession
और बस यही।
जब आप विम को बंद कर देते हैं और इसे फिर से खोल देते हैं
:OpenSession
और आपको अपना सत्र खुला दिखाई देगा।
आपकी .vimrc
फ़ाइल में जोड़ने के लिए कई अन्य कॉन्फ़िगरेशन हैं उदाहरण के लिए दस्तावेज़ देखें:
let g:session_directory = "~/.vim/tmp/session" // the directory must be created before the sessions will be saved there
let g:session_autoload = "no" // automatic reload sessions
let g:session_autosave = "no" // autosave
let g:session_command_aliases = 1
YouTube पर एक अच्छा ट्यूटोरियल है।
व्यक्तिगत रूप से मैं सिर्फ टिम पोप के जुनून प्लगइन पर लपेटता हूं ताकि एक को परिभाषित करने sessiondir
और मार्ग टाइप करने से बचा जा सके:
let g:sessiondir = $HOME . ".vim/sessions"
command! -nargs=1 MkSession call MkSession(<f-args>)
function! MkSession(sessionfile)
if !isdirectory(g:sessiondir)
call mkdir(g:sessiondir, "p")
endif
exe 'Obsession' g:sessiondir . '/' . a:sessionfile
endfunction
command! -nargs=1 LoadSession call LoadSession(<f-args>)
function! LoadSession(sessionfile)
let a:sessionpath = g:sessiondir . a:sessionfile
if (filereadable(a:sessionpath))
exe 'source ' a:sessionpath
else
echo "No session loaded."
endif
endfunction
धन्यवाद @mathielo @mathielo से उदाहरण के बाद, मैंने सक्रिय सत्र (यदि कोई हो) को बचाने के लिए .vimrc से नीचे की पंक्ति जोड़ी।
au VimLeave * if this_session != "" | exe "mksession! ".this_session
यदि आप अधिक लाइनें लगाना चाहते हैं, तो आपको एंडिफ का उपयोग करने की आवश्यकता है:
au VimLeave * if v:this_session != ""
au VimLeave * exe "mksession! ".this_session
au VimLeave * endif
आपको केवल एक नया सत्र सहेजना होगा
:mks [Session filename]
और इसके बाद शुरू करें
$ vim -S [Session filename]
vim सत्र शुरू होगा और आपको हर बार सत्र को बंद करने के लिए सत्र को बचाने के लिए चिंता करने की आवश्यकता नहीं है।
यदि आपके पास एक सक्रिय सत्र नहीं है तो .vimrc कुछ भी नहीं करेगा। पहले जैसा।
यही तो मैं ढूंढ रहा था! धन्यवाद फिर से @mathielo!
:q
है :bd
... धन्यवाद!
यदि आप परियोजना के लिए केवल 1 सत्र होने की योजना बनाते हैं
:mks
जो Session.vim
वर्तमान निर्देशिका में एक फ़ाइल बनाएगा , और फिर सत्र (उसी निर्देशिका से) खोलने के लिए:
vim -S
यदि आप सत्र बदलते हैं और इसे बचाना चाहते हैं:
:mks!
यह सत्र बचाता है, न कि फाइलें खुद!
यदि आप कई सत्रों की योजना बनाते हैं , तो मैं उन्हें परियोजना की निर्देशिका में छिपी हुई फाइलों में सहेजना पसंद करता हूं:
:mks .session-name.vim
इसे खोलने के लिए (उसी निर्देशिका से):
vim -S .session-name.vim
सत्र को बचाए:
:mks! .session-name.vim
चूंकि सत्र छिपी हुई फ़ाइलों में सहेजे जाते हैं, उन्हें देखने के लिए मत भूलना -a
ls -a
नीचे केवल एक ही अंतर है। वास्तव में मेरे लिए काम किया। मैं इसे यहाँ से ले गया , जहाँ आप अधिक पूर्ण / जटिल संस्करण भी ले सकते हैं।
set viewoptions+=cursor,folds,slash,unix
set viewoptions-=options
augroup vimrc
autocmd BufWritePost *
\ if expand('%') != '' && &buftype !~ 'nofile'
\| mkview
\| endif
autocmd BufRead *
\ if expand('%') != '' && &buftype !~ 'nofile'
\| silent loadview
\| endif
augroup END
कई सत्रों (प्रति निर्देशिका / रेपो आधार पर) के प्रबंधन के लिए, मैंने हाल ही में विम-सत्र प्लगइन से विम-वर्कस्पेस पर स्विच किया है । इसका सत्र प्रबंधन अपेक्षाकृत सरल है और अच्छी तरह से काम करता है।
man
पेज