elimina la parola dopo o attorno al cursore in VIM


212

Passo ora a VIMTextMate. Ho trovato ^+Wmolto utile la modalità INSERT. Tuttavia, vorrei eliminare non solo la parola prima del cursore, ma anche la parola dopo o intorno al cursore.

Ho cercato su Google, ma l'unica cosa che ho trovato è stato ^+Wcancellare la parola PRIMA del cursore.

Risposte:


78

Quello che dovresti fare è creare un imap di una determinata chiave per una serie di comandi, in questo caso i comandi ti lasceranno in modalità normale, elimineranno la parola corrente e poi ti rimetteranno in insert:

:imap <C-d> <C-[>diwi

29
": h diw" per molti utili ritratti!
klokop,

12
Punti bonus bonus per l'utilizzo di <Co>. Esegue un comando in modalità Normale e torna direttamente a Inserisci, quindi imap <C-d> <C-o>diwfunziona anche qualcosa di simile . Inoltre non crea un punto di annullamento, cosa che <Esc> praticamente fa sempre.
zelk,

<Co> in modalità inserimento ha reso la mia giornata :)
Lusk116 il

541

Modalità normale:

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

125
È utile per me pensarlo come daw: cancellare una parola e caw: cambiare una parola.
welbornio,

1
Dio che ho usato da)e ci)non ci ho mai pensato!
Sky

1
Quello è oro Jerry! ORO! Ho mappato quei bambini sul mio .vimrcfile in questo modo: nmap <Leader>d daw enmap <Leader>c caw
racl101 il

1
Probabilmente vale la pena ricordare che awè un esempio di selezione di oggetti. Puoi provare la selezione degli oggetti in modalità visiva per vedere quale effetto hanno: vimdoc.sourceforge.net/htmldoc/motion.html#object-select
crantok

103

Penso che sia giusto daw

daw - delete a word

1
So che aè un comando per Append text after the cursor [count] times.ma come dawfunziona?
syntagma,

3
@REACHUS il carattere iniziale dimpone che stai "cancellando". 'A' è un tipo di parametro, che specifica che la cancellazione deve includere un delimitatore. Alla fine la 'w', un'altra parameter- se vuoi - specifica che wordun'unità verrà eliminata.
vlad-ardelean,

2
qual è la differenza tra dwe daw?
AK_13

5
@AK_ Risposta tardiva, ma se sei nel mezzo di una parola, dweliminerà dal cursore alla fine della parola, mentre daweliminerà l'intera parola insieme a uno spazio. diweliminerà l'intera parola senza toccare spazi bianchi attorno ad essa.
Dmiters il

67

Quanto segue funziona per la modalità Normale: concordo con la risposta di Dan Olson che probabilmente dovresti essere in modalità normale per la maggior parte delle eliminazioni. Maggiori dettagli di seguito.

Se il cursore si trova all'interno della parola:
diweliminare nella parola (non include gli spazi)
dawper eliminare intorno alla parola (include gli spazi prima della parola successiva).

Se il cursore si trova all'inizio della parola, basta premere dw.

Questo può essere moltiplicato aggiungendo i soliti numeri per il movimento, ad esempio 2w per avanzare di 2 parole, quindi d2w cancella due parole.

Modalità
inserimento ^ w L'idea di usare hjkl per il movimento in Vim è che è più produttivo tenere le mani sulla fila di casa. Alla fine di una parola ^ w funziona alla grande per eliminare rapidamente la parola. Se sei entrato in modalità inserimento, hai inserito del testo e hai usato i tasti freccia per finire nel mezzo della parola che sei andato contro la filosofia della riga iniziale.
Se sei in modalità normale e vuoi cambiare la parola, puoi semplicemente usare c(cambia) piuttosto che d(eliminare) se desideri cambiare completamente la parola e accedere nuovamente alla modalità di inserimento senza dover premere iper tornare indietro alla digitazione.


42

Vuoi dire come?

dw

10
In ritardo alla festa, ma dw eliminerà dalla posizione corrente alla fine della parola, per eliminare l'intera parola dall'inizio usa diw o daw
Dvid Silva,

1
dwnon cancellerà oltre un trattino o altra punteggiatura.
ccpizza,

* Nota: questo sovrascriverà buffer / ultimo yank. Si tratta più di un'operazione "Taglia", non solo di "Elimina".
MD. Mohiuddin Ahmed,

23

Per eliminare tutti i caratteri tra due spazi bianchi, in modalità normale:

daW

Per eliminare solo una parola:

daw 

20

Non sembra che ci sia un modo integrato per farlo in modalità inserimento, che era la domanda. Alcune delle altre risposte sono corrette per la modalità normale, oltre a sottolineare che è possibile creare una mappatura personalizzata per aggiungere la funzionalità nella modalità di inserimento.

