Unter Linux file_B
mö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_A
wird * 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_B
wird der angegebene Zeilenbereich an gesendetfile_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.
linux
vim
copy-paste
erch
quelle
quelle
vim
. Dies scheint jedoch unerreichbar. Und ich frage mich wirklich, ob dies nur durch externe Befehle erreichbar ist, denn soweit ichvim
jetzt gekommen bin, bin ich bis hierher zu kleinen Einschränkungen gekommen.Antworten:
Die beste Lösung, die ich finden kann, besteht darin, dies extern anzurufen
sed
und zu kombinieren:read !
quelle
:r
steht fürread
vim. Ich habe keine Kenntnisse darübersed
und wie man es benutzt. Natürlich habe ich durchfileB
die eigentliche Datei ersetzt :):10r
usw. beginnen, wird der Inhalt ab Zeile 10 in [solange dies vorhanden ist] eingefügt . Funktioniert jetzt wie ein Zauber. Toll. Vielen Dank!:r!sed 10,25\!d
. Beachten Sie, dass Sie weder die-e
noch die Anführungszeichen benötigen , sodass Sie sie auch:r!sed -n 10,25p
kurz schreiben können .:r sed '10,$\!d;25q'
um das Lesen der gesamten Datei zu vermeiden.