Kesalahan Vim E138: Tidak dapat menulis file viminfo $ HOME / .viminfo!

20

Saya khawatir saya mengalami sesuatu yang agak aneh. Ketika saya membuka file secara normal vim README.txt, semuanya baik-baik saja. Namun setelah itu sudo vim README.txt, file tersebut menjadi kosong, dan memberi saya E138: Can't write viminfo file $HOME/.viminfo!kesalahan saat mencoba keluar.

Saya curiga .viminfofile tersebut rusak, jadi saya menghapusnya. Masalah ini tetap ada. Adakah yang bisa membantu?

James Adam Buckland
sumber
Bisakah Anda memposting hasil saat berjalan ls .viminf*?
cuonglm
Apa izin pada file viminfo? Apa output dari ls -la .vininf*?
darnir

Jawaban:

29

Ketika Anda menjalankan sudo vimAnda mulai vim sebagai root. Itu berarti bahwa itu adalah file viminfo di / root yang menjadi masalah. Anda harus melakukannya rm /root/.viminf*.

Untuk memastikan ini, jalankan sudo vimdan jalankan perintah ini: :!echo $HOME. Ini akan menunjukkan kepada Anda bahwa direktori home Anda adalah / root.

Saya akan merekomendasikan bahwa Anda tidak menjalankan vim sebagai root, melainkan gunakan sudoedit. Ini adalah solusi yang lebih aman karena editor tidak berjalan sebagai root. Anda tidak pernah tahu apa yang mungkin dilakukan plugin. Selain itu memungkinkan Anda untuk menggunakan pengaturan dan plugin Anda sendiri di vim dan bukan yang di root vimrc. sudoeditsama dengan berlari sudo -e. sudoedit bekerja dengan membuat salinan sementara dari file yang dimiliki oleh pengguna yang memohon (Anda). Ketika Anda selesai mengedit, perubahan ditulis ke file aktual dan file sementara dihapus.

Sebagai aturan umum: Jangan menjalankan hal-hal sebagai root jika tidak perlu.

arnefm
sumber
Saya pikir Anda mungkin telah menyelamatkan saya dari banyak kekhawatiran dengan catatan, "Ini adalah solusi yang lebih aman karena editor tidak berjalan sebagai root. Anda tidak pernah tahu apa yang mungkin dilakukan plugin. " Saya percaya bahwa saya telah memikirkan semua kerentanan, tapi saya salah.
bballdave025
14

Saya mendapatkan kesalahan ini di setiap pintu keluar. Saya tidak menggunakan sudo. Secara eksplisit disebutkan direktori home user saya:

E138: Can't write viminfo file /Users/henrik/.viminfo!

Menghapus ~/.viminfotidak memperbaiki kesalahan.

Ternyata saya punya banyak file temp viminfo, dan menghapus yang memperbaiki masalah:

 ls ~/.viminf*      # If you want to see the files.
 rm -rf ~/.viminf*  # Remove them.

Temukan solusi ini di sini .

Henrik N
sumber
5

Saya menerima kesalahan yang sama ketika mencoba :wqfile pada disk yang benar-benar penuh. Jika Anda menerima pesan ini, Anda mungkin ingin memeriksa ruang disk yang tersedia.

duhaime
sumber
3

Cara yang jauh lebih bersih untuk membuat direktori home adalah dengan menggunakan kerangka yang disediakan linux untuk Anda misalnya.

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae
Rick
sumber
1
Saya khawatir pertanyaan itu tidak ada hubungannya dengan pembuatan direktori home ...
John WH Smith
Anda perlu membuat direktori home agar vim dapat menyimpan ke file .viminfo, jadi ya perintah di atas berlaku.
Rick
1
Ada banyak alasan mengapa file ini tidak ada, sebelum Anda dapat mencapai kesimpulan seperti itu. Tidak adanya direktori home mungkin akan menyebabkan lebih banyak masalah daripada hanya file yang hilang; dengan alasan ini saya bisa menjawab pertanyaan "file yang hilang" dengan "buat direktori home Anda". :)
John WH Smith
1
+1 Dalam kasus saya, kesalahan ini terjadi persis karena saya mengedit file sebagai pengguna yang tidak memiliki direktori home.
Zoltán
3

