Apakah ada cara untuk alias `: w'` ke`: w`, untuk menghindari membuat file bernama '?


9

Kadang-kadang, kelingking saya akan menggembok 'kunci sambil meraih masuk, menghasilkan :w'<Enter>.

Saya sudah mencoba:

cabbrev w' :w
cabbrev w\' :w
cabbrev "w'" :w

Tidak ada yang bekerja. Apakah ada cara untuk alias :w'ke :w?

Saya juga menggunakan cmdwin ( :help cmdwin+ nnoremap : :<C-F>) sebagai ganti dari command-line normal, jadi bonus poin jika berfungsi juga di sana.


3
hah; Saya memiliki masalah yang sama dengan \
Martin Tournoij

Jawaban:


8

Seperti yang ditunjukkan Peter Rincker, cmaps dapat berkembang di tempat lain juga, jadi a cnoreabbrevakan lebih baik :

cnoreabbrev w' w

Atau, teraman, sekali lagi terima kasih kepada Peter:

cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"

Dengan secara eksplisit memeriksa apakah baris perintah hanya berisi w', ekspansi yang tidak diinginkan dalam situasi dapat dihindari.

Anda dapat menggunakan cmap:

cmap w' w

Anda masih harus menekan Enter, tetapi kecelakaan 'harus diabaikan sekarang.

Jika Anda menggunakan cmdwin, satu inoremapset oleh autocmdmungkin berguna:

autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'

Saya berlari :cmap w' w, tetapi tidak ada perubahan perilaku. :w'masih menghasilkan tulisan ke file bernama '. "'" [New] 0L, 0C written.
mwcz

@ mwcz Apakah ini 'benar - benar muncul ketika Anda menekannya setelah w? Seharusnya tidak jika cmapberhasil dibuat - LHS cmap secara otomatis diisi dengan RHS, jadi jika Anda menekan a ', itu harus tetap hanya ditampilkan w.
muru

1
Hati-hati dengan telanjang cmapdan cabbrev. Mereka akan menjalankan / memperluas mode lain dan tempat lain. misalnya :s/'follow'/foodan /'follow'. Silakan lihat perubahan vim berikut : x berfungsi untuk menghapus buffer alih-alih menyimpan & keluar atau menggunakan cmdalias.vim
Peter Rincker

1
Lebih baik aman daripada menyesal:cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
Peter Rincker

Ya, 'masih muncul, tapi saya baru tahu itu karena saya menggunakan cmdwin untuk memasukkan perintah, dan cmdwin hanyalah buffer biasa, jadi cmap/cnoreabbrevjangan bekerja di sana. Memperbarui jawaban dengan noreabbrevopsi untuk pengguna cmdwin. :) terima kasih !!!
mwcz

0

Metode ini bekerja untuk saya:

:ca w' w

Atau Anda dapat mengatur vim Anda untuk menyimpan buffer saat ini ketika Anda menekan Esc dua kali, misalnya

:map <Esc><Esc> :w<CR>

Atau gunakan pemetaan berikut untuk menyimpan file dengan Ctrl+ satau F2:

nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>

nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>

Catatan: F2 hanya menyimpan jika perlu, dan mengembalikan pengguna untuk memasukkan mode (atau mengembalikan pilihan visualnya), sesuai kebutuhan.

Sumber: Menyimpan file di vim wikia

Atau gunakan alternatif berikut:

  • :up( :update) untuk:w
  • ZQ untuk :q
  • ZZuntuk :wqatau:x

Perhatikan tanda kutip dalam pertanyaan. :w', Tidak :w. Saya ingin menggunakan :wtanpa sengaja memukul ', yang kemudian menulis file saya harus rm \'. Tips yang bagus.
mwcz

1
Ctrl-S tidak mengirim sigstop - jika program berhenti, itu mungkin karena buffer penuh. Lihat unix.stackexchange.com/questions/13629/… '
muru
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.