Autocompletar palabras desde el búfer del terminal

Autocompletar palabras desde el búfer del terminal

En editores como vimy emacs, se pueden usar teclas de acceso rápido como C-p(vim) o M-/(emacs) para realizar el autocompletado en la palabra actual usando otras palabras en el mismo búfer.

¿Es posible lograr la misma funcionalidad dentro de un shell? Si veo alguna palabra en el resultado de un comando anterior y me gustaría completarla automáticamente rápidamente al escribir otro comando.

Para que quede claro, un ejemplo:

$ ls
Desktop/  Mail/  music/  osx@  something_with_a_pretty_long_name

$ someth

Desde aquí, me gustaría poder presionar una tecla de acceso rápido y hacer que complete automáticamente lo que estoy escribiendo something_with_a_pretty_long_name.

EDITAR: Disparar. Usar un nombre de archivo fue un mal ejemplo de lo que busco. Considere el siguiente segundo ejemplo:

$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened

$ happ

Donde podía completar automáticamente 'happ' para 'sucedió' simplemente porque apareció en el búfer de mi terminal. Espero que esto aclare lo que busco.

Respuesta1

Respuesta corta: No, no con shells clásicos como zsho bashcomo normalmente su shell y terminal son entidades diferentes.

Respuesta larga: tal vez. Lo que sucede normalmente es que ingresas un comando y presionas Enter- ahora tu shelltenedoresy ejecuta el comando especificado. Entonces el caparazón tieneNoTengo idea de lo que está sucediendo, el shell no sabe qué se escribirá en la terminal o qué hizo el programa ejecutado, si inició otros programas, escribió en su terminal o algo así.

Hay dos posibles soluciones a su problema:

  1. Capture todo el resultado de sus comandos ejecutados y utilícelo de alguna manera para completarlo (se puede hacer, pero probablemente no debería hacerse)
  2. Utilice una terminal diferente que admita'completando'desde su "búfer de shell".

Una solución para 2 es, por ejemplo, usar emacs y multi-termsimplemente usar M, /como lo haría normalmente para completar cosas desde la terminal. Otros terminales pueden ofrecer una solución similar.

¿Pero realmente necesitas este tipo de finalización? Hoy en día, la finalización del shell puede completar páginas de manual, comandos, pids, sockets, opciones de comandos, rutas de archivos desde sistemas remotos y mucho más. Es posible que esto ya sea suficiente para su caso de uso o podría mejorarse para su problema específico.

Respuesta2

http://www.iterm2.com/#/section/features/autocomplete

iterm2 tiene exactamente lo que necesitas. Lo malo es que es para mac.

Pero como es una terminal, puedes enviar ssh a Linux/Unix y aún funciona.

Respuesta3

Puedes hacer esto conextractoque usa tmux para capturar la salida y le permite realizar una selección difusa con fzf:

extracto

Respuesta4

Probablemente esta no sea la respuesta que esperarías, pero puede satisfacer algunas de tus necesidades.

Puede usar TAB para completar automáticamente el comando que está en $PATH (o comandos internos), por lo que si su nombre de archivo es un archivo ejecutable y está en $PATH, se completará automáticamente.

Si desea autocompletar un nombre de archivo que no es ejecutable, puede escribir " ." -punto, luego espacio (o lo que sea en lugar del punto), luego la parte del nombre de archivo y TAB. De esta manera, engañará al shell haciéndole creer que está ejecutando un comando y dando el nombre del archivo como argumento al comando. Al presionar TAB se completará automáticamente el nombre del archivo, pero quizás tengas que eliminar el punto + espacio al frente.

Otra posibilidad es utilizar elFunción de finalización de BASH. Esto puede autocompletar más que solo nombres de archivos.

información relacionada