Quando eu C-s
posso pesquisar. Como devo executar uma função que eu poderia vincular, por exemplo, à C-r
qual me permitiria pesquisar nos resultados de alguma consulta de pesquisa predefinida?
Como o conteúdo da janela seria:
function xyz(a, b)
return a + b
end
Eu posso C-M-s
com function.*
como uma consulta e o resultado será function xyz(a, b)
.
Quero ter uma função em que possa inserir uma consulta e pesquisar nesses resultados (que seriam gerados automaticamente pelos meus olhos).
ATUALIZAR
Obrigado a todos pelas soluções. occur
, helm-occur
também funciona muito bem, mas aceitei a resposta de Jordon Biondo porque ele forneceu o código que eu precisava para responder completamente à minha pergunta.
helm-swoop
, mas sua pergunta (e especialmente o título) não é muito clara sobre isso. Talvez eu não tenha entendido sua pergunta porque não estou familiarizado com o leme.imenu
funcionou muito bem para mim! Exceto que eu procuro uma solução genérica para minha perguntaRespostas:
A abordagem simples seria usar apenas o rgrep.
use M-x
rgrep
e especifique a pesquisa por "função" no arquivo atual no diretório atual. Você pode agrupar isso em um comando para não precisar especificar as opções sempre:Isso produzirá um buffer pesquisável com as assinaturas de função e você poderá pular para as definições, se desejar.
fonte
grep
,rgrep
,occur
, E similares pesquisa só linha por linha . Ou seja, os contextos de pesquisa são linhas únicas. Eu pensei que o OP estava pedindo para procurar definições de função. Mas, como essa resposta foi aceita, acho que a pergunta apresentada não é realmente o que se queria.function xyz(a, b)
que, se sua lua estiver formatada corretamente, é exatamente o que você obterá.function xyz(a, b)
.Iria
occur
trabalhar para você?M-x
occur
ou, emM-s o
seguida, inserir sua consulta fornecerá uma lista de linhas correspondentes a essa expressão regular. Em seguida, você pode usarC-s
para pesquisar no buffer Ocorrer para refinar sua pesquisa nas linhas correspondentes.fonte
O Emacs tem um comando chamado
occur
que é muito adequado para esse tipo de tarefa. Se você tiver o Helm instalado, poderá usá-lohelm-occur
.Ocorrer
O
occur
comando faz parte do vanilla emacs e está vinculadoM-s o
por padrão. Occur solicitará uma regexp para procurar e, em seguida, abrirá uma nova janela mostrando todas as linhas no buffer atual que contêm uma correspondência. O*Occur*
buffer resultante pode ser pesquisado usandoisearch
(C-s
).M-s o function RET
para mostrar todas as linhas correspondentes à "função"C-x o
para mover o foco para o*Occur*
bufferC-s
para iniciar uma pesquisa nos resultados da pesquisaElmo Ocorre
Se você tiver o leme instalado, poderá
helm-occur
fazer algo semelhante. Nesse caso, o*Helm Occur*
buffer não será diretamente pesquisável comC-s
. No Helm, você pode procurar por vários termos de pesquisa apenas separando-os com um espaço.M-x helm-occur RET
abrir uma janela Helm Occurfunction
para mostrar todas as linhas que contêm "function"SPC foo
para restringir os resultados a linhas que também contêm fooEm qualquer um desses modos, selecionar a correspondência no buffer de ocorrência e pressionar Enter o levará para essa linha no código.
fonte
Se você usar os Sincelos da biblioteca , poderá fazer esse tipo de coisa facilmente. O que você está pedindo (se bem entendi) é pesquisar apenas em determinados contextos de pesquisa .
Por exemplo, como neste caso, você pode querer pesquisar apenas nas definições de função - os contextos de pesquisa são definições de função. No Lisp, isso seria coisas como
defun
s.Sincelos tem vários comandos predefinidos de pesquisa de Sincelos para pesquisar definições como esta. Estes são chamados coletivamente de comandos Icicles Imenu .
Para procurar apenas definições de comando, você pode usar o comando
icicle-imenu-command-full
. Para procurar definições de função único não-interativas, comando usoicicle-imenu-non-interactive-function-full
.Além da pesquisa de definições, você pode definir facilmente qualquer tipo de contexto a ser pesquisado. A maneira mais simples é fornecer uma regexp. O comando
icicle-search
solicita a regexp de definição de contexto de pesquisa. Como alternativa, você pode usar uma função para definir os contextos de pesquisa.Outras possibilidades incluem:
Pesquisando o texto de diferentes tipos de COISAS (por exemplo, sexps, frases, listas, seqüências de caracteres, comentários, elementos XML, ...), ou seja, ignorando outros textos fora das COISAS.
Pesquisando zonas de texto que forneceram propriedades de texto ou sobreposição, ou seja, ignorando outro texto.
NOTA:
Outras respostas aqui mencionadas
occur
e similares (helm-occur
) fornecem um tipo limitado de pesquisa de contexto: os contextos de pesquisa são apenas as linhas de um buffer.Isso é muito mais limitado que, digamos, pesquisando dentro de definições de funções inteiras, que é o que eu acho que você está pedindo. Com Sincelos , o comando
icicle-occur
(vinculado aC-c '
) permite pesquisar dentro de linhas como contextos de pesquisa.fonte
Com o Isearch + :
C-M-s .+function.+
, para pesquisar linhas inteiras que contêmfunction
.C-z .
seguido de uma regexp para algo que você deseja procurar nas linhas que contêmfunction
.(Opcional) Repita o item 2 com outros padrões (regexps) para corresponder na mesma linha. As correspondências podem estar em qualquer ordem dentro da linha.
Em vez da etapa 1, você pode começar
C-M-s .+ C-z . function
. O objetivo é pesquisar linhas inteiras que contenhamfunction
outros padrões que você desejar.Como
C-z .
funciona: solicita que um padrão embutido corresponda (por exemplofunction
). Ele envolve isso.*
de cada lado, para obter um padrão de linha completa (por exemplo.*function.*
). Ele adiciona um predicado de filtro que exige que sua string de pesquisa atual (.+
) também corresponda a esse padrão (por exemplo.*function.*
).Consulte Filtragem dinâmica de pesquisa para obter mais informações.
fonte