No Emacs baunilha, tenho que fazer C-x b
e digitar manualmente o nome do buffer para alternar. Se eu esquecer o nome do buffer, tenho que clicar TAB
para listar as possíveis conclusões. Há algo que eu possa fazer para tornar esse processo mais rápido?
key-bindings
buffers
cycling
nixeagle
fonte
fonte
C-x C-<left/right>
para alternar buffers rapidamente. Quando preciso mudar para o buffer "mais distante", eu usoIBuffer
.Respostas:
Existe o modo ido que deve ajudar.
EDITAR:
coloque isso no seu arquivo init, para ativar o modo ido por padrão:
(ido-mode 1)
Agora,
C-x b
mostrará uma lista de candidatos.Coloque isso no seu arquivo init, se você preferir que os itens sejam exibidos verticalmente:
(setq ido-separator "\n")
Cortesia de ergoemacs
Deixe-me também sugerir este post falando sobre a mudança para o buffer anterior / seguinte.
fonte
Eu comecei recentemente a usar
C-x <left>
eC-x <right>
. Essas são as ligações padrão do Emacs - nada para configurar. Esquerda leva você de volta ao buffer anterior (inicialmente o mesmo queC-x b RET
), mas fazê-lo novamente leva ao terceiro buffer visitado mais recentemente. Se você está alternando bastante entre 3 ou 4 buffers, acho muito mais fácil do que tentar lembrar os nomes dos buffers.Também acabei de descobrir
C-x C-<left>
e estouC-x C-<right>
vinculado às mesmas funções para que você possa simplesmente manter pressionada a tecla Control e alternar entre x e as setas para alternar entre os buffers. Muito bom!fonte
Você poderia usar o Helm .
Na minha configuração, mudei
C-x b
paraM-l
. Isso aliadohelm-buffers-list
torna o processo muito rápido, pelo menos para mim.fonte
ido
oriswitchb
ouicicles
, coisas assim, mas elas são basicamente obsoletas por Helm. Sim,ace-jump-buffer
é legal, mas não é tão rápido quanto Helm, porque antes que você saiba qual tecla pressionar, é necessário encontrar o buffer na lista. O Helm permite restringir a lista com algumas teclas que você já conhece (como o nome do buffer). Eu usoC-TAB
para alternar buffers, carregar arquivos recentes, favoritos etc. Nada é mais rápido.helm
. Mas eu prefiro usarhelm-mini
, que também mostraRecentf
ahelm-buffers-list
.ivy-switch-buffer
.Apenas para adicionar ajustes que eu uso com o Ido já mencionado :
Também estou usando
ace-window
para alternar entre buffers eace-jump-mode
para pular entre janelas visíveis. Vem com alguns se acostumando, mas vale a pena tentar.Eu o combinei com
key-chord-mode
e puleiso
para o salto rápido:Todos os pacotes mencionados acima estão disponíveis através do gerenciador de pacotes da Melpa.
fonte
use-package
comrequire
para evitar confusão. No exemplo dado, não há necessidade específica de um usuário instalar um pacote adicional para implementar essa solução.Como @kuanyui diz em um comentário,
next-buffer
eprevious-buffer
são muito rápidos, se você tiver apenas alguns buffers para circular entre. (Para mais de alguns e para mais recursos de seleção de buffer, eu usoicicle-buffer
.)No entanto, por padrão,
next-buffer
eprevious-buffer
estão em uma chave de prefixoC-x
,.Isso significa que eles não são repetíveis : você não pode simplesmente bater
C-x <right> <right> <right>...
. Em vez disso, você deve vincular esses comandos a chaves diferentes e repetíveis, ou deve usarC-x <right> C-x <right> C-x <right>...
, o que não é muito rápido.Para versões repetíveis desses comandos, carregue a biblioteca
misc-cmds.el
e remapeie as versões irrepetíveis e vanilla, para as repetíveis definidas lá:(Da mesma forma, na mesma biblioteca, você encontrará uma versão
undo
repetível mesmo quando estiver em uma tecla de prefixo:.undo-repeat
)BTW, você pode tornar praticamente qualquer comando repetível (mesmo em uma tecla de prefixo), usando a função
repeat-command
(frommisc-cmds.el
). Isso é tudo o que foi necessário para definir a versão repetível denext-buffer
:fonte
C-,
eC-.
para obter repetibilidade, e enquanto estiver nele, definaC-x.
eC-x,
paraother-window
e(lambda()(interactive)(other-window -1))
. As janelas de ciclismo provavelmente precisam de menos repetibilidade, e você foge em um minuto, sem pacotes extras.next-buffer
eprevious-buffer
a melhor solução, independentemente de qualquer ligação de chave específica. Portanto, meu comentário.Estou surpreso que ninguém
iswitchb
tenha mencionado ainda. Pode não ser tão poderoso quantoido
, mas muito antes doido-mode
nascimentoiswitchb-mode
já era padrão para o emacs, e ainda é útil hoje em dia. Para tentar basta colocarno seu .emacs ou ativar via
M-x iswitchb-mode
.fonte
iswitchb
está obsoleto no Emacs 24.4. Toda a sua funcionalidade está disponívelido
agora.Use helm-buffer-list ou helm-mini para selecionar visualmente a entrada do buffer e a correspondência difusa. Pode fazer muitas coisas fora dos buffers de comutação. Você deve ver a demonstração no link.
fonte
Outros discutiram pacotes úteis para facilitar a vida com relação à troca de buffer / janela / quadro. (Eu pessoalmente uso o
helm
que é fenomenal.) Quero discutir mudanças mais simples que podem tornar a experiência do Emacs mais agradável.Para mim, a solução para meus problemas de buffer / quadro (porque acho que
C-x o
é o pior) não era um pacote; era simplesmente:C-;
paraother-window
(alternando entre janelas)C-'
paraother-frame
(alternando entre quadros). Na verdade, comecei a usar quadros muito mais depois de adicionar este atalho).help
janela que aparece) (ao ler páginas de manual, propósitos, etc) com qualquer janela anteriormente visível).Também pensei em compartilhar algumas idéias sobre combinações de teclas que os novatos podem achar úteis. (Desculpe se este é o lugar errado.) Não tenho sugestões específicas, mas uma "filosofia" que me permite manter um conjunto eficaz de combinações de teclas para mim.
Comandos usados com pouca freqüência não merecem fácil combinação de teclas.
keyfreq.el
e veja o que você realmente usa muito. Uso um método de sobrevivência do mais apto para decidir quais comandos recebem os imóveis mais valiosos do meu teclado.C-\
é um grande atalho (pelas razões discutidas em # 2) ... e seria um crime deixá-la mapeado para seu comando padrão:change-input-method
. (Talvez alguns de vocês usem muito, eu certamente não.)Os seguintes fatores determinam a facilidade e a velocidade de um atalho de teclado (começando pelo mais importante):
Ctrl
,Meta
, etc.). Por exemplo, é muito mais rápido para eu acertarC-c C-l C-p
do que acertarC-x o
. Pessoalmente, acho muito inconveniente ter que tirar aCtrl
tecla entre os pressionamentos sucessivos de uma determinada sequência de teclas; é muito mais fácil continuar pressionando o botão modificador (neste casoCtrl
). (Este exemplo específico pode ser influenciado pelo fato de eu ter remapeado minhaCtrl
chave e minhaCaps-Lock
chave.)C-c C-l C-p
do que acertarC-p C-' C-;
. (Tente e deve ser óbvio.) De um modo geral, é muito mais fácil usar sequências de pressionamento de tecla que usam mãos alternadas (ou, pelo menos, dedos alternados na mesma mão).Apenas alguns pensamentos que pensei que poderiam ser úteis para iniciantes. Eu posso adicionar um pouco mais tarde.
fonte
Eu uso
windmove.el
ebs.el
para alternar buffers rapidamente. Ambos os modos estão incluídos no Emacs.windmove.el
- muda para uma janela (um buffer que é exibido no momento) em uma direção especificada, por exemplo, esquerda, direita, cima, baixo.bs.el
- Eu usobs-cycle-next
ebs-cycle-previous
para alternar para o próximo buffer que atualmente não é mostrado em uma janela.Você pode configurar windmove com
(windmove-default-keybindings)
que irá ligar os comandos apropriados paraShift-Left Arrow
,Shift-Right Arrow
, etc.Para configurar
bs.el
, algo como isto funcionará:fonte
windmove.el
está na página "Switching Buffers" do EmacsWiki, além debs.el
operar em buffers, não em janelas.A maneira mais rápida de alternar buffers que eu conheço é com
ace-jump-buffer
. Um toque de tecla abre o menu do buffer e, em seguida, selecione a letra ao lado do buffer que você desejaace-jump-line-mode
. Isso funciona melhor para os 26 ou mais buffers mais recentes. Para alternar para buffers mais antigos no seu histórico de uso,ido-switch-buffer
é sempre uma boa escolha.fonte
Eu prefiro a navegação na guia no estilo do navegador. Liguei Ctrl + Tab e Ctrl + Shift + Tab aos buffers seguintes e anteriores, respectivamente:
fonte
Em termos gerais, existem duas maneiras de alternar buffers e a maioria das soluções se enquadra em uma delas.
É o que
C-x b
faz por padrão. O Ido oferece uma boa conclusão automática, para que você não precise tanto TAB TAB TAB. Projetos como leme, projétil etc tornam mais fácil, dando a você a capacidade de trabalhar com arquivos em um projeto etc, e junto com o ido, eles podem ser bastante úteis.Isso é útil quando você tem tantos buffers e deseja uma lista de todos eles. Você pode subir e descer o buffer e pressionar enter para visitar um arquivo específico. Ibuffer é muito bom para isso.
Eu uso os dois e é assim que você pode configurá-lo.
fonte
Além de ido, eu tenho a seguinte configuração.
No caso de modo maligno, use as seguintes combinações de teclas para alternar os buffers
Defina o nome do buffer como título da janela. Isso ajudará você a navegar com as combinações de teclas acima
Se você estiver usando o modo maligno, poderá tentar
evil-leader
. Vincule as chaves usadas com frequência ao líder. Por exemplo, você pode vincularC-x b
a<leader>-b
.Vincule o modo direcionado para
C-<f8>
. Agora, quando desejar abrir um arquivo no diretório, pressioneC-<f8>
, navegue até o nome do arquivo e pressione ema
vez deRET
. O buffer direcionado será eliminado imediatamente.Use o
recentf
modo para navegar pelos arquivos recentes.C-x C-r
Um último ponto importante é - use o teclado mecânico ergonômico. Assim, você pode pressionar a tecla 'ctrl' com facilidade e rapidez com o pulso, em vez de machucar o dedo mindinho.
Espero que isso possa ajudar alguém.
fonte
Como você pode ver nas outras respostas, existem várias maneiras de otimizar essa tarefa específica. Eu pessoalmente uso o Lusty Emacs como meu equipamento de comutação de buffer, pois ele lida com a conclusão difusa muito bem. Isso minimiza o número de pressionamentos de tecla necessários para selecionar o novo buffer, por exemplo, eu preciso apenas digitar oxr para alternar para ox-revelou.el , ou mesmo apenas na segunda vez em que ele também controla o histórico dos switches.
fonte
Se você quiser apenas continuar escovando seus buffers, adicione isso ao seu arquivo init:
Você precisa do pacote de chaves de ligação e pode alterar as ligações de acordo com seu desejo, mas eu achei essas ligações de teclas mais confortáveis. Antes de adicionar esse snippet, você precisa exigir a chave de ligação,
fonte
Eu uso C-Tab e CS-Tab como aplicativos gerais.
fonte
Essa não é uma solução muito elegante (pois usa macros em vez de funções) e não responde como pular rapidamente para qualquer buffer, mas apenas como pular para buffers usados recentemente. Mas funciona muito bem para mim:
Eu tenho uma série de macros usando
ido-switch-buffer
para pular para o buffer anterior, o buffer antes disso, o buffer antes disso, etc. E vinculei essas macros às combinações de teclas que considero convenientes.Para pular para o último buffer:
Para pular para o penúltimo buffer:
Para pular para o buffer antepenúltimo:
Etc. (você pode anunciar quantos
?\C-n
quiser voltar até o histórico de buffers visitados).Há uma função interna para ir para o buffer anterior, mas a vantagem de usar macros
ido-switch-buffer
é que você pode personalizar a variávelido-ignore-buffers
para remover buffers especiais como*Messages*
ou*scratch*
qualquer outro buffer indesejado da lista. Dessa forma, os únicos buffers para os quais você pula são os que realmente estão interessados em pular.fonte
Na minha VM, Cx ALT-RIGHT / LEFT está muito lento. Eu tenho que esperar o Cx se registrar na barra de status antes de poder fazer qualquer outra coisa. além de suas chaves demais. Então, mapeei C-TAB e CM-TAB para o buffer anterior e anterior, pois é o que faço na maioria dos programas do Windows. É fácil de fazer no emacs:
M-x
leva você à barra de status. Em seguida, digite oglobal-set-key
que solicitará a sequência de teclas que você deseja ligar (C-TAB
) e, em seguida, o comando ao qual deseja ligá-lo (next-buffer
). É isso aí!fonte