Gibt es in vi(m) eine Möglichkeit, eine bestimmte Zeile in einer Datei für eine Zeichenfolgenersetzung auszuwählen?
Ich muss häufig SSL-SHA-Fingerabdrücke von Webservern zu meiner Mercurial .hgrc hinzufügen. Ich kann die erforderliche Signatur ganz einfach von Chrome abrufen, indem ich auf das Vorhängeschloss doppelklicke und mir die Zertifikatsdetails ansehe, aber ich erhalte die Signatur mit Leerzeichen als Trennzeichen und nicht mit den von Mercurial gewünschten Doppelpunkten als Trennzeichen.
06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90
Beispiel ausGoogle Code.
Gibt es eine Möglichkeit:
- Kopiere den besagten Fingerabdruck in meine Zwischenablage
- Meine .hgrc mit vi(m) bearbeiten
- Wechseln Sie in den Einfügemodus, um den Fingerabdruck einzufügen
Zielen Sie genau auf diese Linie mit einem
:s/ /:/g
Speicher die Datei
Im Moment kann ich den Fingerabdruck in eine neue Datei einfügen, die Ersetzung vornehmen und ihn mit einem:r Dateiname, aber das ist ein zusätzlicher Schritt, den ich gerne überspringen würde.
Antwort1
Herausgefunden:
Bewegen Sie den Cursor auf die Zeile, die Sie ändern möchten, und gehen Sie wie folgt vor:
.s/ /:/g
Der „.“ vor dem Ersetzungsbefehl teilt vi(m) mit, dass Sie nur die aktuelle Zeile ändern möchten.
Referenz:http://www.kingcomputerservices.com/unix_101/search_and_replace_with_vi_part_1.htm
Antwort2
Wenn Sie es nach Zeile N einfügen möchten:
:N put =substitute(@+, ' ', '', 'g')
Dateiende: N=$; Dateienanfang: N=0. @+ ist das Zwischenablageregister (wenn die GUI ausgeführt wird).
Antwort3
Einfach, :s/ /:/g
reicht völlig aus.
Der :substitute
Befehl funktioniert standardmäßig nur in der aktuellen Zeile.
Der /g
globale Modifikator bedeutet, dass alle Übereinstimmungen im angegebenen Bereich ersetzt werden, nicht die gesamte Datei.)
Antwort4
willst du das tun?
echo "06 32 1C C5 8A 49 77 85 C5 89 6F 67 75 96 F0 43 77 96 EB 90" >> <filename>