Apa perbedaan antara: wq <cr>: x <cr> dan ZZ saat keluar dari vim?

38

Vi dan Vim, seperti yang Anda semua tahu, memiliki banyak sinonim. Ada tiga cara yang saya tahu untuk menyimpan file dan keluar dari Vim dan Vi. Ini adalah : wq <cr> , : x <cr> dan ZZ . Saya pernah mendengar bahwa ini berbeda dalam beberapa hal.

Apakah ada perbedaan praktis antara menggunakan:

:x<cr>

:wq<cr>

atau

ZZ

untuk menyimpan file dan keluar dari Vim dan Vi?

wefwefa3
sumber
Jawaban sederhana: mereka sama.
JJoao
2
Mereka tidak sama. Saya tidak tahu persis perbedaannya, tetapi ini adalah sesuatu tentang menulis vs. tidak menulis ke file jika tidak ada perubahan yang dilakukan (yaitu memperbarui cap waktu).
Wildcard
1
Juga, dari sudut pandang praktis , ZZ(atau ZQ) lebih pendek dan lebih mudah untuk mengetik ...
VanLaser
:help :wq, :help ZZ, :help :x. Itu ada di sana di dokumen.
Antony

Jawaban:

40

Dari dokumentasi Vim, :xdan ZZsetara; mereka hanya menyimpan file jika telah dimodifikasi, lalu keluar dari 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 di sisi lain menulis file dan berhenti Vim (dengan asumsi izin yang sesuai).

akshay
sumber
9

Seperti yang ditunjukkan akshay, dokumentasi Vim menjelaskan, itu :xdan ZZsetara dan hanya menyimpan file jika buffer terkait telah diubah. Sedangkan :wqmenyimpan buffer ke file yang sesuai, bahkan jika itu tidak berubah.

Dalam kedua kasus, isi buffer akan disimpan ke disk. Jelas hasilnya sama, jadi mengapa repot, kan? Tapi tunggu ... Ada perbedaan yang halus, tapi tidak relevan.

Jika Anda keluar dari Vim melalui :xdan tidak ada perubahan pada buffer, tidak akan ada perubahan pada waktu modifikasi file itu. Di sisi lain, jika Anda keluar via :wq, waktu modifikasi akan berubah, karena file secara teknis ditulis ulang (disimpan lagi).

Ini dapat berdampak pada situasi tertentu. Misalnya proses pencadangan yang bergantung pada waktu modifikasi, dapat menyimpan file ini (dan berpotensi mengirimkannya melalui jaringan) meskipun tidak ada informasi tambahan yang disertakan. Atau beberapa proses pemantauan dapat membunyikan alarm jika mendeteksi bahwa (untuk itu) file telah diubah ...

Sunting: Saya lupa menyebutkan, untuk meninggalkan buffer / file yang dimodifikasi tanpa mengubah waktu modifikasi, a :q(tanpa w) akan bekerja juga.

m4110c
sumber
2
Juga, beberapa perintah otomatis akan berjalan hanya ketika file ditulis. Mereka tidak akan berjalan jika file tidak berubah dan Vim berhenti dengan ZZ atau: x.
Spidey