Domanda

dire Let ho il seguente testo in Vim:

file1.txt
file2.txt
file3.txt

renamed1.txt
renamed2.txt
renamed3.txt

Voglio una trasformazione nel modo seguente:

file1.txt renamed1.txt
file2.txt renamed2.txt
file3.txt renamed3.txt

Quello che ho in mente è qualcosa di simile al seguente:

:1,3 s/$/ <the text that is 4 lines below this line>

Sono bloccato con il modo di specificare la parte <the text that is 4 lines below this line>.

Ho provato qualcosa di simile .+4 (4 righe sotto la riga corrente), ma senza alcun risultato.

È stato utile?

Soluzione

Si può farlo con taglio a blocchi e incollare.

1) dell'inserto spazio all'inizio di ogni riga "rinominato", ad esempio :5,7s/^/ /

2) Uso blocco per blocco selezione visuale (ctrl-v) per selezionare tutte le linee di "file", quindi premere d per cancellarli

3) l'uso a blocchi di nuovo selezione visuale per selezionare il carattere di spazio all'inizio di tutte le linee rinominati, e premere p. Ciò incollerà la linea corrispondente dal blocco è stato eliminato al punto di partenza di ogni riga.

Altri suggerimenti

:1,3:s/\ze\n\%(.*\n\)\{3}\(.*\)/ \1

ha spiegato:

 \ze - end of replaced part of match - the string matched by the rest of the pattern will not be consumed
 \n - end of current line
 \%(.*\n\)\{3} - next 3 lines
 \(.*\) - content of 4th line from here

Questo lascerà le righe successive dove sono.

I farebbe una macro per questo davvero. Eliminare la riga in basso, spostarsi verso l'alto, incollare, linee Join, quindi eseguire la macro sugli altri. L'altro metodo penso che sarebbe appropriato è uno script separato per agire come un filtro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top