Bagi saya masalahnya adalah bahwa saya telah mengubah direktori home saya ke lokasi di dalam NFS mount. Untuk beberapa alasan, ini mengakibatkan pemilik direktori menjadi "tidak ada". Menambahkan izin menulis untuk "lain" memecahkan masalah karena saya jelas bukan pemilik file.

chmod o+w ~/.viminfo
Jon Deaton
sumber
1
Tolong jelaskan jawaban Anda. Jawaban online tidak masuk hitungan baik di SE
Romeo Ninov
2
Aneh bahwa menambahkan izin menulis lainnya membantu Anda. Mungkin Anda tidak memiliki file Anda sendiri?
Jeff Schaller
Ini bekerja untuk saya. Saya kira ".viminfo" saya dibuat oleh pengguna "root" dan jika pengguna "ubuntu" mencoba memodifikasinya, ia memerlukan izin menulis. Singkatnya, "-rw-r - r--" menjadi "-rw-r - rw-".
emeraldhieu
0

Kemungkinan besar ini terjadi karena dir home telah kehabisan ruang disk dan operasi vim baru tidak dapat menulis dalam file .viminfo.

psglinux
sumber
3
Tampaknya agak tidak masuk akal: apakah Anda memiliki bukti untuk itu?
jasonwryan
Itu satu kemungkinan, ya.
Ned64
0

Saya memiliki masalah yang sama ketika memperbarui konten Makefile. Saya membutuhkan variabel lokal dan memutuskan untuk memberi nama HOME, jadi saya masukkan baris HOME=2.154. Ini menyebabkan vim-HOMEpengaturan diganti oleh direktori yang tidak ada. Jangan gunakan HOMEvariabel untuk penggunaan lain.

pengguna191855
sumber
1
Harap dicatat bahwa itu HOMEadalah variabel lingkungan yang telah ditentukan dan mendefinisikan ulang itu biasanya bukan ide yang baik.
Barun
0

Saya pikir ini mungkin hanya berlaku untuk versi linux / vi yang cukup lama tapi yang saya temukan adalah ada file sementara di direktori home root dengan nama file /root/.viminfa.tmp ... /root/.viminfz.tmp dan bahwa ada 26 dari mereka dengan cap waktu yang mencakup beberapa tahun. Kami kehabisan huruf-huruf alfabet karena semua az diambil. Saya menghapus semua file itu dan masalahnya hilang. Tentu saja Henrik # rm -rf ~/.viminf* akan memperbaiki masalah ini dengan baik.

Stephen Edge
sumber
0

Sepertinya Anda telah membersihkan variabel lingkungan.

Melakukan hal ini:

ekspor HOME = / root

Ini harus menyelesaikan masalah Anda.

Ashfaq
sumber
0

Tidak yakin bagaimana saya menemukan skenario ini sendiri karena saya tidak ingat membuka file menggunakan sudo vimtetapi pada setiap :qfile saya mendapatkan yang serupa 'Tidak dapat menulis viminfo tidak dapat ditulisi'.

rm ~/.viminfotidak menyelesaikannya dan ~/.vim/kosong.

chmod 666 ~/.viminfomenyelesaikan pesan peringatan itu saat keluar dari file di Vim. Meskipun saya tidak yakin ini adalah solusi terbaik? Masuk akal mengapa ia menghentikan peringatan karena .viminfo adalah rw ------ sebelumnya dan saya menganggap sedang ditulis dengan sejarah perintah vim.

David Tahvildaran
sumber
0

Saya skenario saya, itu adalah tidak adanya /root/.viminfofile sama sekali. Setelah saya menyentuh file, kesalahan berhenti dan file diperbarui saat keluar vim. PS: Ini adalah windriver embedded linux.

Naveen Gara
sumber