Me gustaría escribir en la terminal como lo hago en emacs:
emacs 2019-*subject*
Cuando golpeo Tabobtengo el primer partido:
2019-08-03-subject.markdown
Lo que me gustaría es que me muestre las opciones como:
2019-08-03-subject.markdown 2019-bla-bla-subject-predicate.markdown etc...
Busqué en todas partes en línea y no puedo creer que esto no sea una característica.
Haymuchos similarpreguntas formuladas.Las respuestas no funcionan como las quiero (como se muestra arriba). Otras soluciones que probé:aquí.
PD: uso Ubuntu 16. Esta es una funcionalidad típica que encuentro en emacs cuando abro archivos. Sería muy conveniente.
Respuesta1
Lo que sucede después Tabdepende de los guiones de finalización.esta respuestame hace creer que el comportamiento deseado estaba ahí para al menos un usuario en 2013, pero en 2019 el comportamiento en mi Debian 9 es como lo describiste; posiblemente los guiones/comportamiento hayan cambiado desde entonces.
Además, Bash elige un script según el comando escrito (primera palabra en la línea actual). No es inmediatamente obvio que un solo cambio pueda afectar todas las terminaciones para proporcionar lo que desea (supongo que la _filedir
función es un buen comienzo).
Afortunadamente puedes conseguir posibles ampliaciones bajo demanda. De man 1 bash
(debajo del READLINE
encabezado):
glob-complete-word
(M-g
)
La palabra antes del punto se trata como un patrón para la expansión del nombre de la ruta, con un asterisco implícitamente añadido. Este patrón se utiliza para generar una lista de nombres de archivos coincidentes para posibles terminaciones.
glob-expand-word
(C-x *
)
La palabra antes del punto se trata como un patrón para la expansión del nombre de ruta y se inserta la lista de nombres de archivos coincidentes, reemplazando la palabra. Si se proporciona un argumento numérico, se añade un asterisco antes de la expansión del nombre de ruta.
glob-list-expansions
(C-x g
) Se muestra
la lista de expansiones que se habrían generadoglob-expand-word
y se vuelve a dibujar la línea. Si se proporciona un argumento numérico, se añade un asterisco antes de la expansión del nombre de ruta.
M-g
y describir C-x *
las C-x g
combinaciones de teclas predeterminadas. En un formato más amigable estos son:
- Meta+ g( Alt+ g) para
glob-complete-word
, - Ctrl+ x, (soltar Ctrl) *para
glob-expand-word
(nota: *de hecho está Shift+ 8en mi teclado), - Ctrl+ x, (liberar Ctrl) gpara
glob-list-expansions
.
El siguiente código establece estos enlaces (en caso de que falten por cualquier motivo):
solo para el shell actual:
# commands to run in Bash bind '"\eg": glob-complete-word' bind '"\C-x*": glob-expand-word' bind '"\C-xg": glob-list-expansions'
o en su configuración permanente (
/etc/inputrc
o~/.inputrc
):# lines to add "\eg": glob-complete-word "\C-x*": glob-expand-word "\C-xg": glob-list-expansions
(tenga en cuenta que esto sólo afectará a los nuevos shells, a menos querecargar).
Te interesará glob-complete-word
o glob-list-expansions
. Principales diferencias:
glob-complete-word
siempre añade un asterisco, mientras queglob-list-expansions
lo hace de forma condicional (consulte el manual citado).- Si hay muchas coincidencias, es posible que necesite activar
glob-complete-word
dos veces (es decir, presionar la combinación de teclas dos veces) antes de que imprima algo; esto depende deshow-all-if-ambiguous
, compare elrespuesta ya mencionada. - Si solo hay una coincidencia,
glob-complete-word
se realizará una finalización de línea real, mientras queglob-list-expansions
solo se mostrará la coincidencia.
En tu caso particular escribe esto:
emacs 2019-*subject*
entonces Ctrl+ x, g.