Adlı dosyaları oluşturmaktan kaçınmak için `: w'` ila`: w` takma adının bir yolu var mı?


9

Bazen, pinky'm 'enter'a ulaşırken anahtarı otlatacak ve sonuçta ortaya çıkacak :w'<Enter>.

Denedim:

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

Hiçbiri çalışmıyor. Takma adıma bir yolu var mı :w'hiç :w?

Ben de normal komut satırı yerine cmdwin ( :help cmdwin+ nnoremap : :<C-F>) kullanın, bu yüzden orada çalışırsa bonus puan.


3
hah; \
Martin Tournoij

Yanıtlar:


8

Peter Rincker'ın belirttiği gibi, cmaps başka yerlerde de genişleyebilir, bu yüzden cnoreabbrevdaha iyi olur :

cnoreabbrev w' w

Ya da en güvenli, yine Peter sayesinde:

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

Komut satırının yalnızca içerip içermediğini açıkça kontrol ederek w', durumlardaki istenmeyen genişletmelerden kaçınılabilir.

Şunları kullanabilirsiniz cmap:

cmap w' w

Hala basmak zorunda kalacaksın Enter, ama 'şimdi bir kazara göz ardı edilmeli.

Kullanıyorsanız cmdwin, bir inoremapdizi autocmdyararlı olabilir:

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

Koştum :cmap w' wama davranışta bir değişiklik olmadı. :w'yine de adlı bir dosyaya yazma ile sonuçlanır '. "'" [New] 0L, 0C written.
mwcz

@mwcz Sonra basıldığında 'aslında görünüyor mu w? cmapBaşarıyla oluşturulmuşsa olmamalıdır - bir cmap LHS otomatik olarak RHS ile doldurulur, bu nedenle a tuşuna basarsanız ', yalnızca gösterilmelidir w.
muru

1
Çıplak cmapve dikkatli olun cabbrev. Diğer modlarda ve diğer yerlerde yürütürler / genişlerler. örneğin :s/'follow'/foove /'follow'. Lütfen aşağıdaki vim değişikliğine bakın: x kaydet ve çık yerine tamponu silme fonksiyonu veya cmdalias.vim
Peter Rincker

1
Üzgün ​​olmaktan daha güvenli:cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
Peter Rincker

Evet, 'hala ortaya çıkıyor, ama sadece komutları girmek için cmdwin kullandığım ve cmdwin'in sadece normal bir tampon olduğu için anladım, cmap/cnoreabbrevorada çalışmayın. Cevabı noreabbrevcmdwin kullanıcıları için seçenek ile güncelleme . :) Teşekkürler!!!
mwcz

0

Bu yöntem benim için çalışıyor:

:ca w' w

Alternatif olarak, vc'nizi Esc'ye iki kez bastığınızda mevcut arabelleği kaydedecek şekilde ayarlayabilirsiniz;

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

Veya dosyayı Ctrl+ sveya ile kaydetmek için aşağıdaki eşlemeyi kullanın 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>

Not: F2 yalnızca gerektiğinde kaydeder ve kullanıcıyı gerektiğinde ekleme moduna döndürür (veya görsel seçimlerini geri yükler).

Kaynak: vim wikia'da dosya kaydetme

Veya aşağıdaki alternatifleri kullanın:

  • :up( :update) için:w
  • ZQ için :q
  • ZZiçin :wqveya:x

Sorudaki tırnak işaretine dikkat edin. :w', değil :w. :wYanlışlıkla vurmadan kullanmak istiyorum ', o zaman ben bir dosya yazar rm \'. Gerçi iyi ipuçları.
mwcz

1
Ctrl-S bir sigstop göndermez - program durursa, büyük olasılıkla bir arabellek doludur. Bkz. Unix.stackexchange.com/questions/13629/… '
muru
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.