Como alterno entre janelas rapidamente?
Muitas vezes, tenho várias janelas abertas e preciso alternar entre elas. Agora, eu uso C-x o
para chegar ao que eu quero. Existe um fluxo de trabalho mais eficiente disponível para isso?
Como alterno entre janelas rapidamente?
Muitas vezes, tenho várias janelas abertas e preciso alternar entre elas. Agora, eu uso C-x o
para chegar ao que eu quero. Existe um fluxo de trabalho mais eficiente disponível para isso?
Respostas:
Obviamente, prefiro uma janela de ás para isso. Você pode alternar entre janelas e quadros visíveis. Está no MELPA, você pode instalá-lo rapidamente. A única coisa que resta a fazer é vinculá-lo:
(global-set-key (kbd "C-x o") 'ace-window)
Ou talvez use um acorde mais curto, pois alternar janelas é uma tarefa comum:
(global-set-key (kbd "M-p") 'ace-window)
ace-window
É um substituto para o drop-in other-window
. Ao contrário do último, você nunca precisa ligar ace-window
duas ou mais vezes para selecionar uma janela: você seleciona a janela que deseja em uma chamada (possivelmente em vários quadros).
Além de alternar entre janelas, ace-window
pode fazer mais (excluir ou trocar janelas etc.), consulte o arquivo LEIA-ME .
ace-window
e depois vi o switch-window
que parece fazer aproximadamente a mesma coisa, exceto que as letras são mais pronunciadas. parece engraçado, temos os dois pacotes.
switch-window
até me submeter ace-window
ao MELPA.
ace-window
, ele tem mais personalização do que outros pacotes, eu acho. Ainda assim, uma ajuda no futuro é uma ligação de chave para uma função que seria de maneira semelhante à ação de troca inteligente, mas consumiria essa janela, resultando em uma janela maior no ponto e uma janela escolhida em tamanho menor (a consumida janela). A proporção deve ser determinada nesse caso como metade, um quarto ou um terço.
Uma maneira é usar windmove
. Com seus atalhos de teclado padrão, ele permite alternar para a janela ao lado da ativa no momento.
Ele é construído no Emacs, portanto não há necessidade de instalar nada; basta ativá-lo com a seguinte configuração mínima no seu arquivo init:
(windmove-default-keybindings)
Você pode então mudar para o Windows vizinhos utilizando as seguintes teclas (onde a seta utilizado intuitivamente define a direção em que você se move): S-<left>
, S-<right>
, S-<up>
, S-<down>
.
Se você preferir usar outro modificador, em vez de shift, poderá fornecê-lo como argumento windmove-default-keybindings
. Por exemplo:
(windmove-default-keybindings 'meta)
ou
(windmove-default-keybindings 'control)
Mais informações no Emacs Wiki .
(windmove-default-keybindings 'meta)
conforme sugerido no EmacsWiki.
Shift-arrow
) , mas quando você tem um monitor grande com muitas divisões, esse movimento rapidamente se torna pesado. Seria mais interessante de alguma forma enumerar janelas / divisões. Como ace-window
, mas com menos pressionamentos de tecla e um algoritmo óbvio para descobrir imediatamente o número desejado.
Você pode vincular other-window
a uma sequência de teclas mais fácil de digitar.
Por exemplo, eu tenho C-.
vinculado a other-window
, e C-,
obrigado a ir para a janela anterior.
(global-set-key (kbd "C-.") #'other-window)
(global-set-key (kbd "C-,") #'prev-window)
(defun prev-window ()
(interactive)
(other-window -1))
Isso é especialmente útil para mover várias janelas; depois de pressionar Control, você só precisa pressionar um único botão para ir para a próxima janela. Isso é muito mais fácil do que três pressionamentos de tecla por movimento.
C-x o
para other-window
é um dos poucos candidatos sólidos ao título de "pior atalho padrão do emacs". Minha solução (semelhante ao zck) foi voltar other window
a uma sequência de teclas (muito) mais fácil - eu a vinculei C-;
(e a minha Caps-Lock
é trocada Ctrl
por tudo o que é preciso é um toque rápido nos dedos mínimos). Aliás, sou totalmente dependente de certos recursos do helm
e icicles
(ou seja, não sou "anti-packages" nem nada); Eu apenas acho que uma solução simples funciona melhor aqui.
M-o
para other-window
. Alguns modos já tem M-o
ligação, nomeadamente diff-mode
, ggtag-mode
e ibuffer-mode
. Você precisa desatá-lo manualmente em cada mapa de modo. unbind-key
fornecido por bind-key.el
é muito útil.
M-o
, e estou M-O
ligado a ace-window
quando preciso de energia adicional.
window-numbering.el!
Atribuo a tecla de atalho ", 1", ", 2", ", 3" para alternar entre janelas específicas (observe que eu uso o modo maligno)
além disso, mostro o número da janela na linha de modo na cor PINK, sublinhada.
É uma dica visual que você nunca pode ignorar,
Essa é a maneira mais rápida de mudar de janela.
verifique 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 para minha configuração.
Sylvain Benner adotou minha idéia no espaço, mas as combinações de teclas são diferentes . Portanto, se você usa o spacemacs, obtém a solução mais rápida imediatamente.
window-number
com M-<num>
para alternar rapidamente as janelas preto e branco. Conceito semelhante a este
Sem usar nenhum complemento adicional, você pode continuar usando C-x o
um prefixo opcional para pular essas janelas. Por exemplo: C-u 1 C-x o
vai para a próxima janela na ordem (ou seja, o que você obteria com a planície C-x o
), C-u 2 C-x o
abre duas janelas, C-u 3 C-x o
abre três janelas e assim por diante.
Um trecho da other-window
doutrina (a função chamada por C-x o
:
COUNT especifica o número de janelas a serem puladas, começando pela janela selecionada, antes de fazer a seleção. Se COUNT for positivo, pule COUNT janelas para a frente. Se COUNT for negativo, pule -COUNT janelas para trás. COUNT zero significa não pular nenhuma janela; portanto, selecione a janela selecionada. Em uma chamada interativa, COUNT é o argumento do prefixo numérico. Retorno nulo.
Algumas pessoas podem se lembrar do editor Brief (engraçado o suficiente por uma empresa chamada Underware).
Tinha uma maneira elegante de alternar entre janelas visíveis. A seta M moveria o cursor para a janela diretamente em linha com a direção da tecla de seta.
Então, eu mapeados os winmove-left
, winmove-right
, winmove-up
e winmove-down
funções para M-left
, M-right
, M-up
e M-down
teclas na seguinte sequência no meu arquivo .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
Agora posso mover-me com facilidade entre janelas, independentemente de quão confusa eu tenha a configuração ... E pode ficar bastante confusa com o tamanho dos monitores hoje em dia ...
(windmove-default-keybindings 'meta)
!
Se você usar Icicles , C-x o
poderá selecionar janelas pelo nome (ou andar de bicicleta).
Sem prefixo arg, C-x o
é o mesmo de sempre, a other-window
menos que o quadro tenha apenas uma janela; nesse caso, é other-frame
.
Com um prefixo arg, C-x o
é um comando múltiplo que permite navegar entre janelas ou quadros por nome (ou de bicicleta). Navegar entre janelas usa multi-comando icicle-select-window
; navegando entre os usos de quadros icicle-select-frame
.
Qual navegação é usada depende do prefixo arg:
Zero prefixo arg (por exemplo C-0
): se o quadro selecionado tiver várias janelas, isto é
icicle-select-window
, com janelas no mesmo quadro que os candidatos. Caso contrário (quadro de janela única), é isso icicle-select-frame
.
C-u
: Se o quadro selecionado tiver várias janelas, é o caso
icicle-select-window
, com as janelas de todos os quadros visíveis como candidatas. Caso contrário, é isso icicle-select-frame
.
C-u C-u
: icicle-select-window
, com janelas de todos os quadros como candidatos (incluindo quadros iconificados ou ocultos).
Como sempre em Sincelos , você pode combinar (a) a conclusão , digitando o texto para restringir o conjunto de candidatos correspondentes (nomes de janelas ou quadros, neste caso), com (b) ciclismo (entre candidatos correspondentes).
Considere usar um acorde para pular rapidamente entre janelas. Acho muito mais rápido do que pegar uma tecla modificadora (e menos cansativa também).
Minha escolha de pacote a ser usada é o ace-window
que permite navegar em várias janelas mais facilmente do que apenas other-window
.
(require 'key-chord)
(key-chord-define-global "xo" 'ace-window)
(key-chord-mode +1)
Obviamente, para usar isso, você precisa key-chord
e ace-window
ambos estão disponíveis no melpa.
ace-window
está fazendo o trabalho como na resposta de @ abo-abo. Parece-me que, nesse contexto, a combinação de teclas específica a ser usada faria mais sentido como um comentário do que como uma resposta. Apenas meus dois centavos.
key-chord
é possível vincular combinações de teclas muito acessíveis. O exemplo de ligação de xo
é mais rápido que C-x o
(profundidade de um versus dois). Essa resposta pode ser reformulada para enfatizar que a resposta é ortogonal às outras respostas sobre a seleção de funções (e ace-window
é apenas uma das muitas opções que podem ser vinculadas da maneira descrita). Mantenha esta resposta como distinta!
Algumas boas respostas aqui, também sou fã do WinMove, mas vinculo-o ao C- porque o modo org usa M- para manipular títulos
(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)
Onde fica realmente bom é se você combiná-lo com o Hydra . Seguindo os exemplos em seu wiki , criei meu próprio monstro:
(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)
Isso permite alterar janelas, redimensioná-las, mover buffers de janela para janela, alternar buffers, kill buffers e até desfazer configurações de janelas via modo vencedor, além de integrar o leme. Para sair da hidra, basta pressionar a seta ou outra tecla que não esteja na hidra. Você pode encontrar as funções "hydra-move" nos exemplos da hidra. O melhor da hidra é que não preciso me lembrar de todas essas teclas e seus "modestos"; assim, quando estiver na hidra, tudo estará disponível como uma única tecla. pressione.
(windmove-default-keybindings 'control)
.
Se você usar evil-mode
, basta usar um prefixo numérico com C-w C-w
( evil-window-next
) para escolher a janela que deseja. Então: 1 C-w C-w
seleciona a primeira janela em ordem cíclica, 3 C-w C-w
escolhe a terceira janela em ordem cíclica e assim por diante.
O Ace Jump permite que você navegue com o ponteiro em todas as palavras da tela, independentemente da janela ou moldura em que estão, portanto, não é tão diferente de usar a Ace Window ou a Switch Window.
Uma vantagem é que, ao pular janelas, você também pode posicionar o ponteiro com alguma precisão.
Ainda acho um pouco complicado ou perturbador, e acho que estou usando windmove
mais, porque é muito simples, mas ainda uso o Ace Jump quando leio em outra janela ou moldura e quero ir para um local lá.
Como sempre, existem centenas de maneiras diferentes de conseguir isso. Minha maneira preferida é usar o NumberedWindows . Em seguida, defino o seguinte atalho de teclado usando Super e as teclas 1-9.
(global-set-key (kbd "s-1") (lambda() (interactive) (window-number-select 1)))
Entro em um pouco mais de detalhes sobre esse assunto exato com um post recente que você pode ler em Afternoon Coder .
Você também pode optar por usar a janela do comutador como um substituto visual paraC-x o
switch-window
sobre todos os outros?