ZSH - salida de toda la historia?

37

Recientemente cambié de bash a zsh. En bash, una forma (además de la búsqueda recursiva) que solía encontrar comandos ejecutados previamente era history | grep whatever, ¿dónde whateverestá el bit de comando que recuerdo?

En zsh, esto no está funcionando. historydevuelve solo unos pocos elementos, a pesar de que mi .zsh_historyarchivo contiene muchas entradas, para lo cual lo configuré.

¿Cómo puedo generar mi historial completo, adecuado para buscar grep?

Nathan Long
fuente

Respuestas:

48

El historial acepta un rango en las entradas zsh como [first] [last]argumentos, por lo tanto, para que se ejecuten todos history 0.

Para obtener la ayuda de zsh (al menos con la mente), escriba Alt-hsobre el comando de historial y esto le mostrará la ayuda para las funciones integradas.

Kyle Brandt
fuente
3
¡Excelente! Sin embargo, ese es un defecto molesto para mí, así que estoy agregando esto a mi archivo de alias:alias history="history 0"
Nathan Long
77
No es que importe, pero la lista del historial comienza en 1 y no en 0.
ggustafsson
2
Estoy usando este alias:alias h='history 1 | grep'
Harald Nordgren
3
Esto no parece funcionar para mí: mi ~/.zsh_historytiene 10066 líneas, pero history 0(o su equivalente fc -l 0), solo imprime 4999 líneas.
Jayhendren
2
Para la history 1 | grepgente, espero que lo sepas ctrl+r: ¡el mejor truco / atajo de todos los tiempos!
Emil Vatai
9

La respuesta aceptada es correcta, pero vale la pena señalar que no necesita llamar al grepbinario externo para hacer la búsqueda, ya que esa capacidad está integrada. Tengo esta función definida en mi .zshrc:

histsearch() { fc -lim "*$@*" 1 }

Notas:

  • fces el zsh incorporado que controla el historial interactivo. historyes equivalente a fc -l.

  • La -mbandera requiere un patrón, que debe ser citado.

  • los -i bandera agrega una marca de tiempo.

  • fctiene muchos más trucos bajo la manga (por ejemplo, limitar la búsqueda al historial interno de la sesión actual). Consulte la zshbuiltins(1)página del manual o la documentación oficial .

wjv
fuente
Mejor aún es usar el patrón "* $ @ *" (observe estrellas adicionales) en lugar de "$ @", ya que este último solo produce coincidencias exactas.
Piotr Dobrogost
1
Tienes toda la razón, @PiotrDobrogost! No estoy seguro de cómo logré enviar esta respuesta en el estado en que lo hice. Supongo que debo haber escrito esa función de memoria. Tal como está, no es muy útil, así que voy a editar la respuesta para incorporar los asteriscos.
wjv
3

Echa un vistazo a fzf . Ayuda no solo a encontrar "cualquier partícula" en su historial de shell, sino también en otros lugares interesantes, por ejemplo, historial del navegador, historial del directorio, etc.

fzf es un buscador difuso de línea de comandos. Eso significa que puede buscar partículas o fracciones de lo que está buscando y mostrará una colección de coincidencias que puede refinar continuamente. Es realmente un cambio de juego.

La página de inicio del autor contiene una serie de ejemplos ilustrativos.

Daniel Schaffrath
fuente
Considere agregar alguna referencia a esta respuesta que respalde lo que dice.
Pimp Juice IT
¡Bienvenido a Super User! Lea Cómo recomendar software para obtener la información mínima requerida y sugerencias sobre cómo recomendar software en Super User. Para que su respuesta sea útil incluso si los enlaces proporcionados rompen estos detalles, debe editarlos en su respuesta.
Digo reinstalar a Mónica el