Sự khác biệt giữa: wq <cr>: x <cr> và ZZ khi thoát vim là gì?


38

Vi và Vim, như tất cả các bạn biết, có nhiều từ đồng nghĩa. Có ba cách tôi biết để lưu tệp và thoát Vim và Vi. Đó là : wq <cr> , : x <cr>ZZ . Tôi đã nghe nói rằng những điều này là khác nhau theo một cách nào đó.

Có sự khác biệt thực tế nào giữa việc sử dụng:

:x<cr>

:wq<cr>

hoặc là

ZZ

để lưu file và thoát Vim và Vi?


Câu trả lời đơn giản: chúng giống nhau.
JJoao

2
Chúng không giống nhau. Tôi không biết chính xác sự khác biệt, nhưng đó là điều gì đó về việc viết so với không ghi vào tệp nếu không có thay đổi nào được thực hiện (tức là cập nhật dấu thời gian).
tự đại diện

1
Ngoài ra, từ quan điểm thực tế , ZZ(hoặc ZQ) ngắn hơn và dễ nhập hơn ...
VanLaser

:help :wq, :help ZZ, :help :x. Nó ở ngay trong tài liệu.
Antony

Câu trả lời:


40

Từ tài liệu của Vim, :xZZtương đương; họ chỉ lưu tệp nếu nó đã được sửa đổi, sau đó thoát Vim:

Write current file, if modified, and quit (same as ":x").  
(Note: If there are several windows for the
current file, the file is written if it was modified and the window is closed).

:wq mặt khác ghi tập tin và thoát Vim (giả sử quyền thích hợp).


9

Như akshay đã chỉ ra, tài liệu của Vim giải thích, điều đó :xZZtương đương và chỉ lưu một tệp nếu bộ đệm liên quan đã bị thay đổi. Trong khi đó :wqlưu bộ đệm vào tệp tương ứng, ngay cả khi nó không thay đổi.

Trong cả hai trường hợp, nội dung của bộ đệm sẽ được lưu vào đĩa. Rõ ràng kết quả là như nhau, vậy tại sao phải bận tâm, phải không? Nhưng chờ đã ... Có một sự khác biệt tinh tế, nhưng không liên quan.

Nếu bạn thoát Vim qua :xvà không có thay đổi đối với bộ đệm, sẽ không có thay đổi về thời gian sửa đổi của tệp đó. Mặt khác, nếu bạn thoát qua :wq, thời gian sửa đổi sẽ thay đổi, vì tệp được viết lại về mặt kỹ thuật (được lưu lại).

Điều này có thể có một số tác động trong các tình huống nhất định. Ví dụ, quy trình sao lưu phụ thuộc vào thời gian sửa đổi, có thể lưu trữ tệp này (và có khả năng gửi nó qua mạng) ngay cả khi không có thông tin bổ sung nào được đưa vào. Hoặc một số quy trình giám sát có thể rung chuông báo động nếu phát hiện (đối với nó) tệp đã bị thay đổi ...

Chỉnh sửa: Tôi quên đề cập, để rời khỏi bộ đệm / tệp đã sửa đổi mà không thay đổi thời gian sửa đổi, một :q(không có w) cũng sẽ hoạt động.


2
Ngoài ra, một số autocommands sẽ chỉ chạy khi tệp được ghi. Họ sẽ không chạy nếu tệp không thay đổi và Vim bị thoát với ZZ hoặc: x.
Spidey
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.