it-swarm.com.de

Wie verwende ich VIM-Register?

Ich weiß nur, dass eine Instanz, die Register verwendet, über ist CtrlR* wobei ich text aus einer zwischenablage einfüge.

Was sind andere Verwendungen von Registern? Wie benutzt man sie?

Alles, was Sie über VI-Register wissen (konzentrieren wir uns auf vi 7.2) - teilen Sie es uns mit.

887
vehomzzz

Mit Registern in Vim können Sie Aktionen oder Befehle für darin gespeicherten Text ausführen. Um auf ein Register zuzugreifen, geben Sie "a vor einem Befehl ein, wobei a der Name eines Registers ist. Wenn Sie die aktuelle Zeile in das Register k kopieren möchten, können Sie Folgendes eingeben

"kyy

Oder Sie können anhängen mit einem Großbuchstaben an ein Register anhängen

"Kyy

Sie können sich dann durch das Dokument bewegen und es mit an anderer Stelle einfügen

"kp

Einfügen aus der System-Zwischenablage unter Linux

"+ p

So fügen Sie aus der Systemzwischenablage unter Windows (oder aus der Zwischenablage "Mausmarkierung" unter Linux) ein

"* p

Um auf alle derzeit definierten Register zuzugreifen, geben Sie Folgendes ein

: reg

1123
FModa3

Ich freute mich, als ich das 0 - Register entdeckte. Wenn Sie Text ziehen, ohne ihn einem bestimmten Register zuzuweisen, wird er dem Register 0 Zugewiesen und im Standardregister " Gespeichert. Der Unterschied zwischen den Registern 0 Und " Besteht darin, dass 0 Nur mit Text in Yank-Form gefüllt ist, während das Standardregister auch mit Text gefüllt ist, der mit d gelöscht wurde./D/x/X/c/C/s/S .

Ich finde dies nützlich, wenn ich einen Text kopieren, etwas löschen und durch den kopierten Text ersetzen möchte. Die folgenden Schritte veranschaulichen ein Beispiel:

  • Ziehen Sie den zu kopierenden Text mit y[motion] Herunter - dieser Text wird in den Registern " Und 0 Gespeichert
  • Löschen Sie den Text, den Sie durch d[motion] Ersetzen möchten - dieser Text wird im Register " Gespeichert
  • Fügen Sie den gezogenen Text mit "0p Ein.

dabei ist " der Befehl, mit dem ein Register für den nächsten Befehl verwendet wird.

Wenn Sie im letzten Schritt aus dem Standardregister einfügen (mit p), wird der gerade gelöschte Text verwendet (wahrscheinlich nicht das, was Sie beabsichtigt haben).

Beachten Sie, dass p oder P aus dem Standardregister eingefügt werden. Das Longhand-Äquivalent wäre ""p (Oder ""P) Und "0 Enthält den letzten Ruck, "1 Enthält das letzte Löschen oder Ändern.

Weitere Informationen finden Sie unter :help registers .

743
nelstrom

Einer meiner Lieblingsteile über Register ist, sie als Makros zu verwenden!

Angenommen, Sie haben es mit einer durch Tabulatoren getrennten Wertedatei zu tun:

ID  Df  %Dev    Lambda
1   0   0.000000    0.313682
2   1   0.023113    0.304332
3   1   0.044869    0.295261
4   1   0.065347    0.286460
5   1   0.084623    0.277922
6   1   0.102767    0.269638
7   1   0.119845    0.261601

Jetzt entscheiden Sie, dass Sie am Ende des Felds% Dev (ab der 2. Zeile) ein Prozentzeichen hinzufügen müssen. Wir erstellen ein einfaches Makro im (willkürlich ausgewählten) m -Register wie folgt:

  1. Drücken Sie: qm: Zum Starten der Makroaufnahme unter m registrieren.

  2. EE: Gehen Sie zum Ende der 3. Spalte.

  3. a: Einfügemodus zum Anhängen an das Ende dieser Spalte.

  4. %: Geben Sie das Prozentzeichen ein, das hinzugefügt werden soll.

  5. <ESC>: Kehrt in den Befehlsmodus zurück.

  6. j0: Zum Anfang der nächsten Zeile springen.

  7. q: Stoppt die Makroaufnahme

