No momento, tenho meu quadro do Emacs dividido verticalmente e estou olhando para dois buffers diferentes nas duas janelas.
Gostaria de ir a uma palavra em um buffer, pressionar algumas teclas e ter as ocorrências dessa palavra (se houver) destacadas no outro buffer, rolando para ela, se necessário.
Existe uma maneira de fazer isso?
Na captura de tela acima, com o cursor logo antes de "bar" no buffer esquerdo, eu gostaria de poder <fazer alguma coisa> e ver rapidamente onde "bar" está no buffer direito.
Nota: Isso está relacionado a Como encontro texto em vários buffers abertos? no sentido de que, se eu pudesse fazer uma pesquisa através do "outro" buffer, faria o que eu queria. Mas nenhuma das respostas é exatamente o que eu quero:
- As
occur
soluções baseadas abrem uma nova janela que mostra as linhas correspondentes, enquanto eu gostaria de manter minhas duas janelas ainda exibidas - na verdade, procurarei no outro buffer o contexto em torno da partida, mostrando apenas a linha correspondente não é muito útil. multi-isearch-buffers
exige que eu especifique a lista de buffers toda vez que desejar fazer essa pesquisa (várias vezes), em vez de buscá-la automaticamente como os dois buffers exibidos. Mais importante, quando inicio uma janela e executo a pesquisa, quando encontra a correspondência no outro buffer, ele exibe esse buffer nessa janela, para que ambas as janelas exibam o mesmo (outro) buffer. Então Cg coloca tudo de volta e não consigo mais ver a palavra destacada no outro buffer.icicle-search
possui tantos recursos que um deles pode fazer isso, mas eu não consegui encontrar nada depois de uma análise superficial da documentação.
C-s C-w C-x o C-s C-s
não parece tão ruim para mim. (Você não precisa de umC-s
logo após oC-w
.)C-s C-w C-x o C-s C-s C-x o
realmente parece boa.Respostas:
Você pode usar um pacote chamado
highlight-global
que está disponível no github, mas não no Melpa (como foi escrito).A
highlight-frame-toggle
função definida neste pacakge destacará a palavra no ponto ou a região selecionada em qualquer lugar do quadro (em todos os buffers). Isso, no entanto, não faria a rolagem automática para a palavra destacada necessária. Ele escolhe uma cor de destaque diferente à medida que você destaca mais palavras sem limpar os destaques anteriores.Aqui está uma captura de tela da aparência:
Clique para ver melhor a captura de tela
fonte
helm possui interfaces que podem atingir esse objetivo, gravei um Gifcast para demonstrar o pacote helm-swoop :
Depois de iniciar a
helm-swoop
pesquisa, posso reduzir para menos candidatos inserindo outros tokens separados por espaço ou pressionarC-p
eC-n
alternar para o próximo e rolar no buffer de destino ao mesmo tempo.fonte
helm-swoop
.C-s C-w C-x o C-s C-s C-x o
(que é o que estou usando agora e parece bom, na verdade).Que tal usar
highlight-regexp
para destacar o símbolo atual (ou palavra, região etc.) na outra janela?Aqui estão algumas funções que podem funcionar. O primeiro encontrará o símbolo no ponto, pule para a outra janela e destaque-o. O segundo pula para a outra janela e remove os destaques.
Nos dois casos, isso retrocede e a janela atual permanece ativa no final. Não tenho certeza se é isso que você deseja; caso contrário, interrompa a
other-window
chamada final .Essas funções também podem ser aprimoradas verificando e correspondendo à região ativa; lidar com o caso em que não há outra janela visível; etc.
fonte
highlight-frame-toggle
comando mencionado em outra resposta parece ser uma versão mais refinada disso, então acho que você não precisa fazer o seu próprio.