2013-08-06 10 views
5

Quando eseguo il tab-complete in un minibuffer ed Emacs visualizza un elenco di completamento in un nuovo buffer, come posso passare a quel buffer senza usare il mouse?In Emacs, come faccio a selezionare l'elenco di completamento con la tastiera?

Ho provato C-x o, ma è appena passato al primo buffer, da cui sono entrato nel minibuffer.

Ho anche provato C-x b, ma questo mi dà command attempted to use minibuffer while in minibuffer.

Infine, ho provato C-x <C-right>, che mi dà cannot switch buffers in minibuffer window.

EDIT: Ho parlato del completamento di minibuffer nel mio esempio, ma essere in grado di accedere all'elenco di completamento (utilizzando la tastiera) da un buffer regolare è anch'esso importante per me e non funziona. Il collegamento M-v è stato suggerito, ma sembra funzionare solo all'interno del minibuffer a cui si accede da M-x, in ogni altro buffer che ho provato, M-v è associato a scroll down command e non passa alla lista di completamento. Non sembra nemmeno che lavori in altri minibuffers. Ad esempio, non funziona nel minibuffer del comando shell invocato da M-!.

+0

Vedere il mio suggerimento nella modifica alla mia risposta qui sotto. –

risposta

2

È possibile utilizzare C-xo due volte o usare M--C-xo, che passa al buffer precedente anziché quello successivo.

+0

'C-x o' due volte non funziona, perché il primo comando chiude la lista di completamento. Tuttavia, l'applicazione di un argomento negativo al comando di commutazione del buffer funziona correttamente. Userei comunque 'C-- C-x o'. Inoltre, non inserisce il cursore al primo completamento, ma l'inizio del buffer, che fa schifo perché devo quindi spostarmi completamente verso il basso. È davvero così che la gente usa il completamento? – bug

+1

bug: No, ho il sospetto che pochissime persone interagiscano direttamente con il buffer di completamento. L'approccio normale è semplicemente continuare a filtrare le opzioni digitando e 'TAB'ing nel minibuffer fino a ottenere un risultato univoco, con il buffer di completamento che agisce solo come riferimento visivo. – phils

8

È possibile utilizzare Mv (documentato here) che commuta al buffer completamento e mette il cursore sulla prima esecuzione:

Digitando Mv, mentre nel minibuffer, seleziona la finestra che mostra il completamento lista (passaggio ai completamenti). Questo apre la strada all'uso dei comandi qui sotto. <PageUp> o <prior> fa lo stesso. È possibile anche selezionare la finestra in altri modi ...

EDIT: Sembra che in base alla tua modifica sulla domanda iniziale che quello che stai chiedendo è un modo per passare i completamenti tamponare più globalmente . C'è una funzione switch-to-completions che seleziona la lista completamenti - si potrebbe considerare vincolante che la funzione di una chiave di tua scelta, per esempio:

(define-key global-map (kbd "C-x t") 'switch-to-completions) 

Ad esempio, un legame mi permette ad esempio di passare a completamenti di "comando di Shell: "invocato da M-! e posiziona il cursore sul primo completamento possibile.

+0

Weirly abbastanza, questo non sembra funzionare per me. (Sto usando Emacs v24.2.1 btw.) Quando premo 'M-v' nel minibuffer dice solo' Inizio del buffer 'e non seleziona la lista di completamento. – bug

+0

Dispari. Che dire di premere 'PageUp' - dovrebbe funzionare altrettanto bene (sul mio Mac è' fn-Up'). Potresti provare a riavviare Emacs senza leggere il tuo file di inizializzazione, ad esempio 'emacs -q' –

+0

Potresti avere' M-v' associato ad un'altra funzione. –