Frage Wie verwende ich Vim-Register?


Ich weiß nur von einer Instanz mit Registern ist via StrgR* wodurch ich Text aus einer Zwischenablage einfügen kann.

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

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


824
2017-09-30 13:12


Ursprung


Antworten:


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

"kyy

Oder du kannst anhängen zu einem Register mit einem Großbuchstaben

"Kyy

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

"kp

Einfügen aus der System-Zwischenablage unter Linux

"+ p

Einfügen aus der System-Zwischenablage unter Windows (oder von der Maus-Zwischenablage unter Linux)

"* p

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

: reg


1035
2017-09-30 13:17



Ich habe mich gefreut, als ich das entdeckt habe 0 registrieren. Wenn Sie Text verwerfen, ohne ihn einem bestimmten Register zuzuweisen, wird er dem zugewiesen 0 registrieren, sowie im Standard gespeichert werden " registrieren. Der Unterschied zwischen den 0 und " Register ist das 0 wird nur mit gerissenem Text gefüllt, während das Standardregister auch mit gelöschtem Text gefüllt wird d/D/x/X/c/C/s/S Befehle.

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

  • Kopieren Sie den Text, mit dem Sie kopieren möchten y[motion] - Dieser Text wird gespeichert in " und 0 Register
  • Löschen Sie den Text, den Sie ersetzen möchten d[motion] - Dieser Text wird gespeichert in " registrieren
  • Fügen Sie den gerippten Text mit ein "0p

woher " ist der Befehl, ein Register für den nächsten Befehl zu verwenden.

Im letzten Schritt, wenn Sie aus dem Standardregister einfügen (mit p), würde es den Text verwenden, den Sie gerade gelöscht hatten (wahrscheinlich nicht, was Sie beabsichtigten).

Beachten Sie, dass p oder P fügt aus dem Standardregister ein. Das Langhand-Äquivalent wäre ""p (oder ""P) und "0 hält das letzte Zerren, "1hält das letzte Löschen oder Ändern.

Für weitere Informationen siehe :help registers.


702



Einer meiner Lieblingsteile über Register verwendet sie als Makros!

Nehmen wir an, Sie haben es mit einer tabulatorgetrennten Wertdatei 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 Feldes% Dev ein Prozentzeichen hinzufügen müssen (ab der 2. Zeile). Wir machen ein einfaches Makro in der (beliebig ausgewählt) m Registrieren Sie sich wie folgt:

  1. Drücken Sie: qm: Um das Makro unter zu starten m registrieren.

  2. EE: Gehe zum Ende der 3. Spalte.

  3. a: Fügen Sie den Modus ein, der an das Ende dieser Spalte angehängt wird.

  4. %: Geben Sie das Prozentzeichen ein, das Sie hinzufügen möchten.

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

  6. j0: Gehe zum Anfang der nächsten Zeile.

  7. q: Beenden Sie die Aufnahme eines Makros

Wir können jetzt einfach tippen @m um dieses Makro auf der aktuellen Zeile auszuführen. Außerdem können wir tippen @@ zu wiederholen, oder 100@m 100 Mal! Das Leben sieht ziemlich gut aus.

An dieser Stelle sollten Sie sagen: "ABER WARTEN, WAS DER HECK DAS MIT REGISTERN MACHEN MUSS"

Ausgezeichneter Punkt. Lassen Sie uns untersuchen, was in den Inhalten der m Registrieren durch Eingabe "mp. Wir bekommen dann folgendes:

EEa%<ESC>j0

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

Sie sind eine neugierige Person, also machen wir etwas interessantes und bearbeiten Sie diese Textzeile, um eine einzufügen ! statt langweilig alt %.

EEa!<ESC>j0

Dann lass uns das in die n Registrieren durch Eingabe B"nyE. Dann, nur für Tritte, lass uns die laufen n Makro auf einer Linie unserer Daten mit @n....

OMG, IT HINZUGEFÜGT A !

Im Wesentlichen ist das Ausführen eines Makros wie das Drücken der exakten Reihenfolge der Schlüssel in diesem Makro-Register. Wenn das kein cooler Registertrick ist, werde ich meinen Hut essen.


301



Andere nützliche Register:

"* oder "+ - Der Inhalt der System-Zwischenablage

"/ - 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 wurden. So können Sie das Makro in eine Textdatei schreiben (mit "ap Makro schreiben ein) und editiere sie und lade sie in ein Register mit "ay$. Gute Möglichkeit, nützliche Makros zu speichern.


94



Das Schwarzes Loch registrieren  _ ist der /dev/null von Registern.

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

noremap x "_x

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

vnoremap p "_dP

65



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

Warum würdest du das benutzen? Ich wollte nach einer langen Zeichenfolge suchen und sie ersetzen, also wählte ich sie im visuellen Modus aus und begann mit dem Suchen / Ersetzen-Ausdruck :%s/[PASTE YANKED PHRASE]//g und ging an meinem Tag.

Wenn Sie nur ein einzelnes Wort in den ex-Modus einfügen möchten, stellen Sie sicher, dass der Cursor darauf steht, bevor Sie in den ex-Modus wechseln, und drücken Sie dann <C-r><C-w> wenn im Ex-Modus, um das Wort einzufügen.


45



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 in Verbindung mit Ihrem System wie oben verwenden oder erhalten Antworten von benutzerdefinierten VimL-Funktionen usw.

oder nur Ad-hoc-Sachen wie

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

41



Ein cooler Trick ist zu verwenden "1p um das letzte Löschen / Ändern einzufügen (, und verwenden Sie dann . um die nachfolgenden Löschungen wiederholt einzufügen. Mit anderen Worten, "1p... ist im Grunde äquivalent zu "1p"2p"3p"4p.

Sie können dies verwenden, um eine Handvoll Zeilen umzukehren: dddddddddd"1p....


31



  • q5 nimmt Bearbeitungen in Register 5 auf (das nächste q stoppt die Aufnahme)
  • : reg zeigt alle Register und alle Inhalte in ihnen an
  • @ 5 Führe Register 5 Makro aus (aufgezeichnete Änderungen)

16



Von 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...>

16



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

  1. Ziehentext
  2. :!grep "<CTRL-R>0"<CR>

14