Tergantung pada tugas saya di Vim saya memiliki beberapa tab terbuka.
Bagaimana saya bisa menyimpan sesi yang berbeda untuk digunakan nanti?
Tergantung pada tugas saya di Vim saya memiliki beberapa tab terbuka.
Bagaimana saya bisa menyimpan sesi yang berbeda untuk digunakan nanti?
Jawaban:
Anda menginginkan sesuatu seperti
:mksession ~/mysession.vim
Kemudian nanti Anda dapat sumber file vim itu dan Anda akan memiliki sesi lama Anda kembali:
:source ~/mysession.vim
atau buka vim dengan opsi -S:
$ vim -S ~/mysession.vim
Session.vim
. Jadi jika Anda hanya ingin menyimpan satu sesi di direktori Anda saat ini, Anda dapat menggunakan :mksession
atau :mks
dari vim untuk menyimpan sesi Anda saat ini, dan hanya vim -S
untuk membukanya kembali.
Anda mungkin ingin mengatur opsi sesi ini di vimrc Anda. Khususnya opsi menjengkelkan ketika Anda telah mengubah vimrc Anda setelah Anda menyimpan sesi.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
Perhatikan bahwa: mksession tidak akan menyimpan perubahan ke file apa pun yang Anda buat. Saya membuat kesalahan dengan menutup vim setelah menyimpan sesi dengan asumsi saya akan mengambil dari sana. Tapi lain kali saya membuka sesi, perubahan yang saya buat pada file-file itu hilang.
:mksession
.
:wqa
:xa
Satu penekanan tombol kurang. Yay!
.vimrc
: Anda vimrc au FocusLost * silent! wa
ini akan secara otomatis menghemat kapan saja buffer kehilangan fokus.
Jika Anda menggunakan NERDTree sebagai file explorer / dash Anda, saya akan merekomendasikan plugin xolox / vim-session alih-alih perintah built-in: mksession. Untuk beberapa alasan,: mksession gagal mengembalikan buffer NERDTree. Jarak tempuh Anda mungkin berbeda, tetapi saya pikir saya akan membagikan pengalaman saya.
let g:nerdtree_tabs_open_on_gui_startup=0
dan let g:nerdtree_tabs_open_on_new_tab=0
untuk membuat sesi xolox / vim berfungsi.
Jika Anda ingin mengotomatiskan proses tanpa menggunakan plugin apa pun, Anda dapat menggunakan Go away dan kembali dari Vim Tips Wiki .
Setiap kali Anda keluar dari Vim itu akan menyimpan sesi saat ini di bawah ~/.vim/sessions
dan memuatnya kembali setelah Vim dibuka. Ini juga berdasarkan jalur Anda saat ini, jadi jika Anda membuka Vim dari direktori yang berbeda, Anda akan memiliki sesi yang berbeda, yang cukup berguna ketika mengerjakan proyek yang berbeda.
Cukup edit ~/.vimrc
file Anda dan tambahkan berikut ini:
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()
Bahkan untuk seorang pemula, skrip ini agak mudah dipahami dan disesuaikan.
Harap dicatat skrip ini hanya akan berfungsi dengan baik untuk sistem Unix (MacOS / Linux), itu perlu disesuaikan untuk bekerja pada Windows.
UPDATE: Menambahkan saran 0xc0de , Anda dapat mengganti VimEnter
baris untuk yang ini jika Anda ingin Vim memuat sesi hanya jika tidak ada argumen yang diberikan :
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
if argc() == 0 au VimEnter * nested :call LoadSession() end
pwd
) bagaimana saya bisa mengaturnya menjadi direktori kerja terakhir sebelum keluar dari vim? sehingga bisa memuat sesi kerja terakhir daripada sesi di bawah ~/
?
Ada plugin yang sangat berguna untuk tugas ini vim-startify yang menangani banyak hal lain seperti file yang baru dibuka dll, ia juga memiliki antarmuka yang sangat mudah.
Saya menggunakannya sejak beberapa hari dan sampai sekarang ini berfungsi dengan baik. Semoga ini bisa membantu Anda.
Karena ini adalah hit pertama di Google untuk saya (dan mungkin yang lain) untuk cara bekerja dengan sesi di Vim, saya memutuskan untuk menambahkan sedikit pada jawaban @ mathielo tentang cara membuat ini otomatis.
Saya suka kode nya, tetapi penambahan solusi "hanya jika tanpa arg" tampaknya agak kurang. Ini adalah versi saya yang dimodifikasi:
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
Perubahan penting di sini adalah penggantian opsional. Jika Anda membuka Vim tanpa opsi, itu akan membuka sesi yang ada dan menimpa perubahan yang dibuat saat Anda pergi. Jika Vim dibuka dengan opsi, itu hanya akan membuat sesi baru jika tidak ada, ini berarti Anda dapat membuka file tunggal dalam direktori yang memiliki sesi tanpa menimpanya. Maka Anda dapat membuka Vim tanpa opsi untuk menjalankan sesi sebagai gantinya. Jika tidak ada sesi, maka sesi akan dibuat yang baru.
$HOME/.vim/plugin/sessions.vim
tetapi tidak menyimpan file sesi. ¯ \ _ (ツ) _ / ¯
Ada vim-sesi panggilan plugin yang luar biasa ini . Ini sangat kuat. Untuk menginstalnya:
cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git
Saya telah memetakan fungsinya dalam .vimrc
file saya seperti ini:
nnoremap <leader>so :OpenSession
nnoremap <leader>ss :SaveSession
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>
Sekarang dalam mode normal ketik saja <leader>ss
dan Anda akan melihat perintah seperti ini
:SaveSession
Sekarang tambahkan nama sesi Anda
:SaveSession namesession
dan itu saja.
Ketika Anda menutup Vim dan membukanya kembali lakukan saja
:OpenSession
dan Anda akan melihat sesi Anda terbuka.
Ada banyak konfigurasi lain untuk ditambahkan dalam .vimrc
file Anda lihat dokumentasi sebagai contoh:
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
Ada tutorial yang bagus di YouTube.
Secara pribadi saya hanya membungkus plugin Obsesi Tim Pope untuk memungkinkan mendefinisikan sessiondir
dan menghindari mengetik jalan:
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
Terima kasih @mathielo Mengikuti contoh dari @mathielo, saya menambahkan baris di bawah ini ke .vimrc untuk menyimpan sesi aktif (jika ada):
au VimLeave * if this_session != "" | exe "mksession! ".this_session
Jika Anda ingin meletakkan lebih banyak baris, Anda perlu menggunakan endif:
au VimLeave * if v:this_session != ""
au VimLeave * exe "mksession! ".this_session
au VimLeave * endif
Anda hanya perlu menyimpan sesi baru di vim with
:mks [Session filename]
dan setelah mulai dengan
$ vim -S [Session filename]
vim akan memulai sesi dan Anda tidak perlu khawatir untuk menyimpan sesi setiap kali Anda menutup vim.
Jika Anda tidak memiliki sesi aktif .vimrc tidak akan melakukan apa pun. Seperti sebelumnya.
Itu yang saya cari! Terima kasih lagi @mathielo!
:q
alih - alih :bd
... Terima kasih!
Jika Anda berencana hanya memiliki 1 sesi untuk proyek, lakukan saja
:mks
yang akan membuat Session.vim
file di direktori saat ini, dan kemudian membuka sesi (dari direktori yang sama):
vim -S
Jika Anda mengubah sesi dan ingin menyimpannya:
:mks!
Ini menyimpan sesi, bukan file itu sendiri!
Jika Anda berencana memiliki beberapa sesi , saya lebih suka menyimpannya dalam file tersembunyi di direktori proyek:
:mks .session-name.vim
Untuk membukanya (dari direktori yang sama):
vim -S .session-name.vim
Simpan sesi:
:mks! .session-name.vim
Karena sesi disimpan dalam file tersembunyi, untuk melihatnya jangan lupa -a
ls -a
Anda dapat menyimpan sesi di mana pun Anda inginkan.
Ex:
:mksession! D:/session.ses
Ini menyimpan sesi dalam drive D.
Ini bisa dibuka dengan mengetik
:so D:/session.ses
di salah satu file vim.
Di bawah ini adalah satu-satunya conf. itu benar-benar bekerja untuk saya. Saya mengambilnya dari sini , di mana Anda juga dapat mengambil versi yang lebih lengkap / kompleks.
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
Untuk mengelola beberapa sesi (berdasarkan per direktori / repo), saya baru saja beralih dari plugin vim-session ke vim-workspace . Manajemen sesinya relatif sederhana dan bekerja dengan cukup baik.
man
halaman