Wir können jetzt einfach @m eingeben, um dieses Makro in der aktuellen Zeile auszuführen. Außerdem können wir @@ eingeben, um dies zu wiederholen, oder [email protected], um dies 100 Mal zu tun! Das Leben sieht ziemlich gut aus.

An dieser Stelle sollten Sie sagen: "ABER WARTEN SIE, WAS HAT DAS MIT REGISTERN ZU TUN??"

Hervorragender Punkt. Untersuchen wir den Inhalt des Registers m, indem wir "mp eingeben. Wir bekommen dann folgendes:

EEa%<ESC>j0

Zunächst sieht es so aus, als hätten Sie versehentlich eine Binärdatei im Editor geöffnet, aber auf den zweiten Blick es ist die genaue Zeichenfolge in unserem Makro!

Sie sind ein neugieriger Mensch, also lassen Sie uns etwas Interessantes tun und diese Textzeile bearbeiten, um einen ! einzufügen, anstatt den alten % zu langweilen.

EEa!<ESC>j0

Dann ziehen wir dies in das n -Register, indem wir B"nyE eingeben. Führen Sie dann, nur zum Spaß, das Makro n in einer Zeile unserer Daten mit @n.... aus.

OMG, ES HAT EINEN ! HINZUGEFÜGT

Das Ausführen eines Makros entspricht im Wesentlichen dem Drücken der genauen Tastenfolge im Register dieses Makros. Wenn das kein cooler Registertrick ist, esse ich meinen Hut.

315
Francisco

Andere nützliche Register:

"* oder "+ - der Inhalt der Systemzwischenablage

"/ - letzter Suchbefehl

": - letzter Befehl.

