Manchmal wechsle ich häufig zwischen zwei Funktionen, die ich gemeinsam bearbeite. In diesen Situationen ist es mühsam und schmerzhaft, weiter a zu machen C-s <functionname>
, um zur anderen Funktion zu wechseln und dann den genauen Ort zu finden, den ich zuvor bearbeitet habe.
Wie setze ich Markierungen und springe dann problemlos zwischen zwei Positionen im Puffer hin und her?
navigation
cycling
mark-ring
registers
Vedaad Shakib
quelle
quelle
Antworten:
Emacs-Fenster
C-x 2
öffnet ein weiteres Fenster (= Teilung des Rahmens) unterhalb des aktuellen Fensters, das an denselben Puffer angehängt ist. Sie können einen Punkt in einem der Fenster verschieben, ohne den anderen zu beeinflussen.Sie können mit von einem Fenster zum anderen wechseln
C-x o
. Die integrierte Windmove- Bibliothek bietet einige Funktionen, die das Navigieren zwischen Fenstern erleichtern.Wenn diese Methode zu Ihnen passt, möchten Sie möglicherweise auch einen Blick auf indirekte Puffer werfen .
quelle
Register:
C-xrSPCläuft
point-to-register
C-xrjläuft
jump-to-register
Geben Sie ein beliebiges Zeichen ein, um ein Register anzugeben, wenn Sie dazu aufgefordert werden. 1
Lesezeichen:
C-xrmläuft
bookmark-set
C-xrbläuft
bookmark-jump
Ring markieren:
C-SPCC-SPCschiebt die aktuelle Position auf den Markierungsring (ohne ihn aktiv zu lassen).
C-uC-SPCöffnet den Markierungsring und springt zur vorherigen Position. Sie können dies wiederholt verwenden, um durch den gesamten Ring zu navigieren.
Beachten Sie, dass einige Befehle (insbesondere solche, die Sie möglicherweise eine unbekannte oder willkürliche Entfernung von Ihrem ursprünglichen Standort entfernt haben) automatisch auf den Markierungsring drücken, damit Sie anschließend zurückkehren können C-uC-SPC. Dazu gehört
isearch
, dass Sie nach dem Verwenden C-svon einfach wieder zurückspringen können.Tauschstelle und Marke:
Und wie Tu Do kommentiert, C-xC-xläuft
exchange-point-and-mark
das sehr nützlich, um zwischen zwei Orten zu springen. Hiermit wird auch die Markierung / Region aktiviert, aber Sie können C-SPCdie Hervorhebung mit dieser Option entfernen.1 Wenn Sie die Registerfunktionalität in elisp nutzen, verwenden Sie anstelle eines Zeichens ein nicht in Konflikt stehendes Symbol für den Namen, damit Sie nicht mit interaktiv gesetzten Registern in Konflikt geraten können (es sei denn, Sie möchten dies natürlich tun) Das).
quelle
C-x C-x
, da es zwischen zwei Positionen hin und her springen kann.C-u C-SPC
Wenn Sie den Markierungsring anklicken und erneut ausführen, wird der Punkt an eine andere Stelle verschoben.Neben der Antwort von phils gibt es noch einige weitere Optionen:
helm-semantic-or-imenu : Listet alle verfügbaren Definitionen in der aktuellen Datei auf. Befindet sich der Cursor innerhalb einer Definition, wird diese Definition beim Aktivieren des Textmarkers vorausgewählt.
sr-speedbar : Ein Dateibrowser, der seine Definitionen in jeder Datei auflistet. Es ähnelt dem Gliederungsbaum in IDE.
quelle
Neben Registern und Markern (siehe @phils Antwort zu beiden und meinen anderen, Icicles Antwort zu Markern) können Lesezeichen , insbesondere automatisch benannte oder temporäre Lesezeichen, hilfreich sein. Für diese speziellen Lesezeichentypen benötigen Sie die Bibliothek Bookmark + .
Ein automatisch benanntes Lesezeichen muss nicht benannt werden. Es ist schnell zu erstellen und zu löschen: drücken Sie einfach eine Taste. Der gleiche Schlüssel erstellt oder löscht ein Lesezeichen an einer Stelle. (Standardmäßig ist dies an gebunden
C-x p RET
, aber Sie können natürlich jeden Schlüssel verwenden.)Automatisch benannte Lesezeichen sind wie Lesezeichen im Allgemeinen dauerhaft. Sie können sie jedoch optional automatisch löschen lassen.
Sie können auch temporäre Lesezeichen erstellen oder vorhandene Lesezeichen als temporär festlegen. Sie können beispielsweise festlegen, dass automatisch benannte Lesezeichen automatisch temporär sind.
Sie können schnell Zyklus unter einem gegebenen Satz von Lesezeichen. Um beispielsweise zwischen automatisch benannten Lesezeichen zu wechseln, verwenden Sie die Befehle
bmkp-next-autonamed-bookmark-repeat
undbmkp-previous-autonamed-bookmark-repeat
(binden Sie sie an die Tasten).Sie können mit Lesezeichen versehene Orte auf verschiedene Arten hervorheben , so dass es einfach ist, sie zu erkennen.
quelle
In Bezug auf indirekte Puffer, die in der akzeptierten Antwort erwähnt wurden ...
M-x clone-indirect-buffer
erstellt einen indirekten Puffer für den aktuellen Puffer. Dem Namen des neuen Puffers wird '<2>' hinzugefügt (oder eine größere Zahl, wenn Sie bereits doppelte Puffernamen haben). Der neue Puffer wird in einem neuen Fenster geöffnet. MitC-x 0
oder können Sie zu einem einzelnen Fenster zurückkehrenC-x 1
.Mit können
M-x winner-mode
Sie bequem zwischen den beiden Standorten wechseln.C-c <left>
/M-x winner-undo
undC-c <right>
/M-x winner-redo
wechseln zwischen Fensterkonfigurationen. In diesem Fall sind die Konfigurationen Positionen in den zwei Puffern, die die eine Datei anzeigen.Hinweis: Die Funktionen
winner-undo
undwinner-redo
arbeiten mit einer Liste von Konfigurationen. Wenn die Konfiguration geändert wird, z. B. ein Bewegungspunkt, wird die aktuelle Konfiguration zum Kopf der Liste undwinner-redo
ist ungültig. In diesem Fallwinner-undo
wird die vorherige Position wiederhergestellt.Für die Situation des OP führt dies zu folgendem Prozess:
M-x winner-mode
M-x clone-indirect-buffer
(neuer indirekter Puffername: File1.txt <2>)C-x 1
C-x b
(Standard ist Originalpuffer, sofern seit Schritt 3 kein Wechsel zu einem anderen Puffer stattgefunden hat). Dadurch wird eine neue Konfiguration erstellt, zu der der Gewinner zurückkehren kann.Ein Wechsel zum vorherigen Bearbeitungsort (Fensterkonfiguration) hängt davon ab, ob die Fensterkonfiguration zwischen den Schaltern geändert wird.
C-c <left>
/M-x winner-undo
.C-c <left>
/M-x winner-undo
für Zurück undC-c <right>
/M-x winner-redo
für Vorwärts.Eine Änderung ist alles andere als eine andere
winner-undo
oderwinner-redo
.quelle
wenn Sie verwenden
evil-mode
, die vim Schicht, dannC-o
undC-i
wird die gleiche Arbeit.Sie führen die Befehle
evil-jump-backward
/ ausforward
.C-o
springt zur älteren Position in der Sprungliste, die automatisch gesetzt wird (Markierungen werden bei Bewegungsbefehlen gesetzt).C-i
geht in umgekehrter Richtung. Wir können auchTAB
nach einemC-o
statt verwendenC-i
. Wenn Sie also beide Funktionen verwenden, werden Sie in Ihrem aktuellen Puffer vor und zurück geführt.Wenn Sie möchten, dass diese Funktion Puffer überkreuzt, lesen Sie
evil-jumpers
: http://melpa.org/#/evil-jumper«
Evil-Jumper ist ein Add-On für den Evil-Modus, das die Implementierung der Sprungliste so ersetzt, dass sie dem Verhalten von Vim besser entspricht. Insbesondere wird es über Puffergrenzen springen und tote Puffer bei Bedarf wiederbeleben. Die Sprungliste kann auch in einer Datei gespeichert und zwischen Sitzungen wiederhergestellt werden. »
Hinweis: Ich habe es in diesem Wiki gelernt
quelle
C-o
undC-i
tun?Wenn Sie Eiszapfen verwenden , können Sie schnell zwischen den Markierungen in
mark-ring
jedem Puffer oder dem navigierenglobal-mark-ring
(der in jedem Puffer eine einzelne Markierung enthält).Sie tun dies mit mehreren Befehlen
C-- C-SPC
(für einen Puffermark-ring
) oderC-- C-x C-SPC
(für denglobal-mark-ring
). Nachdem Sie die Taste einmal gedrückt haben, bewegen Sie sich mit den üblichen Eiszapfen -Tasten usw. zwischen den Markierungen des Rings.(Dieselben Tasten ohne Präfix arg setzen die Marke (
set-mark-command
) bzw. setzen die globale Marke (pop-global-mark
) wie in Vanille-Emacs.)Der Text der Zeile jedes Markers wird als Abschlusskandidat verwendet. Während der Eingabe werden durch die Eingabe des Minipuffers die Kandidaten auf die übereinstimmenden eingegrenzt (z. B. Teilzeichenfolge- oder Regexp-Übereinstimmung). Sie können schnell zwischen passenden Markern wechseln oder einen von ihnen direkt besuchen. Sie können sogar die Sortierreihenfolge (
C-,
) für das Radfahren ändern .quelle
Eine minimale, aber oft hilfreiche Möglichkeit - wenn Sie nur einen Blick auf die andere Funktion werfen möchten - ist die Einstellung
Dadurch kehren Sie beim Umschalten zwischen C-vund zu Ihrer genauen Start-Cursor-Position zurück M-v.
quelle
evil-mode
implementiert Marker im Vim-Stil . Sie können einstellen , Marker mit (m
, das heißtevil-set-marker
) und Sprung zur Marke mit dem Graviszeichen `(evil-goto-mark
) oder die Linie der Marke'
(evil-goto-mark-line
).Sie können also an der ersten Stelle mit
ma
die Markierung "a" erstellen, an der zweiten Stelle mit die Markierung "b" erstellenma
und dann'a
zur Markierung "a" und'b
zur Markierung "b" springen.quelle
Verwenden Sie imenu und den folgenden Code
quelle
In den letzten 20 Jahren habe ich zwei Edelsteine verwendet:
Ich binde sie an C-. und C- und verwenden Sie sie ständig, ohne es zu merken.
Ja, Register und Marker sind viel flexibler und leistungsfähiger, aber dies ist einer der winzigen, schnellen Helfer, die es mir unmöglich machen, zu anderen Editoren zu wechseln.
quelle
Sie können auch Makros verwenden, da diese schnell an praktische Tasten gebunden werden können.
<F3> M-g g N <F4>
Nehmen Sie zum Beispiel einen Sprung zu Position N mit auf und weisen Sie ihn der Taste F5 mit zuC-x C-k b <F5>
. Dann machen Sie dasselbe mit Position M und F6. Von nun an können Sie einfach F5 und F6 abwechseln, um zwischen N und M zu springen.Da
<F4>
das zuletzt aufgezeichnete Makro und<C-u> F4
das vorletzte Makro ausgeführt werden , können Sie den Tastenbelegungsschritt überspringen und einfach mit<F4>
und die Positionen wechseln<C-u> F4
.Eine andere ziemlich radikale Möglichkeit ist, einen indirekten Puffer in einem anderen Fenster mit zu erstellen
<C-x> 4 c
. Dieser Puffer hat den gleichen Inhalt, kann jedoch eine andere Punktposition haben. Wechseln Sie nun einfach wie<C-x> o
gewohnt zwischen den Fenstern .quelle