Error Vim E138: ไม่สามารถเขียนไฟล์ viminfo $ HOME / .viminfo!


20

ฉันเกรงว่าฉันจะเจอสิ่งที่ค่อนข้างแปลก เมื่อฉันเปิดไฟล์ตามปกติvim README.txtทุกอย่างเรียบร้อยดี แต่เมื่อsudo vim README.txtไฟล์แสดงผลว่างเปล่าและทำให้ฉันมีE138: Can't write viminfo file $HOME/.viminfo!ข้อผิดพลาดเมื่อพยายามที่จะออก

ฉันสงสัยว่า.viminfoไฟล์เสียหายดังนั้นฉันจึงลบมัน ปัญหานี้ยังคงอยู่ ใครช่วยได้บ้าง


คุณสามารถโพสต์ผลเมื่อทำงานls .viminf*หรือไม่
cuonglm

สิทธิ์ของไฟล์ viminfo คืออะไร? อะไรคือผลลัพธ์ของls -la .vininf*?
darnir

คำตอบ:


29

เมื่อคุณรันsudo vimคุณจะเริ่มเป็นกลุ่ม นั่นหมายความว่ามันเป็นไฟล์ viminfo ใน / root ที่เป็นปัญหา rm /root/.viminf*คุณควรจะทำ

เพื่อให้แน่ใจว่านี้เรียกใช้และดำเนินการคำสั่งนี้:sudo vim :!echo $HOMEนี่จะแสดงว่าโฮมไดเร็กตอรี่ของคุณเป็น / รูท.

ผมจะแนะนำให้คุณไม่ได้ทำงานเป็นกลุ่มเป็นหลัก sudoeditแต่การใช้งาน นี่เป็นโซลูชันที่ปลอดภัยยิ่งขึ้นเนื่องจากโปรแกรมแก้ไขไม่ทำงานในฐานะรูท คุณไม่มีทางรู้ว่าปลั๊กอินอาจทำอะไร นอกจากนี้ยังอนุญาตให้คุณใช้การตั้งค่าและปลั๊กอินของคุณเองใน vim และไม่ใช่ที่อยู่ใน root vimrc เป็นเช่นเดียวกับการทำงานsudoedit sudo -esudoedit ทำงานได้โดยการทำสำเนาชั่วคราวของไฟล์ที่เป็นของผู้ใช้ที่เรียกใช้ (คุณ) เมื่อคุณแก้ไขเสร็จแล้วการเปลี่ยนแปลงจะถูกเขียนไปยังไฟล์จริงและไฟล์ชั่วคราวจะถูกลบ

ตามกฎทั่วไปของหัวแม่มือ: อย่าเรียกใช้สิ่งต่าง ๆ เช่นรูทหากไม่จำเป็น


ฉันคิดว่าคุณอาจช่วยให้ฉันรอดพ้นจากความกังวลด้วยบันทึกย่อ "นี่เป็นวิธีแก้ปัญหาที่ปลอดภัยยิ่งขึ้นเนื่องจากโปรแกรมแก้ไขไม่ทำงานเหมือนรูทคุณไม่เคยรู้เลยว่าปลั๊กอินอาจทำอะไร " ฉันเชื่อว่าฉันคิดถึงทุกสิ่ง ช่องโหว่ แต่ฉันผิด
bballdave025

14

ฉันได้รับข้อผิดพลาดนี้ทุกครั้งที่ออก sudoผมไม่ได้ใช้ มันพูดถึงไดเรกทอรีบ้านผู้ใช้ของฉันอย่างชัดเจน:

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

การลบ~/.viminfoไม่ได้แก้ไขข้อผิดพลาด

กลับกลายเป็นว่าฉันมีไฟล์ temp viminfo มากมายและการลบไฟล์เหล่านั้นก็แก้ไขปัญหาได้:

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

พบวิธีแก้ปัญหานี้ที่นี่


5

ฉันได้รับข้อผิดพลาดเดียวกันเมื่อพยายาม:wqไฟล์ในดิสก์ที่เต็มโดยสมบูรณ์ หากคุณได้รับข้อความนี้คุณอาจต้องการตรวจสอบพื้นที่ว่างในดิสก์ของคุณ


3

วิธีที่ชัดเจนกว่านี้ในการสร้างโฮมไดเร็กตอรี่คือใช้โครงกระดูกที่ linux จัดเตรียมไว้ให้คุณ.

sudo cp -a /etc/skel /home/usernmae && sudo chown -R usernmae:usernmae /home/usernmae

1
ฉันกลัวคำถามที่มีน้อยมากจะทำอย่างไรกับการสร้างไดเรกทอรีบ้าน ...
จอห์นสมิ ธ WH

คุณต้องสร้างโฮมไดเร็กตอรี่เพื่อให้ vim สามารถบันทึกลงในไฟล์. viminfo ได้ดังนั้นใช่จะใช้คำสั่งด้านบน
Rick

1
มีเหตุผลมากมายที่ไฟล์นี้จะไม่มีอยู่ก่อนที่คุณจะสามารถสรุปได้ การไม่มีโฮมไดเร็กตอรี่อาจทำให้เกิดปัญหามากกว่าไฟล์ที่หายไป; ด้วยเหตุนี้ฉันจึงสามารถตอบคำถาม "ไฟล์ที่หายไป" ได้ด้วย "สร้างไดเรกทอรีบ้านของคุณ" :)
จอห์น WH Smith