Onestamente, dovresti probabilmente eseguire la maggior parte delle tue eliminazioni in modalità normale. ^ W è carino da sapere ma non sono sicuro di poter pensare a una situazione in cui preferirei farlo piuttosto che esc per passare alla modalità normale e avere i più potenti comandi di cancellazione a mia disposizione.

Vim è molto diverso da molti altri editor (incluso TextMate) in questo modo. Se lo stai usando in modo produttivo, probabilmente scoprirai che non passi molto tempo in modalità inserimento.


1
Uso ^ wa molto, soprattutto quando digito male una parola - invece di tornare indietro e aggiungere la lettera mancante / ecc., Elimino tutto e ricomincio .. Andare in modalità normale solo per eliminare una parola sembra uno spreco di alcuni tasti. Ad esempio, "esempio wrd [^ w] word" è meno tasti di "esempio wrd [^ c] [dw] [i] word"
dbr

1
dbr: Non stava chiedendo di fare il comportamento di base ^ W, che vim supporta. Stava chiedendo di eliminare tutta una parola mentre era nel mezzo mentre era in modalità insert, che è una specie di strana situazione per Vim e quindi non c'è alcun comando per farlo. È sempre possibile associare ^ Q a <Esc> ciw se si desidera veramente la funzionalità. Oh, anche [i] in [^ c] [dw] [i] è ridondante, puoi usare [^ c] [ciw]
bfabry

4
"Non sembra che ci sia un modo ..." - beh, ci sono innumerevoli modi per farlo - non esiste un modo integrato , ahimè. Mentre sono pienamente d'accordo con l'affermazione di Dan sulla modalità di inserimento rispetto alla modalità normale, puoi ovviamente semplicemente definire una mappatura della modalità di inserimento, vedi ": aiuto imap" che fa tutto ciò che vuoi ottenere se hai davvero bisogno della funzionalità nella modalità di inserimento.
user55400,

13

Per eliminare l'intera parola su cui si trova il cursore, utilizzare diw
Per eliminare l'intera parola su cui si trova il cursore e per metterti in modalità inserimento, utilizzare ciw
se non si desidera eliminare l'intera parola ma eliminare da dove si èdw/cw


8

Dal momento che ci sono molti modi per eliminare una parola, illustriamoli.

Supponendo che tu modifichi:

foo-bar quux

e invoca un comando mentre il cursore si trova sulla barra "a" in ":

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

La modalità di inserimento non ha tale comando, sfortunatamente. In VIM, per eliminare l'intera parola sotto il cursore è possibile digitare viwdin modalità NORMALE. Il che significa " V isual-block I nner W ord D elete". Usa una maiuscola Wper includere la punteggiatura.


3

La risposta accettata non riesce quando si tenta di ripetere l'eliminazione delle parole, provare invece questa soluzione:

" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw

Mappa CTRL-BackSpace, funzionando anche in modalità normale.


Mi piace questa risposta meglio solo perché funziona anche in modalità normale.
sivabudh,

2

Per cancellare un certo numero di caratteri prima del cursore, puoi usare X. Per cancellare un certo numero di parole dopo il cursore, puoi usare dw (ad esempio , è possibile eliminare più parole usando 3dw per 3 parole). Per cancellare attorno al cursore in generale, puoi usare daw.


2

Nella vecchia vi, bsposta il cursore all'inizio della parola prima del cursore, wsposta il cursore all'inizio della parola dopo il cursore, esposta il cursore alla fine della parola dopo il cursore edw elimina dal cursore alla fine della parola.

Se si digita wbdw, si elimina la parola attorno al cursore, anche se il cursore si trova all'inizio o alla fine della parola. Si noti che gli spazi bianchi dopo una parola sono considerati parte della parola da eliminare.


2

Non sei sicuro del tuo utilizzo di "prima" e "dopo", ma hai provato

dw

?

Modifica: immagino che tu stia cercando qualcosa da usare in modalità inserimento. Stranamente, non c'è niente da trovare nei documenti, ctrl-w sembra essere tutto ciò che c'è.


2

Ho creato due mappature per ottenere coerenza in modalità insert e out of insert.

:map <'Key of your choice'> caw

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


0

Vorrei eliminare non solo la parola prima del cursore, ma anche la parola dopo o intorno al cursore.

In tal caso, la soluzione proposta dall'OP (ovvero l'utilizzo <c-w>) può essere combinata con la risposta accettata per fornire:

inoremap <c-d> <c-o>daw<c-w>

in alternativa (soluzione più breve):

inoremap <c-d> <c-o>vawobd

Input di esempio:

word1 word2 word3 word4
               ^------------- Cursor location

Produzione:

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