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 :w
mộ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 tee
lệ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.
:!command
là một bộ lọc (xem:h !
), trong khi:w !command
không, nó chỉ thực thicommand
với tệp hiện tại làstdin
(xem:h :w_c
). To wit::w !sed /./d
khô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.