Odpowiedzi:
To, co powinieneś zrobić, to utworzyć imap określonego klucza do szeregu poleceń, w tym przypadku polecenia przejdą w tryb normalny, usuną bieżące słowo, a następnie ponownie wstawią:
:imap <C-d> <C-[>diwi
imap <C-d> <C-o>diw
też działa. Nie tworzy też punktu cofania, co zawsze robi <Esc>.
Tryb normalny:
daw : delete the word under the cursor
caw : delete the word under the cursor and put you in insert mode
da)
a ci)
jednak nigdy nie myślał o tym!
.vimrc
pliku: nmap <Leader>d daw
inmap <Leader>c caw
aw
jest to jeden z przykładów wyboru obiektów. Możesz wypróbować selekcje obiektów w trybie wizualnym, aby zobaczyć, jaki mają one efekt: vimdoc.sourceforge.net/htmldoc/motion.html#object-select
Myślę, że to jest po prostu daw
daw - delete a word
a
to polecenie, Append text after the cursor [count] times.
ale jak daw
działa?
d
dyktuje, że będziesz „ usuwał ”. „A” jest rodzajem parametru określającym, że usunięcie ma obejmować separator. Wreszcie „w”, kolejny - parameter
jeśli chcesz - określa, że word
jednostka zostanie usunięta.
dw
i daw
?
dw
usunie się z kursora na koniec słowa, a jednocześnie daw
usunie całe słowo wraz ze spacją. diw
usunie całe słowo bez dotykania białych znaków wokół niego.
Poniżej działa tryb normalny: zgadzam się z odpowiedzią Dana Olsona, że prawdopodobnie powinieneś być w trybie normalnym w przypadku większości operacji usuwania. Więcej szczegółów poniżej.
Jeśli kursor znajduje się wewnątrz słowa:
diw
aby usunąć słowo (nie zawiera spacji),
daw
aby usunąć słowo (obejmuje spacje przed następnym słowem).
Jeśli kursor znajduje się na początku słowa, wystarczy nacisnąć dw
.
Można to pomnożyć przez dodanie zwykłych liczb dla ruchu, np. 2w, aby przejść do przodu o 2 słowa, więc d2w usuwa dwa słowa.
Tryb wstawiania ^ w
Pomysł użycia hjkl do poruszania się w Vimie polega na tym, że bardziej produktywne jest trzymanie rąk w głównym rzędzie. Na końcu słowa ^ w działa świetnie, aby szybko usunąć słowo. Jeśli przeszedłeś do trybu wstawiania, wprowadziłeś tekst i użyłeś klawiszy strzałek, aby skończyć w środku słowa, które postąpiłeś wbrew filozofii wiersza domowego.
Jeśli jesteś w trybie normalnym i chcesz zmienić słowo, możesz po prostu użyć c
(zmień) zamiast d
(usuń), jeśli chcesz całkowicie zmienić słowo i ponownie wejść w tryb wstawiania bez konieczności naciskania, i
aby wrócić do pisania.
Masz na myśli?
dw
dw
nie usuwa obok myślnika ani innej interpunkcji.
Nie wygląda na to, żeby istniał jakikolwiek wbudowany sposób na to w trybie wstawiania, o co pytano. Niektóre inne odpowiedzi są poprawne dla trybu normalnego, a także wskazuje, że można utworzyć niestandardowe odwzorowanie w celu dodania funkcji w trybie wstawiania.
Szczerze mówiąc, prawdopodobnie powinieneś zrobić większość usuwania w trybie normalnym. ^ W to fajnie wiedzieć, ale nie jestem pewien, czy mogę wymyślić sytuację, w której wolałbym to zrobić niż esc, aby przejść do trybu normalnego i mieć do dyspozycji potężniejsze polecenia usuwania.
W ten sposób Vim bardzo różni się od wielu innych edytorów (w tym TextMate). Jeśli używasz go produktywnie, prawdopodobnie zauważysz, że nie spędzasz dużo czasu w trybie wstawiania.
Aby usunąć całe słowo, którego używa kursor diw
Aby usunąć całe słowo, na którym znajduje się kursor i przejść do trybu wstawiania, użyj, ciw
jeśli nie chcesz usunąć całego słowa, ale usuń z miejsca, w którym jesteśdw/cw
Ponieważ istnieje tak wiele sposobów na usunięcie słowa, zilustrujmy je.
Zakładając, że edytujesz:
foo-bar quux
i wywołać polecenie, gdy kursor znajduje się na pasku „a” na pasku:
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
Przyjęta odpowiedź nie powiedzie się podczas próby powtórzenia usuwania słów, spróbuj zamiast tego:
" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw
Mapuje CTRL-BackSpace, działając również w trybie normalnym.
W starym vi b
przesuwa kursor na początek słowa przed kursorem, w
przenosi kursor na początek słowa za kursorem, e
przenosi kursor na końcu słowa za kursorem i dw
usuwa z kursora na koniec słowa.
Po wpisaniu wbdw
usuwasz słowo wokół kursora, nawet jeśli kursor znajduje się na początku lub na końcu słowa. Pamiętaj, że spacje po słowie są uważane za część słowa do usunięcia.
Chciałbym usunąć nie tylko słowo przed kursorem, ale także słowo za kursorem lub wokół niego.
W takim przypadku rozwiązanie zaproponowane przez OP (tj. Za pomocą <c-w>
) można połączyć z zaakceptowaną odpowiedzią, aby uzyskać:
inoremap <c-d> <c-o>daw<c-w>
alternatywnie (krótsze rozwiązanie):
inoremap <c-d> <c-o>vawobd
Przykładowe dane wejściowe:
word1 word2 word3 word4
^------------- Cursor location
Wynik:
word1 word4