Beachten Sie, dass Sie mit vim-Makros diese bearbeiten können, da es sich nur um eine Liste der Tastenanschläge handelt, die beim Aufzeichnen des Makros verwendet werden. Sie können also das Makro in eine Textdatei schreiben (mit "ap Makro schreiben a) und sie bearbeiten und mit "ay$ in ein Register laden. Gute Möglichkeit, nützliche Makros zu speichern.

96
Anthony Roy

Das Schwarzes Loch Register_ ist der /dev/null der Register.

Ich verwende es in meinem vimrc, um das Löschen einzelner Zeichen zu ermöglichen, ohne das Standardregister zu aktualisieren:

noremap x "_x

und im visuellen Modus einfügen, ohne das Standardregister zu aktualisieren:

vnoremap p "_dP
72
mrucci

Wenn Sie den Inhalt des Registers jemals in einen Ex-Modus-Befehl einfügen möchten, drücken Sie <C-r><registerletter>.

Warum würdest du das benutzen? Ich wollte eine lange Zeichenfolge suchen und ersetzen, also habe ich sie im visuellen Modus ausgewählt, angefangen, den Such-/Ersetzungsausdruck :%s/[PASTE YANKED PHRASE]//g auszutippen, und war an meinem Tag.

Wenn Sie nur ein einzelnes Wort im Ex-Modus einfügen möchten, müssen Sie sicherstellen, dass sich der Cursor darauf befindet, bevor Sie in den Ex-Modus wechseln. Drücken Sie dann im Ex-Modus die Taste <C-r><C-w>, um das Wort einzufügen.

51
agscala

Ich denke, das geheime Guru-Register ist der Ausdruck = Register. Es kann für kreative Zuordnungen verwendet werden.

:inoremap  \d The current date <c-r>=system("date")<cr>

Sie können es wie oben beschrieben in Verbindung mit Ihrem System verwenden oder Antworten von benutzerdefinierten VimL-Funktionen usw. erhalten.

oder einfach nur Ad-hoc-Sachen wie

<c-r>=35+7<cr>
42
michael

Ein cooler Trick ist, "1p zum Einfügen der letzten Löschung/Änderung zu verwenden (und dann . zum wiederholten Einfügen der nachfolgenden Löschungen zu verwenden. Mit anderen Worten, "1p... entspricht im Wesentlichen "1p"2p"3p"4p.

Sie können dies verwenden, um eine Handvoll Zeilen in umgekehrter Reihenfolge anzuordnen: dddddddddd"1p....

37
naught101

Auf der Hilfeseite von vim:

CTRL-R {0-9a-z"%#:-=.}                  *c_CTRL-R* *c_<C-R>*
        Insert the contents of a numbered or named register.  Between
        typing CTRL-R and the second character '"' will be displayed
        <...snip...>
        Special registers:
            '"' the unnamed register, containing the text of
                the last delete or yank
            '%' the current file name
            '#' the alternate file name
            '*' the clipboard contents (X11: primary selection)
            '+' the clipboard contents
            '/' the last search pattern
            ':' the last command-line
            '-' the last small (less than a line) delete
            '.' the last inserted text
                            *c_CTRL-R_=*
            '=' the expression register: you are prompted to
                enter an expression (see |expression|)
                (doesn't work at the expression Prompt; some
                things such as changing the buffer or current
                window are not allowed to avoid side effects)
                When the result is a |List| the items are used
                as lines.  They can have line breaks inside
                too.
                When the result is a Float it's automatically
                converted to a String.
        See |registers| about registers.  {not in Vi}
        <...snip...>
18
Brian
  • q5 zeichnet Änderungen in Register 5 auf (nächstes q stoppt die Aufnahme)
  • : reg zeigt alle Register und deren Inhalt an
  • @ 5 Makro von Register 5 ausführen (aufgezeichnete Änderungen)
16
fpmurphy

Ich verwende das Standardregister, um in meinem VIM-Fenster nach Text zu suchen, ohne nach der Maus greifen zu müssen.

  1. reißen Text
  2. :!grep "<CTRL-R>0"<CR>
14
Matt Mendell

Verwenden Sie Register in Befehlen mit @. Z.B.:

echo @a
echo @0
echo @+

Setze sie in Befehl:

let @a = 'abc'

Jetzt wird "apabc einfügen.

Eine große Verwirrungsquelle ist das Standardregister ". Es ist wichtig zu wissen, wie es funktioniert. Es ist viel besser, wenn das Standardregister die meiste Zeit vermieden wird. Die Erklärung aus der Vim-Dokumentation:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

Das Standardregister ist also eigentlich ein Zeiger auf das zuletzt verwendete Register. Wenn Sie etwas löschen oder reißen, zeigt dieses Register auf andere Register. Sie können dies testen, indem Sie die Register überprüfen. Es gibt immer ein anderes Register, das genau dem Standardregister entspricht: das Yank-Register ("0), das erste Löschregister ("1), ein kleines Löschregister ("-) oder ein beliebiges anderes Register, das zum Löschen oder Ziehen verwendet wurde.

Die einzige Ausnahme ist das Black-Hole-Register. Vim doc sagt:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

Normalerweise sind Sie viel besser dran, wenn Sie direkt: "0, "- und "1-"9 Standardregister oder benannte Register verwenden.

8
Catalin Ciurea

Ein übersehenes Register ist das '.' Punktregister, das den zuletzt eingefügten Text enthält, egal wie er eingefügt wurde, zB ct] (ändern bis]). Dann stellen Sie fest, dass Sie es an einer anderen Stelle einfügen müssen, aber die Punktwiederholungsmethode nicht verwenden können.

 :reg .
 :%s/fred/<C-R>./
7
zzapper

Mein Lieblingsregister ist das Register ':'. Das Ausführen von @: im normalen Modus ermöglicht es mir, den zuvor ausgeführten ex-Befehl zu wiederholen.

4
siu

Mein Freund Brian hat einen ausführlichen Artikel dazu geschrieben. Ich denke, es ist eine großartige Einführung in die Verwendung von Themen. https://www.brianstorti.com/vim-registers/

1
Madis Nõmme