Ich weiß nur von einer Instanz, die Register verwendet, über die CtrlR*ich Text aus einer Zwischenablage einfüge.
Was sind andere Verwendungszwecke 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.
Antworten:
Mit den Registern in Vim können Sie Aktionen oder Befehle für den darin gespeicherten Text ausführen. Um auf ein Register zuzugreifen, geben Sie
"a
vor einem Befehla
den Namen eines Registers ein. Wenn Sie die aktuelle Zeile in das Register kopieren möchtenk
, können Sie eingebenOder Sie können ein Register mit einem Großbuchstaben anhängen
Sie können dann durch das Dokument navigieren und es an anderer Stelle mit einfügen
Einfügen aus der System-Zwischenablage unter Linux
Einfügen aus der System-Zwischenablage unter Windows (oder aus der Zwischenablage "Maus markieren" unter Linux)
Um auf alle aktuell definierten Register zuzugreifen, geben Sie ein
quelle
"+
ist ein spezielles Register, das sich auf die Systemzwischenablage bezieht."*
. so wird der Befehl zum Kopieren bis zum Ende der Datei"*yG
.*
befindet sich die Zwischenablage "Maus-Hervorhebung" und+
die Zwischenablage Strg-XCV.+
)?Ich war erfreut, als ich das
0
Register entdeckte. Wenn Sie Text ziehen, ohne ihn einem bestimmten Register zuzuweisen, wird er dem0
Register zugewiesen und im Standardregister"
gespeichert. Der Unterschied zwischen den Registern0
und"
besteht darin, dass0
nur mit zerrissenem Text gefüllt wird, während das Standardregister auch mit Text gefüllt wird, der mit den Befehlend
/D
/x
/X
/c
/C
/s
/ gelöscht wurdeS
.Ich finde das nützlich, wenn ich Text kopieren, löschen und durch den kopierten Text ersetzen möchte. Die folgenden Schritte veranschaulichen ein Beispiel:
y[motion]
- dieser Text wird gespeichert"
und0
registriertd[motion]
- dieser Text wird im"
Register gespeichert"0p
Wo
"
ist der Befehl, ein Register für den nächsten Befehl zu verwenden.Wenn Sie im letzten Schritt aus dem Standardregister (mit
p
) einfügen, wird der gerade gelöschte Text verwendet (wahrscheinlich nicht das, was Sie beabsichtigt haben).Beachten Sie, dass
p
oderP
aus dem Standardregister eingefügt wird. Das Langhandäquivalent wäre""p
(oder""P
) und"0
hält den letzten Ruck,"1
hält das letzte Löschen oder Ändern.Weitere Informationen finden Sie unter
:help registers
.quelle
p
oderP
Pasten aus dem Standardregister. Das Langhandäquivalent wäre""p
(oder""P
)."
ist der Befehl, ein Register für den nächsten Befehl zu verwenden. So""p
würde die Verwendung"
Register für den Befehl zum Einfügen und"0p
das verwenden würden0
Register.0p
würde bedeuten, zum ersten Zeichen der aktuellen Zeile zu gehen und aus dem Inhalt des Standardregisters ("
) einzufügen ."p
Dies wäre ein unvollständiger Befehl, da Sie angeben müssen, für welchen Befehl das Register verwendet werden sollp
.Einer meiner Lieblingsteile über Register ist die Verwendung als Makros!
Angenommen, Sie haben es mit einer durch Tabulatoren getrennten Wertedatei als solcher zu tun:
Jetzt entscheiden Sie, dass Sie am Ende des Felds% Dev (beginnend mit der 2. Zeile) ein Prozentzeichen hinzufügen müssen. Wir werden ein einfaches Makro im (willkürlich ausgewählten)
m
Register wie folgt erstellen:Drücken Sie ::
qm
Um die Aufnahme des Makros unterm
Register zu starten .EE
: Gehen Sie zum Ende der 3. Spalte.a
: Einfügemodus zum Anhängen an das Ende dieser Spalte.%
: Geben Sie das Prozentzeichen ein, das wir hinzufügen möchten.<ESC>
: Kehren Sie in den Befehlsmodus zurück.j0
: Zum Anfang der nächsten Zeile gehen.q
: Stoppen Sie die Aufnahme des MakrosWir können jetzt einfach eingeben
@m
, um dieses Makro in der aktuellen Zeile auszuführen. Außerdem können wir tippen@@
,100@m
um dies zu wiederholen oder dies 100 Mal zu tun! Das Leben sieht ziemlich gut aus.An dieser Stelle sollten Sie sagen: " ABER WARTEN, WAS HAT DAS MIT REGISTERN ZU TUN ?"
Hervorragender Punkt. Lassen Sie uns untersuchen, was im Inhalt des
m
Registers enthalten ist, indem Sie tippen"mp
. Wir bekommen dann folgendes:Auf den ersten Blick sieht es so aus, als hätten Sie versehentlich eine Binärdatei im Editor geöffnet, aber auf den zweiten Blick ist es die genaue Zeichenfolge in unserem Makro!
Sie sind eine neugierige Person, also lassen Sie uns etwas Interessantes tun und diese Textzeile bearbeiten, um eine
!
statt langweilige alte einzufügen%
.Dann ziehen wir dies
n
durch Tippen in das RegisterB"nyE
. Lassen Sie uns dann, nur zum Spaß, dasn
Makro in einer Zeile unserer Daten ausführen, indem Sie@n
....OMG, ES HINZUGEFÜGT A.
!
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.
quelle
+
anstelle von verwendenj0
, um zum ersten nicht leeren Zeichen in der nächsten Zeile zu wechseln.Andere nützliche Register:
"*
oder"+
- den Inhalt der Systemzwischenablage"/
- letzter Suchbefehl":
- letzter Befehl.Beachten Sie, dass Sie mit VIM-Makros diese bearbeiten können, da sie nur eine Liste der Tastenanschläge sind, die beim Aufzeichnen des Makros verwendet werden. Sie können also das Makro in eine Textdatei schreiben (mit
"ap
Makro a schreiben ), bearbeiten und in ein Register mit laden"ay$
. Gute Möglichkeit, nützliche Makros zu speichern.quelle
vim --version
--clipboard
bedeutet, dass Sie es nicht haben,+clipboard
bedeutet , dass Sie es tun."*
und"+
noch cooler:"+
Fügt den zuletzt kopierten Textctrl+c
(Kopierpuffer) oder die von Ihnen verwendete Verknüpfung (oderright-click>copy
) ein."*
Fügt den zuletzt mit der Maus hervorgehobenen Text ein (Auswahlpuffer). Wenn Sie also etwas kopierenctrl+c
und dann mit der Maus etwas anderes markieren, können Sie auswählen, welches eingefügt werden soll. Dies funktioniert nicht in Windows, wo diese beiden Register synonym sind."*
und"+
seit Jahren! Ich dachte, nur gvim hätte Zugriff auf die System-Zwischenablagen, aber anscheinend auch reguläres vim!-xterm_clipboard
aufvim --version
. Irgendein einfaches Paket zu installieren? (debian / apt-get). Vielen Dank.Das Schwarzlochregister
_
ist das/dev/null
der Register.Ich verwende es in meinem vimrc, um das Löschen einzelner Zeichen zu ermöglichen, ohne das Standardregister zu aktualisieren:
und im visuellen Modus einzufügen, ohne das Standardregister zu aktualisieren:
quelle
x
wird weniger bequem, um Zeichen zu transponieren.x
Zuordnung können Sie denxp
"Befehl" nicht mehr ausführen , um den Strom mit dem nächsten Zeichen umzuschalten. Sehr nützlich für Tippfehlerbehebungen. Wir müssen auchXp
den Strom mit dem vorherigen Zeichen umschalten.Wenn Sie jemals 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 eine längere Zeichenfolge suchen und ersetzen, also wählte ich sie im visuellen Modus aus, tippte den Such- / Ersetzungsausdruck ein
:%s/[PASTE YANKED PHRASE]//g
und fuhr an meinem Tag fort.Wenn Sie nur ein einzelnes Wort im Ex-Modus einfügen möchten, können Sie sicherstellen, dass sich der Cursor darauf befindet, bevor Sie in den Ex-Modus wechseln, und dann
<C-r><C-w>
im Ex-Modus drücken, um das Wort einzufügen.quelle
:
Befehlszeile ist das Beste, was ich heute gelernt habe/[write out your regex]<cr>
und dann, um Just zu ersetzens/<C-R>//replacement/
. Auf diese Weise erhalten Sie Live-Feedback zu Ihrer Regex, bevor Sie den Ersatz ausführen.Ich denke, das geheime Guru-Register ist der Ausdruck = Register. Es kann für kreative Zuordnungen verwendet werden.
Sie können es wie oben in Verbindung mit Ihrem System verwenden oder Antworten von benutzerdefinierten VimL-Funktionen usw. erhalten.
oder einfach nur Ad-hoc-Sachen wie
quelle
Ein cooler Trick besteht darin
"1p
, das letzte Löschen / Ändern einzufügen (und dann.
wiederholt die nachfolgenden Löschungen einzufügen. Mit anderen Worten,"1p...
ist im Grunde gleichbedeutend mit"1p"2p"3p"4p
.Sie können dies verwenden, um eine Handvoll Zeilen in umgekehrter Reihenfolge anzuordnen:
dddddddddd"1p....
quelle
Von der Hilfeseite von vim:
quelle
quelle
nmap <F2> @q
Ich verwende Register q, denn um dann ein Makro für die Wiedergabe von F2 zu speichern, drücke ich einfachqq
. Schnelles Speichern und Wiedergeben von Makros.Ich verwende das Standardregister, um in meinem VIM-Fenster nach Text zu suchen, ohne nach der Maus greifen zu müssen.
:!grep "<CTRL-R>0"<CR>
quelle
Verwenden Sie Register in Befehlen mit
@
. Z.B:Setzen Sie sie in Befehl:
Jetzt
"ap
wird einfügenabc
.quelle
Eine große Quelle der Verwirrung ist das Standardregister
"
. Es ist wichtig zu wissen, wie es funktioniert. Es ist viel besser, wenn das Standardregister meistens vermieden wird. Die Erklärung aus der Vim-Dokumentation:Das Standardregister ist also tatsächlich ein Zeiger auf das zuletzt verwendete Register. Wenn Sie etwas löschen oder ziehen, 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 ( ), das"1
kleine Löschregister ("-
) oder ein anderes Register, das zum Löschen oder Ziehen verwendet wurde.Die einzige Ausnahme ist das Schwarzlochregister. Vim Doc sagt:
Normalerweise sind Sie viel besser dran , indem Sie direkt:
"0
,"-
und"1-"9
Standard - Register oder den Namen Register.quelle
Ein übersehenes Register ist das '.' Punktregister, das den zuletzt eingefügten Text enthält, unabhängig davon, wie er eingefügt wurde, z. B. ct] (change till]). Dann stellen Sie fest, dass Sie es an einer anderen Stelle einfügen müssen, aber die Punktwiederholungsmethode nicht verwenden können.
quelle
Mein Lieblingsregister ist das
':'
Register. Wenn@:
ich im normalen Modus laufe, kann ich den zuvor ausgeführten ex-Befehl wiederholen.quelle
Mein Freund Brian hat einen umfassenden Artikel dazu geschrieben. Ich denke, es ist eine großartige Einführung in die Verwendung von Themen. https://www.brianstorti.com/vim-registers/
quelle