Jak usunąć słowo i przejść do trybu wstawiania w Vimie?

98

W normalnym trybie mogę nacisnąć Ctrl+, Eco usuwa resztę bieżącego słowa i przechodzi do trybu wstawiania.

Chcę usunąć całe słowo, niezależnie od pozycji kursora (oczywiście w słowie).

Joernsn
źródło

Odpowiedzi:

166

Możesz użyć „zmień słowo wewnętrzne”, wpisując „ciw”, aby usunąć słowo, na którym znajduje się kursor.

Polecenia "inner" i "a" są świetne w Vimie, spróbuj także "ci {" wewnątrz bloku {} lub "ca {", jeśli również chcesz usunąć znaki {}. Aby przetłumaczyć te polecenia na angielski i lepiej je zapamiętać, spróbuj: "zmień wewnętrzny {blok" i "zmień {blok".

Dokumentacja pod adresem http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

Kaali
źródło
Zamiast funkcji „ciw” można użyć „caw”.
Amjith
Podczas gdy „caw” i „ciw” zastąpią całe słowo, po prostu „cw” zmieni się od aktualnej pozycji kursora do końca bieżącego słowa.
Drew Stephens
Zmieniłem odpowiedź z mówienia o „co {” na „ca {”, jak przypomniał komentarz jinxed_coders. Moje stare dostosowywanie implementuje polecenia „(a) <>” jako polecenia „(o) uter <>”.
Kaali,
19
ciwi cawnie są dokładnie takie same: ciwusuwa tylko słowo, cawusuwa również spację na końcu.
Roberto Bonvallet
5
: pomaga obiektom w vimie przeczytać więcej na temat tego typu wyborów.
Aaron
19

Odpowiedź na pytanie uzupełniające: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.
za dużo php
źródło
3
Jak można to zrobić wiele razy z rzędu? Za każdym razem, gdy wklejasz, bufor wypełnia się słowem, które wkleiłem.
Ben Gartner,
1
@BenGartner Znalazłem to na wiki Vim Tips : Użyj, yiwaby skopiować bieżące słowo, umieść kursor na słowie do zastąpienia, użyj ciw<C-r>0. Następnie możesz umieścić kursor na następnym słowie i użyć, .aby powtórzyć zamianę.
siegi
@BenGartner Jeśli wszystko próbują zrobić to zamienić wszystkie wystąpienia WORD_A z WORD_B, a następnie po prostu użyć Vima w trybie Ex :%s/a/b/g. amoże być dokładnym tekstem lub wyrażeniem regularnym i bjest tym, czego zastąpisz wszystkie dopasowania a. Możesz testować wyrażenia regularne w /trybie vima . Zastąp %numerem wiersza lub zakresem, jeśli nie chcesz podstawiać we wszystkich wierszach.
Braden Best
8

Drugie pytanie: bPldw

Spowoduje to, w kolejności, przejście do początku bieżącego słowa, wstawienie domyślnego rejestru przed kursorem, przejście do następnego znaku (prowadzącego poza koniec właśnie wstawionego tekstu) i usunięcie pozostałej części słowo.

Hank Gay
źródło
5
spowoduje to również usunięcie spacji po słowie. Powinien być bPlde.
0x89
10
Nie, powinno byćviwp
aehlke
3

Na pierwsze pytanie bcwteż działa. Oznacza „ bpotwierdzenie na początek słowa, czmień word”. Ale myślę, że ciwjest bardziej niezapomniany, co oznacza „ cmień inner word”, po prostu tylko jeden krok.

W przypadku drugiego pytania dotyczącego „zastąp przy użyciu wklejania” moim rozwiązaniem jest "_diwP. To dsuĹ inner word do rejestru nie obchodzi i paste zawartość domyślnego Rejestru. Zaletą jest to, że możesz wielokrotnie wkleić domyślny rejestr, ponieważ nie byłby on zanieczyszczony. To mały kompleks, więc mapuję go jako nnoremap ,r "_diwP.

Justme0
źródło
2

Lub możesz użyć sekwencji klawiszy, bdwiaby usunąć bieżące słowo i przejść do trybu INSERT.

ayaz
źródło
1
Możesz użyć, bcwaby przejść do początku bieżącego słowa, a następnie zmienić je, co pozostawia tryb wstawiania.
Hank Gay
Jeśli kursor znajduje się już na pierwszym znaku słowa, spowoduje to usunięcie poprzedniego słowa.
Warren Pena,
3
@WarrenPena W takim przypadku po prostu użyj dwi. Uważaj tylko, aby gliniarze tego nie zauważyli, ponieważ DWI jest nielegalne w większości stanów.
Braden Best