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 oper 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 oper 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-windowdue o più volte per selezionare una finestra: si seleziona una finestra desiderata in una chiamata (possibilmente su più frame).
Oltre a cambiare finestra, ace-windowpuoi fare di più (eliminare o scambiare finestre, ecc.), Vedi README .
ace-windowe poi visto switch-windowche 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-windowfino a quando non mi sono presentato ace-windowal 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-windowuna sequenza di tasti più facile da digitare.
Ad esempio, mi sono C-.legato other-windowe 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 oper 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 windowa una sequenza di tasti (molto più semplice) - ce l'ho legato C-;(e il mio Caps-Lockviene scambiato con Ctrltutto ciò che serve è un rapido tocco dei mignoli). A proposito, sono totalmente dipendente da alcune caratteristiche di helme icicles(cioè, non sono "anti-pacchetti" o altro); Penso solo che una soluzione semplice funzioni meglio qui.
M-oper other-window. Alcune modalità già M-ovincolante, in particolare diff-mode, ggtag-modee ibuffer-mode. Devi separarlo manualmente in ciascuna mappa delle modalità. unbind-keyfornito da bind-key.elè molto utile.
M-oe mi sono M-Olegato a ace-windowquando 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-numbercon M-<num>per cambiare rapidamente le finestre b / n. Concetto simile a questo
Senza utilizzare componenti aggiuntivi aggiuntivi, puoi continuare a utilizzare C-x ocon un prefisso opzionale per saltare molte finestre. Ad esempio: C-u 1 C-x oandrà alla finestra successiva nell'ordine (ad es. Cosa otterresti con la semplice C-x o), C-u 2 C-x opassa due finestre, C-u 3 C-x opassa tre finestre e così via.
Un estratto dal other-windowdocstring (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-upe le winmove-downfunzioni di M-left, M-right, M-upe M-downle 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 oconsente di selezionare le finestre per nome (o di andare in bicicletta).
Senza prefisso arg, C-x oè uguale al solito, a other-windowmeno 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-windowcon 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-chorde ace-window, entrambi sono disponibili in melpa.
ace-windowsta 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-chordconsente 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-wseleziona la prima finestra in ordine ciclico, 3 C-w C-wseleziona 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 windmovepiù, 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-windowsu tutti gli altri?