Estoy usando bash y me preguntaba si hay algún complemento en bash u otro shell que me permita hacer esto
cat tfnislong.txt
+ [tab]
completar al cat ThisFileNameIsSoLong.txt
igual que la finalización de pestañas en Sublime Text.
bash
shell
tab-completion
carpinterías
fuente
fuente
cat Th
+tab
?Respuestas:
Sé de https://github.com/mgalgs/fuzzy_bash_completion, que es un montón de funciones de shell que se utilizan
complete
.Sin embargo, creo que podríamos hacerlo un poco mejor, ser más concisos. Es hora de abrir su .bashrc o .profile ...
El gancho básico que usamos es este:
complete -o nospace -o filenames -F fuzzypath cd ls cat
-F opción significa usar una función de shell para completar la pestaña, donde las opciones se establecen en la
COMPREPLY
variable. Así por ejemplo:donde
DIRPATH
está todo antes del último / en su camino que está escribiendo yBASENAME
es donde está actualmente su cursor.FILTER
es donde entra en juego el fuzzy-ness. Básicamente, tomaBASENAME
e inserta un.*
entre cada carácter para producir nuestro fuzz regex.El resto es simplemente combinar la expresión regular con ls para producir
COMPREPLY
. Puede encontrar cosas más inteligentes para hacer aquí, tal vez confind
.También encontré que http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html es útil.
fuente
Puede encontrar fzf útil. Es un buscador difuso de propósito general escrito en Ruby que se puede usar con cualquier lista de cosas: archivos, procesos, historial de comandos, ramas git, etc.
Su script de instalación configurará la
CTRL-T
combinación de teclas para su shell. El siguiente GIF muestra cómo funciona.fuente
fzf
... (tput sc) y luego restaurarlo contput rc
...Para ir junto con su otra respuesta, es posible que desee buscar en zsh. Es compatible con versiones anteriores de bash, por lo que puede usarlo como un reemplazo directo, pero admite funciones significativamente ampliadas y una de ellas es la finalización de la pestaña contextual mejorada.
Las preguntas frecuentes de finalización de zsh amplían los casos de uso, pero creo que según su ejemplo, estaría más interesado en la
COMPLETE_IN_WORD
función. No es exactamente el comportamiento deseado, pero está cerca. El punto principal es que hay muchas maneras de ampliar la funcionalidad base de una manera quizás más accesible que usar bash.Aquí hay una extensión de coincidencia difusa que se aproximaría más específicamente a lo que desea; partido zsh-fuzzy
Para algunas ideas, puede echar un vistazo al popular marco oh-my-zsh que tiene una serie de funciones para administrar zsh y extenderlo. Es más de lo que desea, lo más probable, pero debajo de los complementos notará scripts de autocompletado para una variedad de roles. Para tener una idea de las capacidades.
fuente