Como alterno entre janelas rapidamente?
Muitas vezes, tenho várias janelas abertas e preciso alternar entre elas. Agora, eu uso C-x opara 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 opara 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-windowduas 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-windowpode fazer mais (excluir ou trocar janelas etc.), consulte o arquivo LEIA-ME .
ace-windowe depois vi o switch-windowque parece fazer aproximadamente a mesma coisa, exceto que as letras são mais pronunciadas. parece engraçado, temos os dois pacotes.
switch-windowaté me submeter ace-windowao 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-windowa 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 opara 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 windowa uma sequência de teclas (muito) mais fácil - eu a vinculei C-;(e a minha Caps-Locké trocada Ctrlpor tudo o que é preciso é um toque rápido nos dedos mínimos). Aliás, sou totalmente dependente de certos recursos do helme icicles(ou seja, não sou "anti-packages" nem nada); Eu apenas acho que uma solução simples funciona melhor aqui.
M-opara other-window. Alguns modos já tem M-oligação, nomeadamente diff-mode, ggtag-modee ibuffer-mode. Você precisa desatá-lo manualmente em cada mapa de modo. unbind-keyfornecido por bind-key.elé muito útil.
M-o, e estou M-Oligado a ace-windowquando 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-numbercom 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 oum prefixo opcional para pular essas janelas. Por exemplo: C-u 1 C-x ovai 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 oabre duas janelas, C-u 3 C-x oabre três janelas e assim por diante.
Um trecho da other-windowdoutrina (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-upe winmove-downfunções para M-left, M-right, M-upe M-downteclas 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 opoderá selecionar janelas pelo nome (ou andar de bicicleta).
Sem prefixo arg, C-x oé o mesmo de sempre, a other-windowmenos 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-windowque 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-chorde ace-windowambos estão disponíveis no melpa.
ace-windowestá 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-wseleciona a primeira janela em ordem cíclica, 3 C-w C-wescolhe 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 windmovemais, 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-windowsobre todos os outros?