vi [m] Zeilenbereich aus einer anderen Datei lesen

9

Unter Linux file_Bmöchte ich in vim die Zeile 10-25 von hinzufügen file_A. Beispiel: Man hat eine ganze Reihe von HTML-Dokumenten mit ziemlich demselben Header und ja, man könnte eine Vorlage erstellen und von dort aus beginnen, aber immer noch:

Ich suche nach einer einfachen [und eleganten] Möglichkeit, einen Zeilenbereich aus einer Datei einzufügen und der Datei hinzuzufügen, die ich gerade bearbeite. In vim.

Die Lösungen, die ich bisher gefunden habe, aber nicht genau das sind, wonach ich suche, sind

  • Innerhalb file_B des Befehls :read file_Awird * die gesamte Datei_A * zu Datei_B hinzugefügt. Zu viel
  • Es gibt Copy & Paste in Vim - aber dafür muss man geöffnet haben file_A
  • Innerhalb von file_A :10,25w! file_Bwird der angegebene Zeilenbereich an gesendet file_B.
    Dies scheint dem Kopieren und Einfügen ziemlich nahe zu sein
  • man kann mehrere Fenster in vim öffnen
    Aber da ich auf einem 8-Zoll-Bildschirm arbeite, erschweren mehrere Fenster die Orientierung

Da ich keine bequeme Lösung finden konnte, frage ich mich, ob ich gerade etwas falsch verstanden habe oder ob die bisher gefundenen Methoden häufig verwendet und als Standardmethode verwendet werden.

erch
quelle
Siehe diese SO-Frage , @ Bernhards Antwort war auch dort die akzeptierte Antwort auf diese Frage!
slm
@slm Diese Antwort war mir bekannt, aber da ich sie nicht in die Liste der gefundenen Lösungen aufgenommen habe, danke ich Ihnen für den Hinweis. Ich bin immer noch auf der Suche nach etwas, das in mir eingebaut ist vim. Dies scheint jedoch unerreichbar. Und ich frage mich wirklich, ob dies nur durch externe Befehle erreichbar ist, denn soweit ich vimjetzt gekommen bin, bin ich bis hierher zu kleinen Einschränkungen gekommen.
Erch
@ cellar.dweller Sie könnten eine Art Funktion daraus machen, wenn Sie wirklich etwas einfacher wollen.
Bernhard

Antworten:

11

Die beste Lösung, die ich finden kann, besteht darin, dies extern anzurufen sedund zu kombinieren:read !

:r !sed -n -e '10,25p' fileB
Bernhard
quelle
Funktioniert hier nicht - aber warum? Zunächst einmal vielen Dank für Ihre Hilfe. Was ich bekomme, ist 'E34: kein vorheriger Befehl' [grob übersetzt], als ob vim versucht, einen Befehl zu wiederholen. Soweit ich es verstehe, Schritt für Schritt: :rsteht für readvim. Ich habe keine Kenntnisse darüber sedund wie man es benutzt. Natürlich habe ich durch fileBdie eigentliche Datei ersetzt :)
erch
@ cellar.dweller Meine Antwort wurde von jemandem aktualisiert, ich habe den gleichen Fehler durch diesen Code erhalten. Ich habe es zurückgerollt. Sehen Sie, ob dies für Sie funktioniert.
Bernhard
@Stephane Gut, um die Antworten zu verkürzen, aber Ihr Vorschlag hat nicht funktioniert.
Bernhard
Jetzt gehts! Um ein wenig Myslef hinzuzufügen: Wenn Sie mit :10rusw. beginnen, wird der Inhalt ab Zeile 10 in [solange dies vorhanden ist] eingefügt . Funktioniert jetzt wie ein Zauber. Toll. Vielen Dank!
Erch
2
Ups, Entschuldigung. Ich habe die Erweiterung von! Von vim vergessen. Hätte sein sollen :r!sed 10,25\!d. Beachten Sie, dass Sie weder die -enoch die Anführungszeichen benötigen , sodass Sie sie auch :r!sed -n 10,25pkurz schreiben können . :r sed '10,$\!d;25q'um das Lesen der gesamten Datei zu vermeiden.
Stéphane Chazelas