Ivy désactive l'achèvement d'une commande dans le mini-tampon

8

Puis-je désactiver l'achèvement de lierre pour une seule commande dans le mini-tampon?

Par exemple, je suis dans le dossier ~ / code / study /. Si j'ouvre find file et autocomplete avec Ivy je verrai

Find file: ~/code/study/

./ 
../ 
[...]

et je veux, en un seul saut, allez à ~ / autre / code / étude. Étant donné que j'ai le mode ivy pour la saisie semi-automatique, je ne peux pas déplacer mon curseur sur le premier / et simplement en taper d'autres là-bas. C'est une douleur pour certaines choses. Puis-je en quelque sorte modifier la première partie d'un achèvement ou même désactiver temporairement l'achèvement juste pour cette commande?

Merci beaucoup!

Rafa de Castro
la source

Réponses:

12

Je pense que ce que vous cherchez est C-M-j( ivy-immediate-done) dans le mini tampon. Cette fonction est décrite comme suit dans le manuel Ivy :

Quitte avec l'entrée actuelle au lieu du candidat actuel (comme les autres commandes).

Ceci est utile par exemple lorsque vous appelez find-file pour créer un nouveau fichier, mais le nom souhaité correspond à un fichier existant. Dans ce cas, l'utilisation C-j sélectionnerait ce fichier existant, ce qui n'est pas ce que vous voulez - utilisez plutôt cette commande.

tirocinium
la source
Mais comment puis-je placer mon curseur sur ~ / <ici> / code / study pour éditer et appliquer le fait immédiat?
Rafa de Castro
Je ne pense pas que vous puissiez le faire C-M-j, mais c'est une façon de désactiver l'achèvement.
tirocinium
5

Il existe plusieurs approches de navigation dans les fichiers qui s'appliquent ici.

Juste pour reformuler votre déclaration:

passer de ~ / code / study à ~ / autre / code / study

  1. Le plus simple et le plus cohérent: utilisez ~pour basculer vers ~/et naviguer à partir de là.
  2. Supposons que vous ayez visité ~/code/studyune fois auparavant dans la session Emacs en cours. Appuyez sur C-rpour accéder à tous les fichiers que vous avez visités auparavant. Vous pouvez effacer la partie du fichier avec C-k.
  3. Supposons que vous ayez ~/code/studyun signet ou recentf. Appuyez sur M-o bpour obtenir l'achèvement de ceux-ci.
  4. Supposons que vous soyez dans le diredtampon de ~/code/study. Appuyez sur 0wpour copier le chemin actuel. Appuyez sur C-x C-f C-y: vous pouvez modifier le coup sec dans le mini-tampon.

Edit: une approche de plus

Avec la validation la plus récente , vous pouvez appuyer sur C-M-o w C-ypour modifier le chemin d'accès complet dans le mini-tampon. Si vous l'utilisez beaucoup, counsel-find-file-mapest disponible pour lier cette combinaison à quelque chose de plus court.

abo-abo
la source
1

Vous pouvez modifier la racine du nom de fichier à la fin en tapant DELou <backspace>. Chacune de ces touches passe au répertoire parent.

Voir la section Achèvement du nom de fichier du manuel de l'utilisateur Ivy pour plus d'informations. En particulier, vous pouvez être intéressé par la gestion spéciale des barres obliques et des tildes - entrer deux barres obliques pendant n'importe quelle partie de l'achèvement changera le répertoire en répertoire racine ( /) et de même un tilde basculera vers votre répertoire personnel.

Voir aussi variable personnalisable ivy-on-del-error-function.

Basilic
la source
Si je fais cela, j'aurais "~ / code / study" puis retour arrière "~ / code /" puis "~" code. Et je devais recommencer avec Dropbox / code / study. Je voudrais éviter cette répétition de code / étude.
Rafa de Castro
0

Vous pouvez toujours obtenir le comportement de recherche de fichier par défaut si vous le faites

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