Come eliminare una parola e passare alla modalità di inserimento in Vim?


98

In modalità normale posso premere Ctrl+ Eche cancella il resto della parola corrente e passa alla modalità di inserimento.

Voglio eliminare l'intera parola, indipendentemente dalla posizione del cursore (all'interno della parola ovviamente).

Risposte:


164

Puoi usare "cambia parola interna" digitando "ciw" per eliminare una parola su cui si trova il cursore.

I comandi "inner" e "a" sono ottimi in Vim, prova anche "ci {" all'interno di un blocco {}, o "ca {" se desideri rimuovere anche i caratteri {}. Per tradurre questi comandi in inglese per ricordarli meglio, prova: "cambia {blocco interno" e "cambia un {blocco".

Documentazione su http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects


"caw" può essere utilizzato al posto della stessa funzionalità "ciw".
Amjith

Mentre 'caw' e 'ciw' sostituiranno l'intera parola, semplicemente 'cw' cambierà dalla posizione corrente del cursore alla fine della parola corrente.
Drew Stephens,

Ho modificato la risposta raccontando "co {" a "ca {" come ricordato dal commento di jinxed_coders. La mia vecchia personalizzazione implementa i comandi "(a) <>" come comandi "(o) uter <>".
Kaali

19
ciwe cawnon sono esattamente la stessa cosa: ciwcancella solo la parola, cawcancella anche lo spazio finale.
Roberto Bonvallet

5
: aiuta gli oggetti in vim a leggere di più su questo tipo di selezioni.
Aaron

19

Rispondi alla tua domanda di follow-up: viwp

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

3
Come si fa più volte di seguito? Ogni volta che incolli, il buffer si riempie con la parola che ho incollato.
Ben Gartner

1
@BenGartner Trovato nel wiki di Vim Tips : usa yiwper copiare la parola corrente, posiziona il cursore sulla parola da sostituire, usa ciw<C-r>0. Dopodiché puoi posizionare il cursore sulla parola successiva e utilizzare .per ripetere la sostituzione.
siegi

@BenGartner Se tutto quello che stai cercando di fare è sostituire tutte le istanze di WORD_A con WORD_B, allora è sufficiente utilizzare del vim modalità ex, :%s/a/b/g. apuò essere un testo esatto o un'espressione regolare ed bè ciò di cui sostituirai tutte le corrispondenze a. Puoi testare le regex con la /modalità di vim . Sostituisci %con un numero di riga o un intervallo se non desideri sostituire tutte le righe.
Braden Best

8

Per la seconda domanda: bPldw

Questo, in ordine, ti porterà all'inizio della parola corrente, inserirà il registro predefinito davanti al cursore, passerà al carattere successivo (portandoti oltre la fine del testo che hai appena inserito) ed eliminerà il resto di la parola.


5
questo elimina anche lo spazio dopo la parola. Dovrebbe essere bPlde.
0x89

10
No, dovrebbe essereviwp
aehlke il

3

Per la prima domanda, bcwfunziona anche. Significa " back all'inizio della parola, change word". Ma penso che ciwsia più memorabile, che significa " change inner word", solo solo un passo.

Per la seconda domanda su "sostituire utilizzando pasta", la mia soluzione è "_diwP. Si delete inner word ad un registro che non si cura e pAste contenuti del registro di default. Un vantaggio è che puoi incollare il registro predefinito molte volte, perché non verrebbe inquinato. È un piccolo complesso quindi lo mappo come nnoremap ,r "_diwP.


2

Oppure potresti usare la sequenza di tasti bdwiper eliminare la parola corrente e passare alla modalità INSERT.


1
Puoi usare bcwper andare all'inizio della parola corrente, quindi cambiare la parola, che ti lascia in modalità di inserimento.
Hank Gay,

Se il cursore si trova già sul primo carattere della parola, ciò finirà per eliminare la parola precedente.
Warren Pena

3
@WarrenPena In tal caso, usa dwi. Fai solo attenzione che la polizia non se ne accorga, poiché DWI è illegale nella maggior parte degli stati.
Braden Best
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.