Bagaimana sejarah perintah diselesaikan antara beberapa instance Vim?

15

Vim menyimpan riwayat perintah ex (dapat diakses melalui :dan q:), dan riwayat itu tetap ada setelah berhenti.

Jika saya menjalankan beberapa instance Vim (pengguna yang sama, direktori home yang sama), bagaimana Vim melakukan arbitrase di antara sejarah perintah? Tampaknya proses terakhir untuk keluar menang. Apakah ada cara untuk menjaga sejarah perintah dari semua instance?

200_sukses
sumber
1
Betulkah? Sejarah ini tidak bertahan setelah berhenti untuk saya. (Vim 7.4.52, Ubuntu 14.04)
Doorknob
3
@ Doorknob Pastikan ~/.viminfomilik Anda. Kesalahan umum adalah bagi orang untuk menjalankan sudo vim ...yang, jika Anda belum menjalankan vim sebagai pengguna Anda sebelumnya, akan dibuat ~/.viminfosebagai root. Jika itu masalahnya, saya sarankan belajar menggunakan sudoeditatau sudo -emengedit file istimewa.
jamessan
@ Joessan Huh, tampaknya memang itulah masalahnya; chownkembali .minmin saya kembali ke diri saya memperbaikinya. (Tidak yakin bagaimana kepemilikannya berubah menjadi root, karena saya selalu menggunakan sudoedit, tapi oh well.)
Doorknob

Jawaban:

10

Jawaban atas pertanyaan judul Anda adalah apa yang Anda amati. Dari manual pengguna vim:help 21.3

Ketika Anda menjalankan Vim beberapa kali, yang terakhir keluar akan menyimpan informasinya. Ini dapat menyebabkan informasi yang sebelumnya keluar dari Vims disimpan menjadi hilang. Setiap item hanya dapat diingat satu kali.

Namun, nama file dari file viminfo (tempat sejarah perintah disimpan, antara lain seperti tanda global dan daftar konten, jika dikonfigurasi) dapat diubah! Ini berarti Anda dapat mengatur 'histori' yang berbeda untuk berbagai proyek atau instance vim. Dengan asumsi Anda tidak menjalankan lebih dari satu instance vim per proyek, mengelola nama file viminfo melalui vimrc (atau plugin pengaturan proyek lainnya) adalah cara yang bagus untuk menangani hal ini.

Siapkan file viminfo alternatif

Untuk manajemen tingkat proyek, kami ingin mengonfigurasi vim untuk menyimpan viminfo Anda ke file yang berbeda. Ini dapat dilakukan dalam vim yang berjalan sebelum berhenti, atau dengan vimrc Anda, misalnya Anda mungkin memiliki baris di vimrc Anda yang mendeteksi direktori tertentu sebagai bagian dari suatu proyek.

:set viminfo+=nPath/to/custom/viminfofile

Contoh memiliki vimrc secara otomatis mengatur ini berdasarkan direktori:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

Hasil di atas adalah bahwa sejarah spesifik proyek akan dimuat saat startup dan disimpan saat keluar, jika vim diluncurkan di direktori / projects / projA.

Memuat viminfo alternatif selama startup

Ini bagus untuk kasus di mana Anda ingin menyimpan riwayat Anda ke samping dan memuatnya nanti, tanpa mengelolanya di tingkat proyek.

Pertama, untuk menyimpan histori, Anda menambahkan ke opsi viminfo seperti di atas sebelum keluar. Kemudian untuk memuat histori, luncurkan vim dengan opsi -i

vim -i Path/to/custom/viminfofile

Jika Anda tidak ingin keluar dari vim untuk menyimpan file viminfo, Anda dapat menggunakan :wv( :wviminfo). Ini menyimpan file viminfo tanpa keluar vim sesuai dengan pengaturan n di atas. Dan, Anda juga dapat melakukan :wv SomeOtherFileuntuk menyimpan ke lokasi yang tidak sama dengan pengaturan di opsi viminfo. Ini mungkin lebih nyaman daripada mengatur nama file untuk digunakan saat keluar, tetapi tidak menghentikan vim dari menggunakan file default setelah keluar.

Misalnya, dalam vim pertama:

:wv ~/customInfo

dan di terminal kedua:

vim -i ~/customInfo

Atau, jika vim kedua sudah berjalan dan Anda ingin memuat viminfo:

:rv ~/customInfo

Perhatikan bahwa :wvdan :rvjangan mengubah nama file vim akan menghemat saat keluar atau nama file dibaca saat startup.

Informasi tambahan

Deskripsi set viminfo+=nSomePath: Kami menggunakan perintah set untuk menyesuaikan opsi bernama viminfo. The +=menunjukkan kita ingin menambahkan ke pilihan, tidak semuanya berubah. Kami menambahkan nopsi yang menentukan nama file untuk viminfo. Segera setelah nkami memiliki SomePathyang akan menjadi nama file yang digunakan untuk menyimpan viminfo.

Dokumentasi untuk wv( :help wv) menunjukkan bahwa perintah ini pertama-tama akan membaca file viminfo, kemudian menggabungkan antara informasi lama dan baru. Sejauh ini saya tidak memiliki informasi tentang bagaimana penggabungan berfungsi dalam kasus ini, tapi saya kira itu menyimpan tanda untuk file yang tidak dikenal dan register yang tidak diatur dalam sesi saat ini.

John O'M.
sumber