Yanıtlar:
Yapmanız gereken, bir dizi komut için belirli bir anahtarın imapını oluşturmaktır, bu durumda komutlar sizi normal moda indirir, geçerli sözcüğü siler ve sonra tekrar ekler:
:imap <C-d> <C-[>diwi
imap <C-d> <C-o>diwçalışır. Ayrıca, <Esc> hemen hemen her zaman yaptığı gibi bir geri alma noktası oluşturmaz.
Normal mod:
daw : delete the word under the cursor
caw : delete the word under the cursor and put you in insert mode
da)ve bunu ci)hiç düşünmedim!
.vimrcnmap <Leader>d dawnmap <Leader>c caw
awbir nesne seçimi örneğidir. Ne tür bir etkiye sahip olduklarını görmek için nesne seçimini görsel modda deneyebilirsiniz: vimdoc.sourceforge.net/htmldoc/motion.html#object-select
Bence sadece daw
daw - delete a word
abir komut olduğunu biliyorum Append text after the cursor [count] times.ama nasıl dawçalışır?
d'sileceğinizi' belirtir. 'A', silme işleminin bir sınırlayıcı içereceğini belirten bir tür parametredir. Son olarak 'w', başka bir parameter-eğer sen -ecek- bir wordbirimin silineceğini belirtir .
dwve arasındaki fark dawnedir?
dw, imleçten sözcüğün sonuna kadar silinirken daw, tüm sözcüğü boşlukla birlikte siler. diwçevresindeki boşluklara dokunmadan tüm kelimeyi siler.
Aşağıdakiler Normal mod için geçerlidir: Dan Olson'ın çoğu silme için muhtemelen normal modda olmanız gerektiği cevabını kabul ediyorum. Daha fazla ayrıntı aşağıda.
İmleç sözcüğün içindeyse: kelimeyi
diwsilmek için (boşluk içermez)
dawsözcüğün çevresini silmek için (sonraki sözcüğün önündeki boşlukları içerir).
İmleç kelimenin başlangıcındaysa, tuşuna basın dw.
Bu hareket için olağan sayılar eklenerek çoğaltılabilir, örneğin 2 kelime ileri gitmek için 2w, böylece d2w iki kelimeyi siler.
Ekleme Modu ^ w
Vim'de hareket için hjkl kullanma fikri, ana satırda ellerinizi tutmanın daha verimli olmasıdır. Bir kelimenin sonunda ^ w hızlı bir şekilde sözcüğü silmek için harika çalışıyor. Ekleme moduna geçtiyseniz, bazı metinler girdiniz ve ana satır felsefesine karşı gittiğiniz kelimenin ortasında olmak için ok tuşlarını kullandınız.
Normal moddaysanız ve kelimeyi değiştirmek istiyorsanız, kelimeyi tamamen değiştirmek istiyorsanız (sil) cyerine (değiştir) seçeneğini kullanabilir ve geri dönmek diçin basmaya gerek kalmadan ekleme moduna tekrar girebilirsiniz. iyazmak için.
Şunu mu demek istediniz?
dw
dwkısa çizgi veya başka bir noktalama işaretini geçmez.
Herhangi var gibi görünmüyor yerleşik soruydu ekleme modunda, bunu yapmak için yol. Diğer cevapların bazıları normal mod için doğrudur ve ekleme moduna işlevsellik eklemek için özel bir eşlemenin oluşturulabileceğine işaret eder.
Dürüst olmak gerekirse, muhtemelen silme işlemlerinin çoğunu normal modda yapmanız gerekir. ^ W hakkında bilmek güzel ama normal moda girmek ve emrinde daha güçlü silme komutları var esc daha yapmak istiyorum bir durum düşünebilirsiniz emin değilim.
Vim bu şekilde diğer bazı editörlerden (TextMate dahil) çok farklıdır. Verimli bir şekilde kullanıyorsanız, ekleme modunda çok fazla zaman geçirmediğinizi fark edeceksiniz.
İmlecinizin açık olduğu diw
tüm kelimeyi silmek için İmlecinizin açık olduğu ciw
tüm kelimeyi silmek ve tüm sözcüğü silmek istemiyorsanız, ancak bulunduğunuz yerden silmek istiyorsanız, ekleme moduna sokmak için kullanındw/cw
Bir kelimeyi silmenin pek çok yolu olduğundan, bunları açıklayalım.
Düzenlediğinizi varsayarsak:
foo-bar quux
ve imleç 'bar' çubuğunda 'iken bir komut çağırır:
foo-bquux # dw: letters then spaces right of cursor
foo-quux # daw: letters on both sides of cursor then spaces on the right
foo- quux # diw: letters on both sides of cursor
foo-bquux # dW: non-whitespace then spaces right of cursor
quux # daW: non-whitespace on both sides of cursor then spaces on the right
quux # diW: non-whitespace on both sides of cursor
Kelimeleri silmeyi tekrarlamaya çalışırken kabul edilen cevap başarısız oluyor, bunun yerine bu çözümü deneyin:
" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw
Normal modda da çalışan CTRL-BackSpace'i eşler.
Eski vi'de, bimleci imleçten önceki sözcüğün başına wgötürür, imleci imleçten sonraki sözcüğün başına götürür, imleci imleçten sonraki sözcüğün esonuna taşır ve imleçten sözcüğün sonuna kadar dwsiler.
Yazdığınızda wbdw, imleç sözcüğün başında veya sonunda olsa bile, imlecin etrafındaki sözcüğü silmiş olursunuz. Bir sözcükten sonraki boşlukların, silinecek sözcüğün bir parçası olduğunu unutmayın.
Sadece imleçten önceki kelimeyi değil, imleçten sonraki veya çevresindeki kelimeyi de silmek istiyorum.
Bu durumda OP tarafından önerilen çözüm (yani kullanmak <c-w>), aşağıdakileri vermek için kabul edilen cevapla birleştirilebilir:
inoremap <c-d> <c-o>daw<c-w>
alternatif olarak (daha kısa çözüm):
inoremap <c-d> <c-o>vawobd
Örnek giriş:
word1 word2 word3 word4
^------------- Cursor location
Çıktı:
word1 word4