Lỗi Vim E138: Không thể ghi tệp viminfo $ HOME / .viminfo!


20

Tôi sợ rằng tôi gặp phải điều gì đó kỳ lạ. Khi tôi mở một tập tin bình thường vim README.txt, mọi thứ đều ổn. Nhưng khi đó sudo vim README.txt, tập tin hiển thị trống và E138: Can't write viminfo file $HOME/.viminfo!báo lỗi khi tôi cố thoát.

Tôi nghi ngờ .viminfotập tin bị hỏng, vì vậy tôi đã xóa nó. Vấn đề này vẫn còn. Có ai giúp được không?


Bạn có thể gửi kết quả khi chạy ls .viminf*?
cuonglm

Các quyền trên tập tin viminfo là gì? Đầu ra của là ls -la .vininf*gì?
darnir

Câu trả lời:


29

Khi bạn chạy sudo vimbạn bắt đầu vim là root. Điều đó có nghĩa là tập tin viminfo trong / root là vấn đề. Bạn nên làmrm /root/.viminf* .

Để chắc chắn về điều này, hãy chạy sudo vimvà thực hiện lệnh này::!echo $HOME . Điều này sẽ cho bạn thấy rằng thư mục chính của bạn là / root.

Tôi khuyên bạn không nên chạy vim với quyền root mà nên sử dụng sudoedit. Đây là một giải pháp an toàn hơn vì trình soạn thảo không chạy bằng root. Bạn không bao giờ biết những gì một plugin có thể làm. Ngoài ra, nó cho phép bạn sử dụng các cài đặt và plugin của riêng bạn trong vim chứ không phải các cài đặt trong root vimrc. sudoeditcũng giống như chạy sudo -e. sudoedit hoạt động bằng cách tạo một bản sao tạm thời của tệp thuộc sở hữu của người dùng gọi (bạn). Khi bạn hoàn thành chỉnh sửa, các thay đổi được ghi vào tệp thực tế và tệp tạm thời sẽ bị xóa.

Theo nguyên tắc chung: Đừng chạy mọi thứ như root nếu không cần thiết.


Tôi nghĩ rằng bạn có thể đã cứu tôi khỏi một loạt lo lắng với ghi chú: "Đây là một giải pháp an toàn hơn vì trình soạn thảo không chạy bằng root. Bạn không bao giờ biết plugin có thể làm gì. " Tôi tin rằng tôi đã nghĩ về tất cả lỗ hổng, nhưng tôi đã sai.
bballdave025

14

Tôi đã nhận được lỗi này trên mỗi lối ra. Tôi đã không sử dụng sudo. Nó đề cập rõ ràng thư mục nhà người dùng của tôi:

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

Loại bỏ ~/.viminfokhông sửa lỗi.

Hóa ra tôi đã có một loạt các tệp tạm thời viminfo và loại bỏ các vấn đề đã khắc phục:

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

Tìm thấy giải pháp này ở đây .


5

Tôi đã nhận được lỗi tương tự khi thử :wqmột tệp trên đĩa hoàn toàn đầy đủ. Nếu bạn nhận được thông báo này, bạn có thể muốn kiểm tra dung lượng đĩa trống.


3

Một cách gọn gàng hơn nhiều để tạo một thư mục chính sẽ là sử dụng bộ xương mà linux cung cấp cho bạn chẳng hạn.

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

1
Tôi e rằng câu hỏi có rất ít liên quan đến việc tạo thư mục nhà ...
John WH Smith

Bạn cần tạo một thư mục chính để vim có thể lưu vào tệp .viminfo, vì vậy, có thể áp dụng lệnh trên.
Rick

1
Có vô số lý do tại sao tập tin này sẽ không tồn tại, trước khi bạn có thể đi đến kết luận như vậy. Việc không có thư mục chính có thể gây ra nhiều rắc rối hơn là chỉ thiếu một tệp; với lý do này, tôi có thể trả lời khá nhiều câu hỏi "thiếu tập tin" với "tạo thư mục chính của bạn". :)
John WH Smith

