Vim'deki görevime bağlı olarak açık birkaç sekmem var.
Farklı oturumları daha sonra kullanmak üzere nasıl kaydedebilirim?
Vim'deki görevime bağlı olarak açık birkaç sekmem var.
Farklı oturumları daha sonra kullanmak üzere nasıl kaydedebilirim?
Yanıtlar:
Gibi bir şey istiyorsun
:mksession ~/mysession.vim
Sonra daha sonra o vim dosyasını kaynak ve eski oturum geri olacak:
:source ~/mysession.vim
veya vS'yi -S seçeneğiyle açın:
$ vim -S ~/mysession.vim
Session.vim
. Bu nedenle, geçerli dizininizde yalnızca bir oturumun kaydedilmesini istiyorsanız, geçerli oturumunuzu kaydetmek ve sadece açmak için vim'den :mksession
veya :mks
vim'den kullanabilirsiniz vim -S
.
Bu oturum seçeneklerini vimrc'nizde ayarlamak isteyebilirsiniz. Oturumu kaydettikten sonra vimrc'nizi değiştirdiğinizde özellikle seçenekler can sıkıcıdır.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
Unutmayın: mksession, yaptığınız hiçbir dosyadaki değişiklikleri kaydetmeyecektir. Oturumu kaydettikten sonra oradan alacağım varsayılarak vim kapama hatasını yaptım. Ancak oturumu bir sonraki açışımda dosyalarda yaptığım değişiklikler kaybolmuştu.
:mksession
.
:wqa
:xa
bir tane daha az tuşa basmak. Yaşasın!
.vimrc
: vimrc au FocusLost * silent! wa
Bu, arabellek odağı her kaybettiğinde otomatik olarak kaydedilecektir.
Eğer kullanırsanız NERDTree dosya gezgini / çizgi olarak, ben tavsiye ederim eklentisi Xolox / vim-oturumu mksession komutu: yerine Yerleşik. Nedense: mksession NERDTree arabelleklerini geri yükleyemiyor. Kilometreniz değişebilir, ancak deneyimlerimi paylaşacağımı düşündüm.
let g:nerdtree_tabs_open_on_gui_startup=0
ve let g:nerdtree_tabs_open_on_new_tab=0
xolox / vim-session çalışmasını sağlamak için.
Eğer herhangi bir eklenti kullanmadan işlemini otomatikleştirmek istiyorsanız şunu kullanabilirsiniz uzağa git ve geri dönme gelen Vim İpuçları Wiki .
Vim'den her çıktığınızda mevcut oturumu kaydeder ~/.vim/sessions
ve Vim açıldıktan sonra tekrar yükler. Aynı zamanda mevcut yolunuza da dayanmaktadır, bu yüzden Vim'i farklı dizinlerden açarsanız farklı oturumlar görürsünüz, bu da farklı projelerde çalışırken oldukça kullanışlıdır.
Sadece ~/.vimrc
dosyanızı düzenleyin ve aşağıdakileri ekleyin:
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()
Yeni başlayanlar için bile bu komut dosyasını anlamak ve özelleştirmek biraz kolaydır.
Bu komut dosyasının yalnızca Unix sistemleri (MacOS / Linux) için düzgün çalışacağını, Windows üzerinde çalışacak şekilde uyarlanması gerektiğini lütfen unutmayın .
GÜNCELLEME: 0xc0de'nin önerisini ekleyerek , VimEnter
Vim'in oturumu yalnızca bağımsız değişken sağlanmadıysa yüklemesini istiyorsanız, bu satırların satırını değiştirebilirsiniz :
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
) bağlı olması, çıkış vim'den önceki son çalışma dizini olarak nasıl ayarlayabilirim? böylece altındaki oturum yerine son çalışma oturumunu yükleyebilir ~/
?
Yakın zamanda açılan dosyalar vb.Gibi birçok şeyi işleyen bu görev vim-startify için çok yararlı bir eklenti var, çok kolay bir arayüze sahip.
Birkaç günden beri kullanıyorum ve şimdiye kadar mükemmel çalışıyor. Umarım size yardımcı olur.
Bu, Google'da benim için (ve muhtemelen diğerlerinde) Vim'deki oturumlarla nasıl çalışılacağı için ilk hit olduğundan, @ mathielo'nun bu otomatikleştirmenin nasıl yapılacağıyla ilgili cevabına biraz eklemeye karar verdim.
Ben onun kodu gibi, ama "sadece args olmadan" çözüm eklenmesi biraz eksik gibi görünüyordu. Bu benim değiştirilmiş sürümüm:
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
Buradaki önemli değişiklik isteğe bağlı geçersiz kılmadır. Vim'i seçenekler olmadan açarsanız, mevcut oturumlar açılır ve ayrıldığınızda yapılan değişikliklerin üzerine yazılır. Vim seçeneklerle açılırsa, yalnızca hiçbir oturum yoksa yeni bir oturum oluşturur; bu, oturumu olan bir dizinde üzerine yazmadan tek dosyaları açabileceğiniz anlamına gelir. Ardından Vim'i oturumu çalıştırma seçenekleri olmadan açabilirsiniz. Bir oturum yoksa, yeni bir oturum oluşturur.
$HOME/.vim/plugin/sessions.vim
ancak oturum dosyalarını kaydetmiyor . ¯ \ _ (ツ) _ / ¯
Bu harika eklenti vim-session çağrısı var . Çok güçlü. Yüklemek için:
cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git
Dosyamdaki işlevselliğini şu şekilde eşledim .vimrc
:
nnoremap <leader>so :OpenSession
nnoremap <leader>ss :SaveSession
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>
Şimdi normal modda sadece yazın <leader>ss
ve böyle bir komut göreceksiniz
:SaveSession
Şimdi oturumunuzun adını ekleyin
:SaveSession namesession
ve hepsi bu.
Vim'i kapatıp yeniden açtığınızda
:OpenSession
ve oturumunuzun açık olduğunu göreceksiniz.
.vimrc
Dosyanıza eklenecek çok sayıda başka yapılandırma var, örnekler için belgelere bakın:
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'da iyi bir öğretici var.
Şahsen ben tanımlamak ve yol yazmaktan kaçınmak için Tim Pope ' Obsession eklentisi üzerine sarın 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
Thanks @mathielo @mathielo örneğini takip ederek, aktif oturumu (varsa) kaydetmek için aşağıdaki satırı .vimrc'ye ekledim:
au VimLeave * if this_session != "" | exe "mksession! ".this_session
Daha fazla satır koymak istiyorsanız endif kullanmanız gerekir:
au VimLeave * if v:this_session != ""
au VimLeave * exe "mksession! ".this_session
au VimLeave * endif
İle sadece yeni bir oturum kaydetmeniz gerekir
:mks [Session filename]
ve başladıktan sonra
$ vim -S [Session filename]
vim oturumu başlatır ve vim'i her kapatışınızda oturumu kaydetmek için endişelenmenize gerek yoktur.
Etkin bir oturumunuz yoksa .vimrc hiçbir şey yapmaz. Eskisi gibi.
Aradığım şey buydu! Tekrar teşekkürler mathielo!
:q
yerine seansımı kaç kez kaybettiğimi hatırlayamıyorum :bd
... Teşekkürler!
Eğer proje için sadece 1 seans almayı planlıyorsanız,
:mks
Session.vim
geçerli dizinde bir dosya oluşturur ve oturumu açmak için (aynı dizinden):
vim -S
Oturumu değiştirir ve kaydetmek isterseniz:
:mks!
Bu, oturumu kaydeder, dosyaların kendisi değil!
Birden çok oturuma sahip olmayı planlıyorsanız , bunları projenin dizinindeki gizli dosyalara kaydetmeyi tercih ederim:
:mks .session-name.vim
Açmak için (aynı dizinden):
vim -S .session-name.vim
Oturumu kaydet:
:mks! .session-name.vim
Oturumlar gizli dosyalara kaydedildiği için görüntülemek için unutma -a
ls -a
Oturumu istediğiniz yere kaydedebilirsiniz.
Ör:
:mksession! D:/session.ses
Bu, oturumu D sürücüsünde depolar.
Bu yazı yazarak açılabilir
:so D:/session.ses
vim dosyalarından herhangi birinde.
Aşağıda tek konf. bu gerçekten benim için çalıştı. Buradan aldım , burada daha eksiksiz / karmaşık bir versiyon da alabilirsiniz.
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
Birden çok oturumu yönetmek için (dizin / repo temelinde) son zamanlarda vim-session eklentisinden vim-workspace'e geçtim . Oturum yönetimi nispeten basittir ve oldukça iyi çalışır.
man
sayfa