1
+1 ในกรณีของฉันข้อผิดพลาดนี้เกิดขึ้นเพราะฉันแก้ไขไฟล์ในฐานะผู้ใช้ที่ไม่มีโฮมไดเร็กตอรี่
Zoltán

3

สำหรับฉันปัญหาคือฉันได้เปลี่ยนไดเรกทอรีบ้านของฉันไปยังตำแหน่งภายในเมาท์ NFS ด้วยเหตุผลบางอย่างสิ่งนี้ส่งผลให้เจ้าของไดเรกทอรีเป็น "ไม่มีใคร" การเพิ่มสิทธิ์การเขียนสำหรับ "อื่น ๆ " ช่วยแก้ปัญหาเนื่องจากฉันไม่ได้เป็นเจ้าของไฟล์อย่างชัดเจน

chmod o+w ~/.viminfo

1
คุณช่วยอธิบายคำตอบของคุณให้กระจ่างขึ้นได้ไหม คำตอบออนไลน์ไม่นับว่าดีใน SE
Romeo Ninov

2
แปลกที่เพิ่มสิทธิ์การเขียนอื่น ๆช่วยให้คุณ บางทีคุณไม่ได้เป็นเจ้าของไฟล์ของคุณเอง?
Jeff Schaller

มันใช้งานได้สำหรับฉัน ฉันเดา ".viminfo" ของฉันถูกสร้างขึ้นโดยผู้ใช้ "root" และหากผู้ใช้ "ubuntu" พยายามแก้ไขมันเขาต้องได้รับอนุญาตให้เขียน โดยสรุป "-rw-r - r--" จะกลายเป็น "-rw-r - rw-"
emeraldhieu

0

เป็นไปได้มากว่าสิ่งนี้จะเกิดขึ้นเนื่องจาก home dir พื้นที่ดิสก์หมดและการดำเนินการ vim ใหม่ไม่สามารถเขียนในไฟล์. viminfo


3
ดูเหมือนจะเป็นเรื่องเล็กน้อย: คุณมีหลักฐานอะไรบ้างไหม?
jasonwryan

นั่นเป็นความเป็นไปได้อย่างหนึ่งใช่
Ned64

0

ฉันมีปัญหาเดียวกันเมื่ออัปเดตเนื้อหาของ Makefile ผมจำเป็นต้องมีตัวแปรท้องถิ่นและตัดสินใจที่จะตั้งชื่อเพื่อให้ผมเข้าเส้นHOME HOME=2.154สิ่งนี้ทำให้การvim-HOMEตั้งค่าถูกแทนที่โดยไดเรกทอรีที่ไม่มีอยู่ อย่าใช้HOMEตัวแปรเพื่อการใช้งานอื่น


1
โปรดทราบว่าHOMEเป็นตัวแปรสภาพแวดล้อมที่กำหนดไว้ล่วงหน้าและการกำหนดอีกครั้งโดยปกติจะไม่ใช่ความคิดที่ดี
บารัน

0

ฉันคิดว่าสิ่งนี้อาจใช้ได้กับ linux / vi เวอร์ชั่นเก่า แต่สิ่งที่ฉันพบคือมีไฟล์ชั่วคราวในโฮมไดเร็กทอรีของรูทที่มีชื่อไฟล์ /root/.viminfa.tmp ... /root/.viminfz.tmp และ มี 26 คนที่มีการประทับเวลาครอบคลุมเป็นเวลาหลายปี เราหมดตัวอักษรของตัวอักษรเนื่องจาก az ทั้งหมดถูกพรากไป ฉันลบไฟล์เหล่านั้นทั้งหมดและปัญหาหายไป แน่นอนว่า Henrik # rm -rf ~/.viminf* จะแก้ไขปัญหานี้ได้ด้วยดี


0

ดูเหมือนว่าคุณได้ล้างตัวแปรสภาพแวดล้อมแล้ว

ทำเช่นนี้:

ส่งออก HOME = / root

สิ่งนี้จะแก้ไขปัญหาของคุณ


0

ไม่แน่ใจว่าฉันเจอสถานการณ์นี้ด้วยตัวเองได้อย่างไรเนื่องจากฉันจำไม่ได้ว่าเปิดไฟล์ใด ๆ โดยใช้sudo vimแต่ในแต่ละ:qไฟล์ฉันได้รับข้อความคล้ายกันว่า 'ไม่สามารถเขียน viminfo ไม่สามารถเขียนได้'

rm ~/.viminfoไม่ได้แก้ไขและ~/.vim/ว่างเปล่า

chmod 666 ~/.viminfoแก้ไขข้อความเตือนเมื่อออกจากไฟล์ใน Vim แม้ว่าฉันจะไม่แน่ใจว่านี่เป็นทางออกที่ดีที่สุด? มันสมเหตุสมผลแล้วว่าทำไมมันจึงหยุดการเตือนตั้งแต่. viminfo เป็น rw ------ ก่อนหน้านี้และฉันคิดว่าจะถูกเขียนด้วยประวัติคำสั่ง vim


0

ฉันสถานการณ์ของฉันมันเป็น/root/.viminfoไฟล์ที่ไม่มีทั้งหมด หลังจากที่ฉันแตะไฟล์นั้นข้อผิดพลาดก็หยุดลงและไฟล์นั้นก็ถูกอัพเดตเมื่อออกจากกลุ่ม PS: นี่คือลินุกซ์ในตัวของ windriver

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.