VIM'de imleçten sonra veya imlecin etrafındaki kelimeyi sil


212

Şimdi VIMTextMate'den geçiyorum. ^+WINSERT modunda çok kullanışlı buldum . Ancak, sadece imleçten önceki kelimeyi değil, imleçten sonraki veya çevresindeki kelimeyi de silmek istiyorum.

Bazı googling yaptım, ancak bulabildiğim tek şey ^+Wimleç ÖNCE sözcüğü silmekti.

Yanıtlar:


78

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

29
": h diw" birçok yararlı shrtcts için!
klokop

12
<Co> kullanmak için bonus bonus puanları. Normal modda bir komut yürütür ve doğrudan Ekle'ye atlar, böylece benzer bir şey de imap <C-d> <C-o>diwçalışır. Ayrıca, <Esc> hemen hemen her zaman yaptığı gibi bir geri alma noktası oluşturmaz.
zelk

<Co> ekleme modunda günümü yaptı :)
Lusk116

541

Normal mod:

daw : delete the word under the cursor    
caw : delete the word under the cursor and put you in insert mode 

125
Bunu daw: bir kelimeyi silmek ve bir: kelimeyi değiştirmek gibi düşünmek benim için yararlı.
welbornio

1
Tanrım ben kullanıyorum da)ve bunu ci)hiç düşünmedim!
Sky

1
Bu altın Jerry! ALTIN! Bu bebekleri .vimrcnmap <Leader>d dawnmap <Leader>c caw
dosyamdaki

1
Muhtemelen bahsetmeye değer 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
crantok

103

Bence sadece daw

daw - delete a word

1
Bunun abir komut olduğunu biliyorum Append text after the cursor [count] times.ama nasıl dawçalışır?
syntagma

3
@REACHUS ilk karakter 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 .
vlad-ardelean

2
dwve arasındaki fark dawnedir?
AK_

5
@AK_ Geç yanıt, ancak bir kelimenin ortasındaysanız 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.
Dmiters

67

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.


42

Şunu mu demek istediniz?

dw

10
Partiye geç, ancak dw geçerli pozisyondan kelimenin sonuna kadar silecek, tüm kelimeyi baştan silmek için diw veya daw kullanın
Dvid Silva

1
dwkısa çizgi veya başka bir noktalama işaretini geçmez.
ccpizza

* Not: Bu arabellek / son yank üzerine yazacaktır. Bu sadece 'Sil' değil, bir 'Kes' işlemi.
MD. Mohiuddin Ahmed

23

Normal modda iki boşluk arasındaki tüm karakterleri silmek için :

daW

Yalnızca bir kelimeyi silmek için:

daw 

20

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.


1
^ Wa lot kullanıyorum, çoğunlukla bir kelimeyi yanlış yazdığımda - geri dönüp eksik harfi / vb eklemek yerine, sadece her şeyi silip tekrar başlıyorum .. Normal bir moda geçmek sadece bir kelimeyi silmek için bir atık gibi görünüyor Örneğin, "örnek wrd [^ w] kelime", "örnek wrd [^ c] [dw] [i] kelime" den daha az tuş vuruşudur.
dbr

1
dbr: Vim'in desteklediği temel ^ W davranışını yapmasını istemiyordu. Ekleme modundayken ortada iken tüm kelimeleri silmek istiyordu, bu da vim için biraz garip bir durum ve bu yüzden bunu yapmak için bir komut yok. Gerçekten işlevselliği istiyorsan ^ Q ile <Esc> ciw arasında bağlantı kurabilirsin. Oh, ayrıca [^ c] [dw] [i] 'deki [i] gereksizdir, [^ c] [ciw]
bfabry kullanabilirsiniz

4
"Bir yolu yok gibi görünmüyor ..." - bunu yapmanın sayısız yolu var - yerleşik bir yolu yok, afaik. Dan'ın insert modu ve normal mod hakkındaki ifadesine tamamen katılıyorum, ancak elbette sadece bir insert modu eşlemesi tanımlayabilirsiniz, insert modunda işlevselliğe gerçekten ihtiyacınız varsa elde etmek istediğiniz her şeyi yapan ": imap yardım" bölümüne bakın.
user55400

13

İ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


8

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

5

Yazım modunda maalesef böyle bir komut yok. VIM'de imlecin altındaki tüm kelimeyi silmek için viwdNORMAL modda yazabilirsiniz . Bu da " V isual-blok I nner W ord D elete " anlamına gelir . WNoktalama işaretleri eklemek için bir büyük harf kullanın .


3

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.


Bu yanıtı, normal modda da çalıştığı için daha çok seviyorum.
sivabudh

2

İmleçten önce belirli sayıda karakteri silmek için X kullanabilirsiniz. İmleçten sonra belirli sayıda kelimeyi silmek için dw kullanabilirsiniz (örneğin 3 kelime için 3dw kullanılarak birden çok kelime silinebilir). Genel olarak imlecin etrafını silmek için daw kullanabilirsiniz.


2

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.


2

"Önce" ve "sonra" kullanımından tam olarak emin değilim, ama denedin mi

dw

?

Edit: Sanırım ekleme modunda kullanmak için bir şey arıyorsunuz. Garip bir şekilde, dokümanlarda bulunacak hiçbir şey yok, ctrl-w hepsi var gibi görünüyor.


2

İki eşleme yaptım, böylece kesici uç ve kesici uç modunda tutarlılık elde edebildim.

:map <'Key of your choice'> caw

:imap <'Key of your choice'> <'Esc'> caw


0

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
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.