Elimina dal cursore alla fine della riga su VI


302

So di averlo probabilmente esaminato un milione di volte in tutti i documenti VI che ho letto, ma non riesco a trovare l'eliminazione dal cursore al comando di fine riga.


3
Hai un refuso qui - dici "fine linea" nel titolo, ma "fine parola" nella domanda.
Cascabel,

Risposte:


450

Il comando dweliminerà dalla posizione corrente del cursore all'inizio del carattere della parola successiva. Il comando d$(nota che è un simbolo di dollaro, non una "S") verrà eliminato dalla posizione corrente del cursore alla fine della riga corrente. Dè sinonimo di d$.


Sì, lo so dw, ma immagino di aver appena pensato che ci sarebbe stato un comando "elimina il resto di questa riga". Per esempio la mia linea ha ip=|10.1.1.1con |essendo la posizione del cursore. C'è un comando che cancellerà tutto 10.1.1.1?
Falmarri,

3
@Falmarri - Chiedo scusa, devo aver frainteso la tua domanda. C'è un comando per questo:d$
Tok il

84
D (Maiusc + d) è anche sinonimo di d $.
Neth,

5
@Andy, il lavoro è quello di eliminare dal cursore fino alla fine della riga. Se consideri di eliminare più di questo come "fare il lavoro", potresti anche semplicemente usare :!rm -f %e quindi :q!. Ciò elimina l'intero file.
Wildcard il

2
@Amir Basta usare d^('d' + caret) ... praticamente d + qualsiasi personaggio che normalmente sposterebbe il cursore, penso, ma sto imparando Vim me stesso, quindi potrei sbagliarmi.
JakeD,

41

Come altri hanno già detto: è possibile utilizzare d$o D( shift- d) per eliminare dalla posizione del cursore fino alla fine della riga.

Quello che in genere trovo più utile è c$o C( shift- c) perché eliminerà dalla posizione del cursore fino alla fine della riga e vi metterà in modalità [INSERIRE].


2
SIMPATICO!!! Questo è molto meglio che Dper la maggior parte delle persone, secondo me, in quanto non ti sposta indietro di uno spazio alla fine della linea.
Elijah Lynn

Perché questa risposta è nascosta fin qui? Questa è la funzionalità che stavo davvero cercando quando sono venuto qui.
M_M,

@ElijahLynn non dovrebbe essere comunque un problema. Vim ha due modi principali per accedere alla modalità di inserimento iche si inserisce prima del cursore e ache si inserisce dopo il cursore. Se il cursore si trova alla fine della riga e si desidera inserire alla fine della riga, è possibile utilizzare solo a.
Lie Ryan,

1
L'obiettivo è farlo in una sola operazione, non due. Tratti chiave extra = attrito extra.
Elijah Lynn il

36

Una delle cose belle di vi è la sua struttura di comando logica. dseguito da un comando di movimento d eletes al target di tale movimento. $si sposta alla fine della linea (mnemonico: come in regexps). Quindi d$cancella fino alla fine della linea. Allo stesso modo, esi muove al di posta ND della parola corrente, e wmosse per l'inizio del prossimo w ord; quindi deelimina la fine della parola corrente e dwinoltre elimina i seguenti spazi bianchi.


1
@gioele lo uso <kbd>per i tasti effettivi, non per le sequenze di comandi. Ad esempio <kbd>Ctrl</kbd>+<kbd>C</kbd>, ma d$.
Gilles,

@Gilles Hai ragione. Ho appena provato d ^ ed è stato eliminato dalla posizione del cursore all'inizio della riga.
Ka3ak,

Ho sempre usato (d) elete (a) (w) ord per cancellare parole :)
Błażej Michalik,

20

Probabilmente vuoi usare D. Sposta il cursore sul primo carattere che vuoi eliminare, quindi premi maiusc-D. Tutto finito. In realtà, si trova nel buffer di taglio predefinito, quindi è possibile incollarlo nuovamente.

Uso Dp (elimino alla fine della riga, quindi lo rimetto), mi sposto alla fine di un'altra riga, quindi p di nuovo per incollare lo stesso testo alla fine di questa altra riga. Funziona a meraviglia nei file di configurazione, in cui è necessario inserire alcuni URL complicati in due o più posizioni.


Probabilmente è un Vim minimale che usa comunque.
polemon

0

Penso che una scorciatoia in modalità inserimento possa tornare utile.

In modalità insert forse sarebbe meglio iniziare a cambiare fino alla fine della riga (mettilo sul tuo ~/.vimrc):

inoremap <C-l> <C-o>C

Quindi, come è stato detto, Din modalità normale e Ctrl+ lin modalità inserimento. Come puoi vedere, hai anche Ciniziato a cambiare fino alla fine della riga.

<C-o> ......... insert normal keystroke in insert mode

Ho scelto Ctrl- lperché lè sotto le tue dita. Il Ctrl- kè già usato per inserire digraph.

Ho cercato :h i_Ctrlalcune combinazioni di tasti gratuite, ed è in realtà il problema più grande quando si tratta di creare nuove scorciatoie per eseguire azioni in vim.


0

Per eliminare un intervallo di righe da dopo la posizione del cursore, 3Dverrà eliminato dal cursore fino alla fine della riga, così come le due righe successive completamente (ovvero, elimina 3 righe dopo la posizione del cursore).

ad es. per il seguente testo (cursore rappresentato come |),

If there's a cursor |in the line
here
we
go

Utilizzando il comando 3Dverrà emesso:

If there's a cursor
go
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.