Saat mengedit kode sumber menggunakan gvim (v.7.4.488), saya ingin mengkomit beberapa perubahan vcs (Saya menggunakan git 2.1.4 dari baris perintah di Ubuntu linux).
git --status
menunjukkan file mana yang saya ubah. Namun, ini juga menunjukkan vim .*.swp
dari buffer yang terlihat saat ini (baik jika file tersebut berisi perubahan yang belum disimpan dan ketika file yang diedit sama dengan .*.swp
-file). Tentu, git dapat mengabaikan file-file ini atau vim dapat menyimpan file swap di lokasi yang berbeda (lihat vim.wikia atau pertanyaan ini di stackoverflow ). Tapi saya suka .*.swp
file -fil yang muncul git --status
ketika mereka berisi perubahan yang belum disimpan, karena itu menandakan saya bahwa saya melakukan file dalam keadaan yang berbeda dari apa yang saya pikirkan.
Bagaimana saya bisa menghindari kesalahan positif dari .*.swp
-file yang muncul git --status
ketika file yang disimpan sama dengan .*.swp
-file, sementara bisa melihat file yang dikomit berada dalam keadaan yang berbeda dari yang saya edit dengan vim?
- Apakah mungkin hanya memiliki
.*.swp
-file, ketika file pada disk dan file dalam vim berbeda? - Apakah ada cara lain untuk mendeteksi file yang belum disimpan?
Menggabungkan komentar @elyashiv dan @VanLaser menghasilkan metode yang lebih sederhana daripada mendeteksi apakah file swap menyiratkan file yang belum disimpan:
- jangan biarkan git mengabaikan file. *. sw [po];
- ketika melakukan, jika
git --status
mengungkapkan ada.*.sw[po]
-file melakukan:wa
in vi; dan, - tambahkan dan komit.
:wa
untuk memastikan tidak ada file yang belum disimpan.git commit
...Jawaban:
vim -r
pada baris perintah akan mencantumkan semua file swap di direktori saat ini dan direktori sementara, dan apakah mereka berisi perubahan yang belum disimpan. Cari garis yang mengatakanmodified: no/YES
.Saya tidak tahu bagaimana cara memberitahu Vim untuk mencari di direktori yang berbeda, jadi Anda harus mengubah ke setiap direktori yang berisi file swap dan jalankan
vim -r
. Anda bisa membuat skrip yang mem-parsing outputgit status
, atau digunakanfind -name '.*.sw[po]'
, dan kemudian dijalankanvim -r
di setiap direktori, untuk menampilkan semua file swap dengan perubahan yang belum disimpan.(Saya menggunakan
.*.sw[po]
bukan.*.swp
, karena kadang-kadang.swo
file dibuat di samping.swp
file, ketika Anda mengedit file yang sudah memiliki file swap..swn
File juga dapat dibuat jika Anda mengedit file dengan dua file swap yang ada, tapi saya tidak berpikir Saya pernah melihat satu di alam liar. Jika Anda benar-benar paranoid, Anda bisa menggunakan.*.sw[a-p]
atau hanya.*.sw?
.)Lihat
:help -r
untuk (sedikit) informasi lebih lanjut tentang-r
opsi, atau:help recover.txt
untuk informasi lebih lanjut tentang pemulihan dan bertukar nama file.sumber
.
pada nama file) sehingga pola yang tepat adalah.*.sw[a-p]
(walaupun dalam kasus patologis, Anda sebenarnya bisa sampai ke sana.foo.saa
). Itu juga harus mencegah pencocokan file Flash, karena saya ragu itu biasanya merupakan file tersembunyi..
diperlukan di shell glob, tetapi*.swp
berfungsi sebagai argumen untukfind
. Tetapi pemimpin.
membuat segalanya lebih sederhana. Terima kasih!Iya. Cuplikan di bawah ini (diadaptasi dari vimrc tpope ) akan menonaktifkan file swap untuk buffer ketika tidak dimodifikasi, jadi file swap hanya ada untuk file yang dimodifikasi.
Peringatan : Karena file swap hanya ada ketika buffer diubah, Anda kehilangan penggunaan file swap sebagai kunci penasihat. Jika buffer tidak dimodifikasi, maka Vim lain dapat mulai mengeditnya tanpa pemberitahuan bahwa buffer sudah terbuka. Jika Vim kedua disimpan sebelum yang pertama membuat lebih banyak perubahan, maka mereka tidak akan diketahui sampai pengguna mencoba untuk menyimpan atau sesuatu memicu Vim untuk memeriksa apakah file tersebut dimodifikasi.
sumber