Come strappare una particolare linea senza spostare il cursore in VIM?


40

Per esempio

testo alternativo

Come posso strappare e incollare la Linea 4 solo sulla Linea 12 senza dover spostare il cursore sulla Linea 4?

testo alternativo


Ho risposto alla tua domanda basandomi sul fatto che "tirami!" è sulla linea 4. Nella seconda schermata, appare sulla linea 5.
Louis Salin,

Grazie @Louis per la risposta. Ho aggiornato lo screenshot.
Lazer,

Risposte:


52

Se il cursore è già sulla riga 12, quindi un semplice

: 4y
P

lo fa per me.


1
Bello! C'è un equivalente per x? Quando provo :4xottengo E140: Use ! to write partial buffer. Grazie!
dotancohen,

Devo dire che è incredibile: D
nXqd

@dotancohen:4d
n.

C'è un buon modo per farlo con il numero di riga relativo?
TrungDQ,

Con i numeri relativi basta usare + e -. Quindi -4 è quattro righe sopra il cursore e +4 è quattro righe sotto di esso.
rickythefox,

10

Che ne dici di questo: il cursore è sulla linea 11, sei in modalità "vi".

:4co.<return>

Apparentemente puoi farlo anche con uno schema:

:/^Yank/co.<return>

Puoi usare "mo" (sposta) invece di "co" (copia) per spostare semplicemente la linea, invece di yank e put.


1
Ancora più breve ( t come comando di copia è un :4t.
residuo di


8

Provare:

:4co11

È possibile utilizzare un argomento 0per incollare alla riga 1. Questo funzionerà anche con intervalli:

:m,n co k

copierà linee mattraverso nla linea k+1. Inoltre, non importa dove ti trovi nel buffer. Il movecomando mfunziona in modo simile.


2

Questo dovrebbe farlo:

:4,12y
p
k

1
No, che strappa i numeri di linea da 4 a 12.
Lazer,

Intendevo copiare e incollare la linea 4, alla linea 12.
Lazer,

Modificato. Questo è quello che volevi?
Umang,

2

Altri hanno già menzionato il metodo più diretto per farlo, che è :4y, ma voglio aggiungere due note a riguardo che potrebbero essere utili:

Uno, se digiti :help range, imparerai tutto sull'uso degli intervalli da applicare ai comandi di stile Ex. MOLTO utile in molti casi e molto più versatile rispetto all'utilizzo dei numeri di riga. Ad esempio, se si desidera strappare la prima riga che inizia con "yank" dopo l'inizio del documento (anche se si trova sulla prima riga), utilizzare :0/^yank/y. La parte più potente degli intervalli è la possibilità di combinarli, ad esempio :./^Chapter/+50?Pete?dsignifica "Trova la riga successiva per iniziare con la parola Chapter (ricerca in avanti dalla riga corrente), quindi saltare in avanti di 50 righe e cercare all'indietro la parola Pete, ed elimina la prima riga in cui la trovi. " Solo che in realtà non sposta il cursore, fa solo quello che gli dici.

(Ho usato questo tipo di specifica di intervallo per automatizzare la creazione di documentazione complicata che implica la ricerca del nome della funzione sotto il cursore, quindi la ricerca della riga successiva che diceva "Descrizione" e lo trascinavo in un registro specifico ... ecc.)

L'altro consiglio è che dovresti sapere sul salto. Digita :help jump-motionsper conoscerlo a fondo, ma il modo in cui si collega qui è che puoi saltare alla linea 4, strattonarlo e poi INVIO con 4Gyy''(o usare i backtick anziché gli apostrofi per tornare alla tua posizione iniziale esatta, piuttosto che solo la stessa LINEA hai iniziato a.)


2

Più breve:

:1t. copia la prima riga sotto la corrente.

Con intervalli: :1,4t.copia le righe da 1 a 4 (incluse) al di sotto della corrente.

Possibile anche con numeri di riga relativi:

:-1t. copia la riga precedente sotto la corrente.

Nel tuo esempio :4t-1, copia la quarta riga sotto la riga desiderata.

Nota: :tè sinonimo del :co[py]comando.

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.