Ivy deaktiviert die Fertigstellung für einen Befehl im Minibuffer

8

Kann ich die Efeu-Vervollständigung für einen einzelnen Befehl im Minibuffer deaktivieren?

Zum Beispiel bin ich im Ordner ~ / code / study /. Wenn ich die Suchdatei öffne und mit Ivy automatisch vervollständige, werde ich sehen

Find file: ~/code/study/

./ 
../ 
[...]

und ich möchte in einem einzigen Sprung zu ~ / other / code / study gehen. Da ich den Efeu-Modus zur automatischen Vervollständigung habe, kann ich meinen Cursor nicht zum ersten / bewegen und dort einfach einen anderen eingeben. Dies ist für einige Dinge ein Schmerz. Kann ich den ersten Teil einer Fertigstellung irgendwie bearbeiten oder die Fertigstellung nur für diesen Befehl vorübergehend deaktivieren?

Vielen Dank!

Rafa de Castro
quelle

Antworten:

12

Ich denke, was Sie suchen, ist C-M-j( ivy-immediate-done) im Minipuffer. Diese Funktion wird im Ivy-Handbuch wie folgt beschrieben :

Beendet mit der aktuellen Eingabe anstelle des aktuellen Kandidaten (wie bei anderen Befehlen).

Dies ist beispielsweise nützlich, wenn Sie find-file aufrufen, um eine neue Datei zu erstellen, der gewünschte Name jedoch mit einer vorhandenen Datei übereinstimmt. In diesem Fall C-j würde using die vorhandene Datei auswählen, die nicht Ihren Wünschen entspricht. Verwenden Sie stattdessen diesen Befehl.

Tirocinium
quelle
Aber wie kann ich meinen Cursor auf ~ / <hier> / code / study bringen, um das sofort erledigte zu bearbeiten und anzuwenden?
Rafa de Castro
Ich glaube nicht, dass Sie damit umgehen können C-M-j, aber es ist eine Möglichkeit, die Fertigstellung zu deaktivieren.
Tirocinium
5

Hier gibt es mehrere Ansätze zur Dateinavigation.

Nur um Ihre Aussage neu zu formulieren:

Wechseln Sie von ~ / code / study zu ~ / other / code / study

  1. Am einfachsten und konsistentesten: Verwenden Sie ~diese Option, ~/um von dort zu wechseln und von dort aus zu navigieren.
  2. Angenommen, Sie haben ~/code/studydie aktuelle Emacs-Sitzung schon einmal besucht. Drücken Sie, C-rum auf alle zuvor besuchten Dateien zuzugreifen. Sie können den Dateiteil mit löschen C-k.
  3. Angenommen, Sie haben ~/code/studyals Lesezeichen oder in recentf. Drücken Sie M-o b, um den Vorgang abzuschließen.
  4. Angenommen, Sie befinden sich im diredPuffer von ~/code/study. Drücken Sie, 0wum den aktuellen Pfad zu kopieren. Presse C-x C-f C-y: können Sie den Ruck in dem Minipuffer bearbeiten.

Bearbeiten: noch ein Ansatz

Mit dem letzten Commit können Sie drücken C-M-o w C-y, um den vollständigen Pfad im Minibuffer zu bearbeiten. Wenn Sie dies häufig verwenden, können Sie counsel-find-file-mapdiese Kombination an etwas Kürzeres binden.

abo-abo
quelle
1

Sie können den Dateinamenstamm während der Fertigstellung bearbeiten, indem Sie DELoder eingeben <backspace>. Jeder dieser Tastendrücke wechselt in das übergeordnete Verzeichnis.

Weitere Informationen finden Sie im Abschnitt Vervollständigung des Dateinamens im Ivy-Benutzerhandbuch. Insbesondere könnte Sie die spezielle Behandlung von Schrägstrichen und Tildes interessieren. Wenn Sie während eines beliebigen Teils der Fertigstellung zwei Schrägstriche eingeben, wird das Verzeichnis in das Stammverzeichnis ( /) geändert, und eine Tilde wechselt in Ihr Ausgangsverzeichnis.

Siehe auch anpassbare Variable ivy-on-del-error-function.

Basilikum
quelle
Wenn ich das mache, hätte ich "~ / code / study" dann Rücktaste "~ / code /" dann "~" Code. Und ich musste wieder mit Dropbox / Code / Study beginnen. Ich möchte diese Wiederholung von Code / Studie vermeiden.
Rafa de Castro
0

In diesem Fall können Sie weiterhin das Standardverhalten für Suchdateien erhalten

(defun default-find-file ()
  (interactive)
  (exit-minibuffer)
   (let  ((completing-read-function 'completing-read-default))
     (call-interactively 'find-file) ))
Matthias
quelle