1
+1 Trong trường hợp của tôi, lỗi này xảy ra chính xác vì tôi đang chỉnh sửa tệp với tư cách là người dùng không có thư mục chính.
Zoltán

3

Đối với tôi, vấn đề là tôi đã thay đổi thư mục chính của mình thành vị trí bên trong giá đỡ NFS. Vì một số lý do, điều này dẫn đến việc chủ sở hữu của thư mục là "không ai". Thêm quyền ghi cho "khác" đã giải quyết vấn đề vì tôi rõ ràng không phải là chủ sở hữu của tệp.

chmod o+w ~/.viminfo

1
Bạn có thể vui lòng làm rõ câu trả lời của bạn. Câu trả lời trực tuyến không được tính là tốt trong SE
Romeo Ninov

2
Điều lạ là việc thêm các quyền ghi khác đã giúp bạn. Có lẽ bạn không sở hữu tập tin của riêng bạn?
Jeff Schaller

Điều này làm việc cho tôi. Tôi đoán ".viminfo" của tôi đã được tạo bởi người dùng "root" và nếu người dùng "ubfox" cố gắng sửa đổi nó, anh ta cần có quyền ghi. Tóm lại, "-rw-r - r--" trở thành "-rw-r - rw-".
emeraldhieu

0

Nhiều khả năng điều này đang xảy ra vì thư mục chủ đã hết dung lượng đĩa và mọi thao tác vim mới không thể ghi vào tệp .viminfo.


3
Điều đó có vẻ hơi xa vời: bạn có bằng chứng nào cho điều đó không?
jasonwryan

Đó là một khả năng, vâng.
Ned64

0

Tôi gặp vấn đề tương tự khi cập nhật nội dung của Makefile. Tôi cần một biến cục bộ và quyết định đặt tên cho nó HOME, vì vậy tôi đã nhập dòng HOME=2.154. Điều này khiến vim-HOMEcài đặt được thay thế bằng một thư mục không tồn tại. Đừng sử dụng HOMEbiến để sử dụng khác.


1
Xin lưu ý rằng đó HOMElà một biến môi trường được xác định trước và xác định lại nó thường không phải là một ý tưởng tốt.
Barun

0

Tôi nghĩ rằng điều này chỉ có thể áp dụng cho các phiên bản linux / vi khá cũ nhưng điều tôi tìm thấy là có các tệp tạm thời trong thư mục gốc của root với tên tệp /root/.viminfa.tmp ... /root/.viminfz.tmp và rằng có 26 người trong số họ có dấu thời gian trong nhiều năm. Chúng tôi đã hết các chữ cái trong bảng chữ cái vì tất cả az đã được sử dụng. Tôi đã xóa tất cả các tập tin đó và vấn đề đã biến mất. Tất nhiên Henrik # rm -rf ~/.viminf* sẽ khắc phục vấn đề này tốt.


0

Có vẻ như bạn đã xóa các biến môi trường.

Làm cái này:

xuất HOME = / root

Điều này sẽ giải quyết vấn đề của bạn.


0

Không chắc chắn làm thế nào tôi gặp phải kịch bản này khi tôi không nhớ mở bất kỳ tệp nào bằng cách sử dụng sudo vimnhưng trên mỗi tệp:q tệp tôi nhận được một câu tương tự 'Không thể viết viminfo là không thể ghi'.

rm ~/.viminfo đã không giải quyết nó và ~/.vim/ trống rỗng.

chmod 666 ~/.viminfođã giải quyết thông báo cảnh báo đó khi thoát tệp trong Vim. Mặc dù tôi không chắc đây là giải pháp tốt nhất? Nó có lý do tại sao nó dừng cảnh báo vì .viminfo đã được rw ------ trước đó và tôi giả sử là được viết với lịch sử lệnh vim.


0

Tôi kịch bản của tôi, đó là sự vắng mặt của /root/.viminfotập tin hoàn toàn. Sau khi tôi chạm vào tệp, lỗi đã dừng và tệp được cập nhật khi thoát vim. PS: Đây là linux nhúng Windriver.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.