vi [m] legge l'intervallo di righe da un altro file


9

Su Linux, modificando file_Bin vim voglio aggiungere la riga 10-25 da file_A. Esempio: uno ha un intero set di documenti HTML con la stessa intestazione e sì, si potrebbe creare un modello e iniziare da lì, ma comunque:

Sto cercando un modo semplice [ed elegante] per inserire un intervallo di righe da un file e aggiungerlo al file che sto attualmente modificando. In vim.

Le soluzioni che ho trovato finora, ma non sono esattamente quello che sto cercando, lo sono

  • all'interno file_B del comando :read file_Aaggiungerà * l'intero file_A * in file_B. Troppo
  • c'è copia e incolla all'interno di vim - ma per questo deve essere stato aperto file_A
  • all'interno di file_A :10,25w! file_B"invierà" l'intervallo di righe indicato file_B.
    Questo sembra abbastanza vicino a copiare e incollare
  • si possono aprire più finestre in vim
    Ma mentre lavoro su uno schermo da 8 pollici, più finestre rendono difficile l'orientamento

Poiché non sono riuscito a trovare una soluzione comoda, mi chiedo se ho semplicemente frainteso qualcosa o i modi che ho trovato finora sono comunemente usati e presi come standard.


Vedi questa domanda SO , la risposta di @ Bernhard è stata la risposta accettata a quella domanda anche lì!
slm

@slm Ero a conoscenza di questa risposta, ma poiché non l'ho inserita nell'elenco di soluzioni che ho trovato, grazie per il suggerimento. Sto ancora cercando qualcosa costruito dentro vim. Ma questo sembra fuori portata. E mi chiedo davvero se ciò sia realizzabile solo tramite comandi esterni, perché fin vimqui sono arrivato a poche restrizioni.
erch

@ cellar.dweller Potresti farne una sorta di funzione, se davvero vuoi qualcosa di più semplice.
Bernhard,

Risposte:


11

La migliore soluzione che mi viene in mente è quella di chiamare esternamente sede combinarlo con:read !

:r !sed -n -e '10,25p' fileB

Non funziona qui, ma perché? Innanzitutto, grazie per il tuo aiuto. Quello che ottengo è "E34: nessun comando precedente" [tradotto approssimativamente] come se vim tentasse di ripetere un comando. Per quanto ne capisco, passo dopo passo: :rè l'abbreviazione di readvim. Non ho conoscenza sede come usarlo. Naturalmente, ho sostituito fileBcon il file effettivo :)
erch

@ cellar.dweller La mia risposta è stata aggiornata da qualcuno, ho ricevuto lo stesso errore da quel codice. L'ho riavvolto. Vedi se questo funziona per te.
Bernhard,

@Stephane Buono per abbreviare le risposte, ma il tuo suggerimento non ha funzionato.
Bernhard,

Ora funziona! Per aggiungere un po 'di mistero: a partire da :10recc. Posizionerà il contenuto della riga dieci su [finché esiste]. Funziona come un fascino ora. Grande. Molte grazie!
Erch

2
Oops scusa. Dimenticato l'espansione di Vim di!. Avrei dovuto :r!sed 10,25\!d. Nota che non hai bisogno delle -evirgolette o, quindi puoi scriverlo anche :r!sed -n 10,25pin breve. :r sed '10,$\!d;25q'per evitare di leggere l'intero file.
Stéphane Chazelas il
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.