Cuando C-s
puedo 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-s
con 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-occur
tambié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.imenu
funcionó 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
rgrep
y 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)
.¿
occur
Funcionaría para ti?M-x
occur
oM-s o
luego ingresar su consulta le proporcionará una lista de líneas que coinciden con la expresión regular. Luego puede usarC-s
para buscar dentro del búfer Occur para refinar su búsqueda dentro de las líneas coincidentes.fuente
Emacs tiene un comando llamado
occur
que se adapta muy bien a este tipo de tarea. Si tiene instalado Helm, puede usarlohelm-occur
en su lugar.Ocurrir
El
occur
comando es parte de vanilla emacs y está vinculadoM-s o
de 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 RET
para mostrar todas las líneas que coinciden con "función"C-x o
para mover el foco al*Occur*
búferC-s
para comenzar una búsqueda dentro de los resultados de búsquedaOcurre el timón
Si tiene instalado el timón, puede
helm-occur
hacer 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 RET
abrir una ventana de Helm Occurfunction
para mostrar todas las líneas que contienen "función"SPC foo
para 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
defun
s.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-search
solicita 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
occur
y 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 contenganfunction
junto 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