Come dire a Ido di togliersi di mezzo quando posso già incollare il nome del file?


14

Sto cercando di farmi usare la modalità Ido. Alcune volte è bello, ma altre volte è estremamente stupido. Ecco la mia più grande delusione.

Ho letto un registro con i nomi di file completi, quindi copio un nome, provo ad aprire quel file.

Il modo di farlo senza Ido: C-aC-yC-kRET

Con Ido ci sono due problemi principali:

  1. Se ho l'intero nome del file, non c'è modo di inserirlo (devo rimuovere la prima barra, altrimenti anche premendo //non aiuta.

  2. Non riesco a modificare parti intermedie del nome del file lasciando il resto non modificato.

O posso?


2
Puoi tornare a magazzino find-filecon C-x C-fe incollare normalmente. Ma poi, questo è più tasti. Oppure puoi usare Helm se vuoi una funzionalità ricca find-filee ancora soddisfare quel tuo caso d'uso.
Tu Do,

1
Ah, grazie, nah, non lo faccio così spesso che mi lamento di due battute in più. Questo in realtà risponderebbe ai miei bisogni per ora. Grazie!
wvxvw,

@Tu Do Dovresti metterlo giù come una risposta qui sotto. Ho trovato C-x C-futile il fallback tante volte!
Kaushal Modi,

Risposte:


17

Mentre un idocomando è attivo ( ido-find-filein questo caso), è possibile tornare alla versione non ido dello stesso comando ( find-filein questo caso) utilizzando l'associazione ido-default C-x C-fper ido-fallback-command.

Per rispondere alla tua domanda,

  • Il primo C-x C-fchiamerà ido-find-file.
  • Il secondo C-x C-ftornerà a find-file.
  • Quindi puoi fare C-a C-y C-k RETcome fai di solito per trascinare un percorso di file copiato nel minibuffer.

Nota: In ido, C-x C-f C-x C-ffarà la stessa cosa di C-x C-f C-f, cioè tornerà a find-file.

Informazioni C-fsuido In ido-mode, C-fè vincolato a ido-magic-forward-char. Da ido.el,

(defun ido-magic-forward-char (arg)
  "Andare avanti nell'input dell'utente o eseguire azioni magiche.
Se non è presente alcun input dell'utente o alla fine dell'input, eseguire azioni magiche:
Cx Cb ... Cf passa a `ido-find-file '.
Cx Cf ... Cf fallback in "find-file" non Ido.
Cx Cd ... Cf fallback a non-Ido breve "dired".
Cx d ... Cf fallback su non-Ido `dired '."

2
Per me è solo C-fper tornare find-file, no C-x C-f. Non vedo che l'ho personalizzato (e io, come altri qui, faccio molto affidamento sul fallback. idoÈ quasi la stessa quantità di problemi che vale, dopo averlo usato per un po 'di tempo).
Harpo,

1
@harpo Ho appena aggiornato la risposta sopra spiegando perché C-x C-f C-ffunziona anche.
Kaushal Modi,

Grazie a @kaushalmodi per la maggior parte del lavoro. La mia risposta è inizialmente semplice come il commento. Dovrebbe essere la sua risposta :) Solo una nota per la credibilità.
Tu Do,

Ciò ha salvato la mia sanità mentale, poiché ido non gioca bene con il vagabondo quando si usano percorsi assoluti. Grazie.
Jérémie,

6

Dato che hai a che fare con nomi di percorsi completi, altri metodi potrebbero funzionare:

  • use M-x ffap( find-file-at-point): leggerà automaticamente il nome del percorso e aprirà il file
  • attivare M-x compilation-shell-minor-modeche cambierà il carattere dei percorsi e li renderà "cliccabili" (con la bocca o RET). Cliccandoci sopra si accede a quel file e alla riga specifica e si può usare next-errore previous-errornavigare. Lo uso spesso, come in modalità shell .

5

Dato che c'è sempre più di un modo per farlo, ecco una variazione sull'idea di @ abo-abo che mantiene attivo il completamento dell'ido invece di ricorrere al normale comando find.

(defun ido-yank ()
  (interactive)
  (let ((path (current-kill 0)))
    (if (file-exists-p path)
        (progn
          (let ((dir (file-name-directory path)))
            (if dir (ido-set-current-directory dir)))
          (setq ido-exit 'refresh)
          (setq ido-text-init (if (file-directory-p path) nil (file-name-nondirectory path)))
          (setq ido-rotate-temp t)
          (exit-minibuffer))
      (yank))))

(define-key ido-file-dir-completion-map (kbd "C-y") 'ido-yank)

Con questo legame:

  • Se l'attuale kill è un percorso di directory valido, è possibile iniziare ido-find-file, premere C-yper passare alla directory yanked e quindi continuare a utilizzare il completamento ido per scegliere un file.

  • Se l'attuale kill è un percorso di file valido, puoi iniziare ido-find-file, premere C-yper saltare alla directory yanked e offrire il nome del file yanked come completamento e premere RET per aprire quel file.

  • Se l'attuale uccisione è qualcos'altro viene tirato normalmente.


Potrebbe non essere meglio letlegare le varie ido-...variabili piuttosto che setqloro? In questo momento, sembra che tu stia impostando i valori in modo permanente piuttosto che farlo per la durata della funzione.
Dan

@Dan sto seguendo lo schema dei comandi ido come ido-next-work-directory. Penso che le variabili vengano impostate in modo da sopravvivere attraverso la chiamata minibuffer di uscita e il successivo aggiornamento. Ma ancora non scrivo completamente gli interni ido!
Glucas,

Sì, mi stavo chiedendo se fossero successivamente rinfrescati comunque. Volevo solo fare un testa a testa.
Dan

4

Forse così:

(define-key ido-file-dir-completion-map (kbd "C-y") 'ido-yank)
(defun ido-yank ()
  (interactive)
  (if (file-exists-p (current-kill 0))
      (ido-fallback-command)
    (yank)))

Se l'attuale kill è un file esistente, C-y C-y probabilmente dovresti darti quello che vuoi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.