Ich hatte früher eine Tastenkombination für die folgende Aktion:
"Öffnen Sie den Ordner mit dieser Datei in Dired + und platzieren Sie den Punkt (Cursor) auf der Datei."
Ich glaube es war C-x C-j
und ich erinnere mich nicht daran, es manuell eingerichtet zu haben. Es scheint weg zu sein. Haben die letzten Änderungen an Dired + dies möglicherweise geändert?
Gibt es in jedem Fall integrierte interaktive Funktionen von Dired oder Dired +, die ich dafür verwenden könnte? Wenn nicht, wie kann ich einen bauen?
Ich kann laufen M-x dired-jump
. Das Problem scheint zu sein, dass die Tastenkombination weg ist. Wenn ich das tue C-h k C-x C-j RET
, verstehe ich C-x C-j RET (translated from C-x C-j <return>) is undefined
.
dired
key-bindings
Amelio Vazquez-Reina
quelle
quelle
dired-jump
oder es gibt keine Schlüsselbindung.dired-jump
wird nicht einmal in Dired + erwähnt .emacs -Q
. (2) Wenn Sie nicht repro können,emacs -Q
halbieren Sie Ihre Init-Datei rekursiv, um festzustellen, welcher Teil das Problem verursacht. Kommentieren Sie dazu 1/2, dann 3/4, dann 7/8 aus ... Sie können dies verwendencomment-region
(C-u
Kommentare). Wenn Sie nach all dem mehr Hilfe benötigen (und wahrscheinlich auch nicht), fragen Sie hier.Antworten:
Das Problem
jabber.el
unddired-x
leider Konflikt auf dieser Tastenkombination. Jabber verwendetC-x C-j
als Präfix für alle seine Schlüssel, während dired es auf Ihren Geliebten setztdired-jump
(das ist wahrscheinlich der Grund, warum letzteres durch diedired-bind-jump
Variable optional gemacht wird).Machen Sie die Sache noch komplizierter, wenn Jabber installiert ist
package.el
und diesen Schlüssel zweimal bindet! Zuerst beim Start von Emacs, dann beim Ladenjabber.el
.Die Lösung
Binden Sie
dired-jump
vor und nach dem Laden von Jabber. Stellen Sie sicher, dass dies später(package-initialize)
in Ihrer Init-Datei geschieht (wenn Sie es verwenden).Wenn Sie Emacs 24.4 verwenden, wird Folgendes leicht bevorzugt:
Um die Jabber-Keymap weiterhin zu verwenden, können Sie sie wie in an eine andere Tastenfolge binden
quelle
#
vor'dired-jump
bedeuten? Ich habe auch gesehen, dass es beim Hinzufügen von Funktionen zu Hooks verwendet wird.function
Zitat. Es ist fast dasselbe wie ein normales Anführungszeichen, aber es teilt dem Byte-Compiler mit, dass dieses Symbol eine Funktion ist (mit der es nützliche Warnungen geben kann). Es ist in Ihrer Init-Datei irrelevant, aber in Paketen relevant, daher versuche ich, bewährte Verfahren zu motivieren.Wie andere bereits bemerkt haben, denken Sie an die Funktion
dired-jump
, die von Dired-x (nicht Dired +) bereitgestellt wird und an die gebunden ist,C-x C-j
wenn die Dired-x-Bibliothek geladen wird. (Sie können diese Bindung deaktivieren, indem Sie festlegendired-bind-jump
,nil
bevor Dired-x geladen wird.)Angesichts der Tatsache, dass
C-x C-j
dies etwas bewirkt, anstatt sich überC-x C-j
undefinierte zu beschweren, geschieht, dass etwas anderes eine Bindung dafür definiert hat. Wer zuletzt die Bindung definiert hat, gewinnt.Sie müssen also herausfinden, welches andere Paket, das Sie laden, überschreibt
C-x C-j
. Dieses Paket wird nach Dired-x geladen. Wenn Sie alsodired-x
in Ihre Init-Datei laden , wird es entweder weiter geladen oder irgendwann automatisch geladen .Da
C-x C-j
es nichts alleine macht, sondern darauf wartet, dass eine andere Taste gedrückt wird, handelt es sich um eine Präfixtaste. Drücken SieC-x C-j C-h
, um eine Liste der Bindungen anzuzeigen, die mit diesem Präfix beginnen. Dies sollte Ihnen eine gute Vorstellung vom Täterpaket geben. Malabarbas Hypothese, dass es sich um den Jabber-Modus handelt, ist plausibel. Wenn Sie eine Tastenfolge identifiziert haben, die mit dem Präfix beginntC-x C-j
, drücken SieC-h k
gefolgt von dieser Tastenfolge. Dies zeigt den Hilfetext für diesen Befehl und das Paket, das den Befehl bereitstellt. Es ist wahrscheinlich, dass das Paket, das den Befehl bereitstellt, dasselbe Paket ist, das die Bindung definiert.Es ist unwahrscheinlich, dass Sie so weit gehen müssen, aber nur für den Fall, dass Sie eine Schlüsselbindung nicht finden können, lesen Sie Wie kann ich herausfinden, in welcher Keymap ein Schlüssel gebunden ist?
Wenn Sie das überschreibende Paket laden möchten
C-x C-j
, aber nicht möchten, dass es diese Bindung übernimmt, prüfen Sie, ob es eine Option zum Überspringen dieser Bindung gibt. Wenn dies nicht der Fall ist, können Sie die Bindung zurückschnappen: Lassen Sie sie ausführen,(global-set-key "\C-x\C-j" 'dired-jump)
nachdem das fehlerhafte Paket geladen wurde. Es kann ausreichen, dies am Ende Ihrer Init-Datei zu platzieren. Wenn nicht, können Sie verwendenquelle
Was sehen Sie, wenn Sie es tun C-hkC-xC-jRET?
Sie sollten sehen, dass es gebunden ist
dired-jump
. Wenn dann ist es nicht , dann haben Sie entweder nicht getanrequire
vondired-x
oder Sie / irgendein anderes Paket overrode , dass mit etwas anderem zu binden.Wenn Sie
M-x dired-jump
diese Bindung können und nur benötigen, können Sie dies tunAber wenn
dired-bind-jump
jat
und wenn ja(require 'dired-x)
, dann wird dieses Paket diese Bindung für Sie festlegen.quelle
C-x C-j RET (translated from C-x C-j <return>)
ist undefiniert.M-x dired-jump
? Wenn nicht, haben Sie dasdired-x
Paket nicht geladen.M-x dired-jump
. Ich habe vergessen, das im OP zu erwähnenemacs -Q
und nur tun(require 'dired-x)
. Wenn das funktioniert, füllen Sie Ihre nach und nach,init.el
bis die Bindung wieder verschwindet. Auf diese Weise finden Sie den Täter. Eine andere Möglichkeit besteht darin, rekursives grep / ag / ack fürC\-x\s+C\-j
in Ihrem Ordner .emacs.d auszuführen.Ich benutze das regelmäßig. Einfach getestet mit
emacs -Q
, das ist alles was du brauchst:Die Funktionalität wird von bereitgestellt
dired-x
, was sich von unterscheidetdired+
. Ersteres wird mit Emacs geliefert, letzteres ist eine Erweiterungsbibliothek eines Drittanbieters.quelle
dired-bind-jump
der Standardwert festgelegt istt
.dired-bind-jump
istt
. Ich lade auch(require 'dired-x)
. Seltsam