Cuando C-spuedo buscar. ¿Cómo debo hacer una función que pueda vincular, por ejemplo C-r, que me permita buscar en los resultados de alguna consulta de búsqueda predefinida?
El contenido similar de la ventana sería:
function xyz(a, b)
return a + b
end
Puedo C-M-scon function.*una consulta y el resultado será function xyz(a, b).
Quiero tener una función en la que pueda ingresar una consulta y buscar esos resultados (que se generarían detrás de mis ojos automáticamente).
ACTUALIZAR
Gracias a todos por las soluciones. occur, helm-occurtambién funciona muy bien, pero acepté la respuesta de Jordon Biondo porque proporcionó el código que necesitaba para responder mi pregunta por completo.

helm-swoop, pero su pregunta (y especialmente el título) no es muy clara al respecto. Tal vez no recibí tu pregunta porque no estoy familiarizado con el timón.imenufuncionó muy bien para mí! Excepto que busco una solución genérica para mi preguntaRespuestas:
El enfoque simple sería simplemente usar rgrep.
use M-x
rgrepy especifique la búsqueda de "función" en el archivo actual en el directorio actual. Puede resumir esto en un comando para no tener que especificar las opciones cada vez de esta manera:Esto generará un búfer de búsqueda con las firmas de funciones y puede saltar a las definiciones si lo desea.
fuente
grep,rgrep,occur, Y similares búsqueda sólo línea por línea . Es decir, los contextos de búsqueda son líneas simples. Pensé que el OP estaba pidiendo buscar definiciones de funciones. Pero dado que esta respuesta fue aceptada, supongo que la pregunta planteada no es realmente lo que se quería.function xyz(a, b), si su lua está formateada correctamente es exactamente lo que obtendrá.function xyz(a, b).¿
occurFuncionaría para ti?M-xoccuroM-s oluego ingresar su consulta le proporcionará una lista de líneas que coinciden con la expresión regular. Luego puede usarC-spara buscar dentro del búfer Occur para refinar su búsqueda dentro de las líneas coincidentes.fuente
Emacs tiene un comando llamado
occurque se adapta muy bien a este tipo de tarea. Si tiene instalado Helm, puede usarlohelm-occuren su lugar.Ocurrir
El
occurcomando es parte de vanilla emacs y está vinculadoM-s ode forma predeterminada. Occur le pedirá una expresión regular para buscar, y luego abrirá una nueva ventana que muestra todas las líneas en el búfer actual que contienen una coincidencia. El*Occur*búfer resultante se puede buscar usandoisearch(C-s).M-s o function RETpara mostrar todas las líneas que coinciden con "función"C-x opara mover el foco al*Occur*búferC-spara comenzar una búsqueda dentro de los resultados de búsquedaOcurre el timón
Si tiene instalado el timón, puede
helm-occurhacer algo similar. En este caso,*Helm Occur*no se podrá buscar directamente en el búferC-s. En Helm, puede buscar varios términos de búsqueda simplemente separándolos con un espacio.M-x helm-occur RETabrir una ventana de Helm Occurfunctionpara mostrar todas las líneas que contienen "función"SPC foopara reducir los resultados a líneas que también contienen fooEn cualquiera de estos modos, al seleccionar la coincidencia en el búfer de ocurrencia y presionar Intro, saltará a esa línea en el código.
fuente
Si usa la biblioteca Icicles , puede hacer este tipo de cosas fácilmente. Lo que está pidiendo (si lo entiendo correctamente) es buscar solo dentro de ciertos contextos de búsqueda .
Por ejemplo, como en este caso, es posible que desee buscar solo dentro de las definiciones de funciones : los contextos de búsqueda son definiciones de funciones. En Lisp, esto sería cosas como
defuns.Icicles tiene varios comandos de búsqueda de Icicles predefinidos para buscar definiciones como esta. Estos se denominan colectivamente comandos Icicles Imenu .
Para buscar solo definiciones de comandos, puede usar el comando
icicle-imenu-command-full. Para buscar solo definiciones de funciones no interactivas, use el comandoicicle-imenu-non-interactive-function-full.Más allá de la búsqueda de definiciones, puede definir fácilmente cualquier tipo de contexto para buscar. La forma más simple es proporcionar una expresión regular. El comando le
icicle-searchsolicita la expresión regular de búsqueda que define el contexto. Alternativamente, puede usar una función para definir los contextos de búsqueda.Otras posibilidades incluyen:
Buscar el texto de diferentes tipos de COSAS (p. Ej., Sexps, oraciones, listas, cadenas, comentarios, elementos XML, ...), es decir, ignorar otro texto fuera de las COSAS.
Buscar zonas de texto que tienen propiedades de texto o superposición, es decir, ignorar otro texto.
NOTA:
Otras respuestas aquí que mencionan
occury similares (helm-occur) proporcionan un tipo limitado de búsqueda de contexto: los contextos de búsqueda son solo las líneas de un búfer.Eso es mucho más limitado que, por ejemplo, buscar dentro de las definiciones de funciones completas, que es lo que creo que está pidiendo. Con Icicles , el comando
icicle-occur(vinculado aC-c ') le permite buscar dentro de líneas como contextos de búsqueda.fuente
Con Isearch + :
C-M-s .+function.+, para buscar líneas completas que contenganfunction.C-z .seguido de una expresión regular de algo que desea buscar en las líneas que contienenfunction.(Opcional) Repita el n. ° 2 con otros patrones (expresiones regulares) para que coincidan en la misma línea. Las coincidencias pueden estar en cualquier orden dentro de la línea.
En lugar del paso 1, puede comenzar con
C-M-s .+ C-z . function. El objetivo es buscar líneas enteras que contenganfunctionjunto con cualquier otro patrón que desee.Cómo
C-z .funciona: le solicita un patrón en línea que coincida (pfunction. Ej .). Envuelve eso con.*cada lado, para obtener un patrón de línea completa (por ejemplo.*function.*). Agrega un predicado de filtro que requiere que su cadena de búsqueda actual (.+) también coincida con ese patrón (por ejemplo.*function.*).Consulte Filtrado dinámico de Isearch para obtener más información.
fuente