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!
.vimrc
nmap <Leader>d daw
nmap <Leader>c caw
aw
bir 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
a
bir 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 word
birimin silineceğini belirtir .
dw
ve arasındaki fark daw
nedir?
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
diw
silmek için (boşluk içermez)
daw
sö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) c
yerine (değiştir) seçeneğini kullanabilir ve geri dönmek d
için basmaya gerek kalmadan ekleme moduna tekrar girebilirsiniz. i
yazmak için.
Şunu mu demek istediniz?
dw
dw
kı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, b
imleci imleçten önceki sözcüğün başına w
götürür, imleci imleçten sonraki sözcüğün başına götürür, imleci imleçten sonraki sözcüğün e
sonuna taşır ve imleçten sözcüğün sonuna kadar dw
siler.
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