@ldigas Saya pikir ppl merasa lebih nyaman menemukan pertanyaan di sini (dengan font besar, format hebat ...) daripada di forum sekolah tua atau dokumentasi terminal, atau, astaga, manhalaman
puk
6
@ldigas Saya pribadi selalu takut pergi oleh halaman buku b / c mereka tidak cukup bodoh. Sama seperti yang lainnya di linux, ia memiliki kurva belajar yang curam.
puk
45
@Idigas - Saya pikir Anda kehilangan titik bahwa antara kecerdasan kolektif kita, google, dan manajemen metaknowledge stack overflow - ini hanyalah cara yang lebih baik untuk mendapatkan jawaban Anda - apa yang Anda butuhkan, bukan daftar panjang opsi esoterik, juga seperti halaman ini menggambarkan pengalaman jebakan dunia nyata, dan sering kali benar-benar jalan pintas untuk membuat hidup Anda lebih mudah. Ini berlaku sama untuk hampir semua manual yang pernah saya lihat (kecuali mungkin manual php online). Viva stackoverflow!
ErichBSchulz
2
@ldigas dan orang-orang dapat menggunakannya untuk referensi di masa mendatang, karena orang lain mungkin membutuhkannya.
Mansuro
4
@ Idigas Saya pikir pertanyaan-pertanyaan ini nyata dalam arti, bahwa seorang pemula vim tidak tahu banyak tentang sistem bantuan dan bagaimana menggunakannya, tetapi jika mereka semakin berpengalaman mereka akan tahu bagaimana menemukan jalan mereka dalam vim.
Edgar Klerks
Jawaban:
494
Anda menginginkan sesuatu seperti
:mksession ~/mysession.vim
Kemudian nanti Anda dapat sumber file vim itu dan Anda akan memiliki sesi lama Anda kembali:
Pendek adalah: jadi ~ / file. Jika Anda ingin sumber file saat ini sederhana: jadi% akan melakukan pekerjaan untuk Anda.
Daniel Baulig
14
Jika Anda tidak menentukan nama file sesi, itu akan menjadi default untuk menulis dan membaca dari Session.vim. Jadi jika Anda hanya ingin menyimpan satu sesi di direktori Anda saat ini, Anda dapat menggunakan :mksessionatau :mksdari vim untuk menyimpan sesi Anda saat ini, dan hanya vim -Suntuk membukanya kembali.
anishpatel
59
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
Bagus! Saya memiliki masalah ini kemarin. Terima kasih banyak!
Jogusa
40
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.
Ini harus disertai dengan jawaban yang terkait dengan :mksession.
Morgan Wilde
1
ya Anda mungkin ingin mengikuti dengan:wqa
JonnyRaa
11
atau hanya :xaSatu penekanan tombol kurang. Yay!
robin
Anda juga dapat mengatur vim untuk secara otomatis menyimpan file (jika Anda suka hal semacam itu) di .vimrc: Anda vimrc au FocusLost * silent! wa ini akan secara otomatis menghemat kapan saja buffer kehilangan fokus.
grego
32
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.
Untuk macvim, saya perlu memastikan: let g:nerdtree_tabs_open_on_gui_startup=0dan let g:nerdtree_tabs_open_on_new_tab=0untuk membuat sesi xolox / vim berfungsi.
Nianliang
18
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/sessionsdan 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 ~/.vimrcfile 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 VimEnterbaris 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
Anda mungkin ingin membuka sesi hanya jika tidak ada argumen untuk vim misalnya. if argc() == 0 au VimEnter * nested :call LoadSession() end
0xc0de
Terima kasih @ 0xc0de, saran bagus (Saya bahkan mulai menggunakannya sendiri). Saya telah memperbarui jawabannya.
mathielo
bagaimana saya memodifikasi ini sehingga jika saya membuka vim dengan argumen itu juga tidak menyimpan sesi itu
Dr Manhattan
sangat bagus, tetapi `exe 'sumber' b: sessionfile` perlu sebuah titik di sana? dan masalahnya adalah bahwa sesi autoload tergantung pada direktori home saat ini (dapatkan pwd) bagaimana saya bisa mengaturnya menjadi direktori kerja terakhir sebelum keluar dari vim? sehingga bisa memuat sesi kerja terakhir daripada sesi di bawah ~/?
van abel
Jika Anda ingin dapat memiliki sesi tetapi masih membuka file tunggal di direktori tanpa menimpanya, periksa versi saya yang dimodifikasi ini di jawaban terpisah: stackoverflow.com/questions/1642611/…
PMunch
6
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.
Saya baru saja mencoba solusi Anda yang diposting di atas di Neovim 0.2.2 dan menempatkan cuplikan Anda $HOME/.vim/plugin/sessions.vimtetapi tidak menyimpan file sesi. ¯ \ _ (ツ) _ / ¯
ipatch
Utas ini, dan khususnya komentar yang ditautkan, dapat membantu: superuser.com/questions/404686/... Saya memilikinya di .vimrc saya dan itu berfungsi dengan baik.
PMunch
berhasil, rupanya saya harus keluar (n) vim agar sesi dapat ditulis masukkan lelucon buruk Terima kasih lagi untuk berbagi 👍
ipatch
3
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 .vimrcfile saya seperti ini:
Sekarang dalam mode normal ketik saja <leader>ssdan 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 .vimrcfile 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
saya punya masalah khusus dengan plugin dan sesi Maskapai. Beralih ke menggunakan Obsesi memperbaiki masalah, itu adalah penemuan yang luar biasa setelah berminggu-minggu berjuang. Lihat github.com/vim-airline/vim-airline/issues/…
icc97
1
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.
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
halamanJawaban:
Anda menginginkan sesuatu seperti
Kemudian nanti Anda dapat sumber file vim itu dan Anda akan memiliki sesi lama Anda kembali:
atau buka vim dengan opsi -S:
sumber
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 hanyavim -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.
sumber
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.
sumber
:mksession
.:wqa
:xa
Satu penekanan tombol kurang. Yay!.vimrc
: Andavimrc 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.
sumber
let g:nerdtree_tabs_open_on_gui_startup=0
danlet 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: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 :sumber
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.
sumber
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:
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.
sumber
$HOME/.vim/plugin/sessions.vim
tetapi tidak menyimpan file sesi. ¯ \ _ (ツ) _ / ¯Ada vim-sesi panggilan plugin yang luar biasa ini . Ini sangat kuat. Untuk menginstalnya:
Saya telah memetakan fungsinya dalam
.vimrc
file saya seperti ini:Sekarang dalam mode normal ketik saja
<leader>ss
dan Anda akan melihat perintah seperti iniSekarang tambahkan nama sesi Anda
dan itu saja.
Ketika Anda menutup Vim dan membukanya kembali lakukan saja
dan Anda akan melihat sesi Anda terbuka.
Ada banyak konfigurasi lain untuk ditambahkan dalam
.vimrc
file Anda lihat dokumentasi sebagai contoh:Ada tutorial yang bagus di YouTube.
sumber
Secara pribadi saya hanya membungkus plugin Obsesi Tim Pope untuk memungkinkan mendefinisikan
sessiondir
dan menghindari mengetik jalan:sumber
Terima kasih @mathielo Mengikuti contoh dari @mathielo, saya menambahkan baris di bawah ini ke .vimrc untuk menyimpan sesi aktif (jika ada):
Jika Anda ingin meletakkan lebih banyak baris, Anda perlu menggunakan endif:
Anda hanya perlu menyimpan sesi baru di vim with
dan setelah mulai dengan
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!
sumber
:q
alih - alih:bd
... Terima kasih!Jika Anda berencana hanya memiliki 1 sesi untuk proyek, lakukan saja
yang akan membuat
Session.vim
file di direktori saat ini, dan kemudian membuka sesi (dari direktori yang sama):Jika Anda mengubah sesi dan ingin menyimpannya:
Jika Anda berencana memiliki beberapa sesi , saya lebih suka menyimpannya dalam file tersembunyi di direktori proyek:
Untuk membukanya (dari direktori yang sama):
Simpan sesi:
Karena sesi disimpan dalam file tersembunyi, untuk melihatnya jangan lupa
-a
sumber
Anda dapat menyimpan sesi di mana pun Anda inginkan.
Ex:
Ini menyimpan sesi dalam drive D.
Ini bisa dibuka dengan mengetik
di salah satu file vim.
sumber
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.
sumber
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.
sumber