2009-09-04 12 views
86

W trybie normalnym mogę trafić Ctrl + E która usuwa resztę bieżącego słowa i przechodzi do trybu wstawiania.Jak usunąć słowo i przejść do trybu wstawiania w Vimie?

Chcę usunąć całe słowo, niezależnie od pozycji kursora (w ramach wyrazu oczywiście). Również - jak mogę zamienić bieżące słowo na cokolwiek z domyślnego rejestru?

Odpowiedz

146

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

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

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

+0

" caw "może być użyty zamiast" ciw "tej samej funkcjonalności. – Amjith

+0

Podczas gdy "caw" i "ciw" zastąpią całe słowo, po prostu "cw" zmieni się z bieżącej pozycji kursora na koniec bieżącego słowa. –

+0

Edytowałem odpowiedź z informacją o "co {" do "ca {", jak przypomniał komentarz jinxed_coders. Moja stara personalizacja implementuje polecenia "(a) <>" jako "(o) uter <>". – Kaali

8

Na drugie pytanie: bPldw

Będzie to w porządku, można dostać się do początku bieżącego słowa, wstaw domyślny rejestr przed kursorem, przejdź do następnego znaku (biorąc Przeszłość koniec wstawianego tekstu) i usunąć resztę wyrazu.

+5

powoduje to również usunięcie spacji po słowie. Powinien być 'bPlde'. – 0x89

+9

Nie, powinien być 'viwp' – aehlke

2

Albo, można chyba użyć sekwencję klawiszy bdwi aby usunąć bieżące słowo i przejdzie w tryb INSERT.

+1

Możesz użyć 'bcw', aby przejść do początku bieżącego słowa, a następnie zmienić słowo, które pozostawia tryb wstawiania. –

+0

Jeśli kursor znajduje się już na pierwszym znaku wyrazu, spowoduje to usunięcie poprzedniego słowa. –

+3

@WarrenPena W takim przypadku wystarczy użyć 'dwi'. Tylko uważaj, że gliny nie zauważają, ponieważ DWI jest nielegalne w większości stanów. –

18

odpowiedzi na swoje kolejne pytanie: viwp

v -> start visual mode 
iw -> select the 'inner word' 
p -> paste - in visual mode it replaces the visually selected text. 
+2

Jak zrobić to wiele razy z rzędu? Za każdym razem, gdy wklejasz, bufor wypełnia się słowem, które wkleiłem. –

+1

@BenGartner Znalezione na [wiki Vim Tips] (http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text#Alternate_method): Użyj 'yiw', aby skopiować bieżące słowo, umieść kursor na słowie, które chcesz zastąpić, użyj' ciw 0'. Następnie umieść kursor na następnym słowie i użyj '.', aby powtórzyć wymianę. – siegi

+0

@BenGartner Jeśli wszystko, co próbujesz zrobić, zamień wszystkie wystąpienia WORD_A na WORD_B, po prostu używaj trybu ex vima, ':% s/a/b/g'. "a" może być dokładnym tekstem lub wyrażeniem regularnym, a 'b' jest tym, co zastąpisz wszystkie dopasowania' a' z. Możesz przetestować wyrażenia regularne w trybie '/' vima. Zastąp '%' numerem linii lub zakresem, jeśli nie chcesz zastąpić wszystkich linii. –

2

Na pierwsze pytanie, bcw pracować również. Oznacza to "b potwierdzenie na początku słowa, c hange w ord". Ale myślę, że ciw jest bardziej niezapomniany, co oznacza " hange i nner w ord", tylko jeden krok.

Po drugie pytanie dotyczące "zamiany za pomocą wklejania", moim rozwiązaniem jest "_diwP. To do rejestru, którego nie obchodzisz, i p o domyślną zawartość rejestru. Zaletą jest to, że możesz wkleić domyślny rejestr wiele razy, ponieważ nie będzie on zanieczyszczony. Jest to mały kompleks, więc mapuję go jako nnoremap ,r "_diwP.

Powiązane problemy