Nếu bạn mở một tệp mà bạn không có quyền ghi vào vim, sau đó quyết định bạn cần thay đổi nó, bạn có thể viết các thay đổi của mình mà không cần thoát vim bằng cách :w !sudo tee %
tôi không hiểu cách này có thể hoạt động. Bạn có thể vui lòng mổ xẻ điều này?
Tôi hiểu :wmột phần, nó ghi bộ đệm hiện tại vào đĩa, giả sử đã có một tên tệp được liên kết với nó, phải không?
Tôi cũng hiểu cái !nào thực thi sudo teelệnh và %thể hiện nội dung bộ đệm hiện tại phải không?
Nhưng vẫn không hiểu làm thế nào điều này hoạt động.
:!commandlà một bộ lọc (xem:h !), trong khi:w !commandkhông, nó chỉ thực thicommandvới tệp hiện tại làstdin(xem:h :w_c). To wit::w !sed /./dkhông thay đổi nội dung của bộ đệm hiện tại. Nhưng công thức thực sự không hoàn toàn đúng vì một lý do khác,%cần phải được thoát ::exec 'w !sudo tee ' . shellescape(expand('%', 1)). Lệnh ban đầu không hoạt động với tên tệp có dấu cách.