Come posso passare rapidamente da una finestra all'altra?
Spesso ho più finestre aperte e devo passare da una all'altra. In questo momento, uso C-x o
per arrivare a quello che voglio. È disponibile un flusso di lavoro più efficiente per questo?
Come posso passare rapidamente da una finestra all'altra?
Spesso ho più finestre aperte e devo passare da una all'altra. In questo momento, uso C-x o
per arrivare a quello che voglio. È disponibile un flusso di lavoro più efficiente per questo?
Risposte:
Ovviamente preferisco la finestra dell'asso per questo. È possibile alternare tra finestre e cornici visibili. È in MELPA, puoi installarlo rapidamente. L'unica cosa che resta da fare è legarla:
(global-set-key (kbd "C-x o") 'ace-window)
O forse usare un accordo di chiave più breve, poiché il passaggio da una finestra all'altra è un'attività comune:
(global-set-key (kbd "M-p") 'ace-window)
ace-window
È un sostituto drop-in per other-window
. A differenza di quest'ultimo, non è mai necessario chiamare ace-window
due o più volte per selezionare una finestra: si seleziona una finestra desiderata in una chiamata (possibilmente su più frame).
Oltre a cambiare finestra, ace-window
puoi fare di più (eliminare o scambiare finestre, ecc.), Vedi README .
ace-window
e poi visto switch-window
che sembra fare più o meno la stessa cosa, tranne per il fatto che le lettere sono più pronunciate. sembra divertente che abbiamo entrambi i pacchetti.
switch-window
fino a quando non mi sono presentato ace-window
al MELPA.
ace-window
, ha più personalizzazioni rispetto ad altri pacchetti immagino. Tuttavia, in futuro si potrebbe essere di aiuto è un legame chiave con una funzione che sarebbe in un modo simile all'azione di scambio intelligente ma consumerebbe quella finestra risultante in una finestra più grande in corrispondenza di un punto e una finestra scelta di dimensioni più piccole (il mangiato finestra in alto). Il rapporto dovrebbe essere determinato in questo caso come può essere la metà, un quarto o un terzo.
Un modo è usare windmove
. Con le sue combinazioni di tasti predefinite, consente di passare alla finestra accanto a quella attualmente attiva.
È incorporato in Emacs, quindi non è necessario installare nulla; basta attivarlo con la seguente configurazione minima nel file init:
(windmove-default-keybindings)
È quindi possibile passare a Windows limitrofi utilizzando i seguenti tasti (dove la freccia usata intuitivamente definisce la direzione in cui si muove): S-<left>
, S-<right>
, S-<up>
, S-<down>
.
Se preferisci utilizzare un altro modificatore anziché shift, puoi fornirlo come argomento a windmove-default-keybindings
. Per esempio:
(windmove-default-keybindings 'meta)
o
(windmove-default-keybindings 'control)
Maggiori informazioni su Emacs Wiki .
(windmove-default-keybindings 'meta)
come suggerito su EmacsWiki.
Shift-arrow
) , ma quando hai un grande monitor con molte divisioni, un tale movimento diventa rapidamente ingombrante. Sarebbe più interessante enumerare in qualche modo windows / split. Come ace-window
, ma con meno pressioni di tasti e un ovvio algoritmo per capire immediatamente il numero desiderato.
È possibile associare other-window
una sequenza di tasti più facile da digitare.
Ad esempio, mi sono C-.
legato other-window
e sono C-,
andato alla finestra precedente.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
Ciò è particolarmente utile per spostare più finestre; una volta premuto Control, è sufficiente premere un solo pulsante per passare alla finestra successiva. Questo è molto più semplice di tre pressioni di tasti per mossa.
C-x o
per other-window
è uno dei pochi contendenti solidi per il titolo di "peggior collegamento predefinito di emacs". La mia soluzione (simile a zck) è stata quella di ricollegarmi other window
a una sequenza di tasti (molto più semplice) - ce l'ho legato C-;
(e il mio Caps-Lock
viene scambiato con Ctrl
tutto ciò che serve è un rapido tocco dei mignoli). A proposito, sono totalmente dipendente da alcune caratteristiche di helm
e icicles
(cioè, non sono "anti-pacchetti" o altro); Penso solo che una soluzione semplice funzioni meglio qui.
M-o
per other-window
. Alcune modalità già M-o
vincolante, in particolare diff-mode
, ggtag-mode
e ibuffer-mode
. Devi separarlo manualmente in ciascuna mappa delle modalità. unbind-key
fornito da bind-key.el
è molto utile.
M-o
e mi sono M-O
legato a ace-window
quando ho bisogno della potenza aggiuntiva.
window-numbering.el!
Assegno il tasto di scelta rapida ", 1", ", 2", ", 3" per passare a una finestra specifica (si noti che utilizzo la modalità male)
inoltre, visualizzo il numero della finestra sulla riga della modalità in colore ROSA, sottolineato.
È un suggerimento visivo che non puoi mai ignorare,
Questo è il modo più veloce per cambiare finestra.
controllare https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-evil.el e https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-modeline .el per la mia configurazione.
Sylvain Benner ha adottato la mia idea nei veicoli spaziali, ma le combinazioni di tasti sono diverse . Quindi, se usi spacemacs, ottieni la soluzione più veloce fuori dalla scatola.
window-number
con M-<num>
per cambiare rapidamente le finestre b / n. Concetto simile a questo
Senza utilizzare componenti aggiuntivi aggiuntivi, puoi continuare a utilizzare C-x o
con un prefisso opzionale per saltare molte finestre. Ad esempio: C-u 1 C-x o
andrà alla finestra successiva nell'ordine (ad es. Cosa otterresti con la semplice C-x o
), C-u 2 C-x o
passa due finestre, C-u 3 C-x o
passa tre finestre e così via.
Un estratto dal other-window
docstring (la funzione chiamata da C-x o
:
COUNT specifica il numero di finestre da saltare, a partire dalla finestra selezionata, prima di effettuare la selezione. Se COUNT è positivo, salta COUNT finestre in avanti. Se COUNT è negativo, salta indietro di -COUNT finestre. COUNT zero significa non saltare nessuna finestra, quindi seleziona la finestra selezionata. In una chiamata interattiva, COUNT è l'argomento prefisso numerico. Restituisce zero.
Alcune persone potrebbero ricordare l'editor Brief (abbastanza divertente prodotto da una società chiamata Underware).
Aveva un modo pulito per passare da una finestra all'altra. La freccia M sposta il cursore nella finestra direttamente in linea con la direzione del tasto freccia.
Così, ho mappato i winmove-left
, winmove-right
, winmove-up
e le winmove-down
funzioni di M-left
, M-right
, M-up
e M-down
le chiavi come segue nel mio file .emacs -
(global-set-key [M-left] 'windmove-left) ; move to left window
(global-set-key [M-right] 'windmove-right) ; move to right window
(global-set-key [M-up] 'windmove-up) ; move to upper window
(global-set-key [M-down] 'windmove-down) ; move to lower window
Ora posso spostarmi facilmente tra le finestre, indipendentemente da quanto sia ingombra la configurazione ... E può diventare piuttosto ingombra con le dimensioni dei display al giorno d'oggi ...
(windmove-default-keybindings 'meta)
!
Se si utilizza Icicles quindi C-x o
consente di selezionare le finestre per nome (o di andare in bicicletta).
Senza prefisso arg, C-x o
è uguale al solito, a other-window
meno che il frame non abbia una sola finestra, nel qual caso lo è other-frame
.
Con un prefisso arg, C-x o
è un multi-comando che ti consente di navigare tra le finestre o i frame per nome (o in bicicletta). La navigazione tra le finestre utilizza multi-comando icicle-select-window
; navigare tra gli usi dei frame icicle-select-frame
.
La navigazione utilizzata dipende dal prefisso arg:
Zero prefix arg (es. C-0
): Se il frame selezionato ha più finestre, allora è così
icicle-select-window
, con windows nello stesso frame dei candidati. Altrimenti (cornice a finestra singola), questo è icicle-select-frame
.
C-u
: Se il frame selezionato ha più finestre, allora è così
icicle-select-window
, con le finestre di tutti i frame visibili come candidati. Altrimenti, questo è icicle-select-frame
.
C-u C-u
: icicle-select-window
con le finestre di tutti i frame come candidati (inclusi frame iconificati o nascosti).
Come sempre in Icicles , puoi combinare (a) il completamento , digitando il testo per restringere l'insieme dei candidati corrispondenti (nomi di finestre o frame, in questo caso), con (b) andare in bicicletta (tra i candidati corrispondenti).
Prendi in considerazione l'uso di un accordo chiave per saltare rapidamente tra le finestre. Lo trovo molto più veloce che cercare un tasto modificatore (e anche meno sforzo sulle mie mani).
La mia scelta del pacchetto da utilizzare è ace-window
, che consente di navigare su più finestre più facilmente di un semplice other-window
.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
Ovviamente per usare questo è necessario key-chord
e ace-window
, entrambi sono disponibili in melpa.
ace-window
sta facendo il lavoro come nella risposta di @ abo-abo. Mi sembra che, in questo contesto, la specifica combinazione di tasti da utilizzare avrebbe più senso come commento piuttosto che come risposta. Solo i miei due centesimi.
key-chord
consente di associare combinazioni di chiavi molto accessibili. L'esempio di associazione di xo
è più veloce di C-x o
(profondità di uno contro due). Questa risposta potrebbe essere riformulata per sottolineare che la risposta è ortogonale alle altre risposte sulla selezione della funzione (ed ace-window
è solo una delle molte scelte che potrebbero essere associate nel modo descritto). Mantieni questa risposta distinta!
Alcune buone risposte qui, sono anche un fan di WinMove, ma lo associo a C- perché org-mode usa M- per manipolare le intestazioni
(define-key global-map (kbd "C-<up>") 'windmove-up)
(define-key global-map (kbd "C-<down>") 'windmove-down)
(define-key global-map (kbd "C-<left>") 'windmove-left)
(define-key global-map (kbd "C-<right>") 'windmove-right)
Dove diventa davvero buono è se lo si combina con Hydra . Seguendo gli esempi sul loro wiki ho creato il mio mostro:
(defhydra hydra-windows ()
"C-arrow = switch, S-arrow = size, M-arrow = move"
("C-<left>" windmove-left nil)
("C-<right>" windmove-right nil)
("C-<up>" windmove-up nil)
("C-<down>" windmove-down nil)
("S-<left>" hydra-move-splitter-left nil)
("S-<right>" hydra-move-splitter-right nil)
("S-<up>" hydra-move-splitter-up nil)
("S-<down>" hydra-move-splitter-down nil)
("M-<left>" buf-move-left nil)
("M-<right>" buf-move-right nil)
("M-<up>" buf-move-up nil)
("M-<down>" buf-move-down nil)
("p" previous-buffer "prev-buf")
("n" next-buffer "next-buf")
("1" delete-other-windows "1")
("d" delete-window "del")
("k" kill-buffer "kill")
("s" save-buffer "save")
("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
("r" winner-redo "redo")
("b" helm-mini "helm-mini" :exit t)
("f" helm-find-files "helm-find" :exit t)
("|" (lambda () (interactive) (split-window-right) (windmove-right)))
("_" (lambda () (interactive) (split-window-below) (windmove-down)))
("q" nil "cancel")
)
(global-set-key (kbd "M-#") 'hydra-windows/body)
Questo mi permette di cambiare le finestre, ridimensionarle, spostare i buffer da una finestra all'altra, scorrere i buffer, eliminare i buffer e persino annullare le configurazioni delle finestre tramite la modalità vincitore e integra anche il timone. Per uscire dall'idra, basta premere la freccia o qualche altro tasto non presente nell'idra. Puoi trovare le funzioni di "spostamento dell'idra" negli esempi dell'idra. La cosa grandiosa dell'idra è che non devo ricordare tutte quelle combinazioni di tasti e la sua "modalità", quindi una volta che sei nell'idra tutto è disponibile come un singolo tasto stampa.
(windmove-default-keybindings 'control)
.
Se lo usi evil-mode
, puoi semplicemente usare un prefisso numerico con C-w C-w
( evil-window-next
) per selezionare la finestra desiderata. Quindi: 1 C-w C-w
seleziona la prima finestra in ordine ciclico, 3 C-w C-w
seleziona la terza finestra in ordine ciclico e così via.
Ace Jump ti consente di spostare il puntatore su tutte le parole di uno schermo, indipendentemente dalla finestra o dalla cornice in cui si trovano, quindi non è così diverso dall'uso di Ace Window o Switch Window.
Un vantaggio potrebbe essere che mentre salti le finestre puoi anche posizionare il puntatore con una certa precisione.
Lo trovo ancora un po 'ingombrante o distratto, e trovo che ne sto usando di windmove
più, perché è molto semplice, ma uso ancora Ace Jump quando ho letto in un'altra finestra o frame e voglio spostarmi in un punto lì.
Come al solito, ci sono centinaia di modi diversi per ottenere questo risultato. Il mio modo preferito è usare NumberedWindows . Ho quindi impostato la seguente combinazione di tasti usando Super e i tasti 1-9.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
Vado un po 'più in dettaglio su questo argomento esatto con un mio recente post che puoi leggere su Afternoon Coder .
Puoi anche decidere di usare switch-window come sostituto visivo diC-x o
switch-window
su tutti gli altri?