¿Cómo puedo configurar Bash, Zsh o Tmux para completar el último identificador coincidente en la pantalla ? Considere este escenario común:
$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
* [new branch] issue540 -> origin/issue547314
e9204cf..4d42c3f v2.1 -> origin/v2.1
¿Cómo puedo hacer que Bash / Zsh / Tmux se complete issue547fácilmente en la CLI? Cuando presiono Tabdespués de que $ git checkout isGit completa útilmente issue, pero debo completar los dígitos por mí mismo porque todos los dígitos anteriores coinciden de hecho con las ramas existentes de Git .
En VIM, presionar Ctrl+ Ppara omnicomplete se completará como la coincidencia anterior, por lo que en este caso issue547314se completará. ¿Cómo puedo obtener este comportamiento en Bash, en Zsh o en Tmux ?
Actualmente estoy usando Bash 4.2 y Tmux 1.10 en Ubuntu Server (generalmente 12.04 LTS). Puedo actualizar al último Ubuntu Server LTS (14.04) si es necesario.
EDITAR : No me importaría ninguna solución que use Bash, Zsh o Tmux siempre que no sea difícil de usar. Entonces, Tabo Ctrl+ Po algún otro atajo estaría bien, pero no Alt+ Meta+ Super+ Shift+ א.

Respuestas:
Creo que la función que está buscando OP se llama dabbrev-expand en el mundo de Emacs:
xtermTambién tienedabbrev-expandcaracterísticas, pero es un poco menos inteligente que la contraparte de Emacs, pero es muy útil para mí y una de las razones por las que me cambiéxterm. Dentro de laxtermventana se puede usar una combinación de teclas personalizada especificada~/.Xresourcespara invocardabbrev-expanden una cadena dada. Por ejemplo, tengo la siguiente entrada en mi~/.Xresources(yo usouxterm, una versión Unicode de xterm):Dentro de la
xtermventana puedo usarM-/(ALT + /) para invocardabbrev-expand.xtermbuscará todas las cadenas visibles en la pantalla que comienzan con las letras que escribí. Ejemplo:Si presionara
M-/ahoraxtermse expandiríaa_vaa_very_long_string. Desafortunadamente, como dije,xtermno es tan inteligente y sudabbrev-expandfunción solo funcionará en cadenas completas. Entonces, en su casoisse expandiríaissue540y noissue547314porqueissue547314es parte deorigin/issue547314(piense en ello como\ben las expresiones regulares, es un poco similar, aunque la mayoría de los motores de expresiones regulares captarían ambas ocurrencias deissuecadenas\bissue.+\b). Pero , puede escribirory luego presM-/.xtermprimero se expandiráoraorigin/v2.1, esto no es lo que queremos, así que presioneM-/nuevamente yxtermlo ampliará aorigin/issue547314. Ahora, si usas Bash puedes hacerloM-b,C-wyC-epara quitarorigin/parte. En resumen, eldabbrev-expandinteriorxtermno es tan bueno como en Emacs (y Vim, supongo), pero sigue siendo más rápido que reescribir largas cadenas a mano y menos propenso a los errores tipográficos. Y en la mayoría de los casos se expandirá directamente a la cadena deseada sin necesidad de eliminar partes redundantes. Solo necesita acostumbrarse a él: mire la cadena que desea tener en el cursor y vea si no está precedida por otra cosa, y si es una parte anterior y elimínela después de la expansión.Tenga en cuenta que
xtermno se compila con ladabbrev-expandfunción de forma predeterminada y debe habilitarla explícitamente. Sin embargo, la versión de losxtermrepositorios de Ubuntu está compiladadabbrev-expandy puede usarla de inmediato.fuente
xtermyuxtermno están compilados para dabbrev-expand, no pude encontrar ninguna mención de la función en-help. ¿Cómo puedo ver los indicadores de compilación (como convim --version)? Tenga en cuenta que también probé la línea de configuración en la~/.XresourcesqueMeta <KeyPress> /: dabbrev-expand() \n\como se encuentra aquí , pero eso no ayuda, tampoco.xrdb -merge .Xresourcesen xterm.zshtiene esta facilidad.Bash como una instalación similar llamada finalización de bash. Puede usarlo Tabpresionando la tecla al proporcionar argumentos a los comandos cuando los está escribiendo.
Ejemplo
Si empiezo escribiendo
lsy luego presionando Tabdos veces, obtendrá Bash para proporcionar una lista de archivos coincidentes (y modificadores de línea de comandos) a cualquier comando que intente usar:Y aquí está el ejemplo con interruptores:
¿Preparar?
Mi instalación ya incluía una regla para
git:La instalación de este archivo se realizó cuando instalé el
gitpaquete. Estoy en Fedora 19, pero otras distribuciones también deberían estar haciendo esto.Mirando el archivo de reglas, explica que facilitará la finalización automática en las siguientes situaciones:
Entonces esto debería "funcionar" para usted.
fuente
Puedes hacer algo como esto con extrakto :
prefix + tabpara iniciar extraktotabpara insertarlo en el panel actual,entercopiarlo al portapapelesctrl-opara abrir la ruta / url octrl-epara editar con$EDITORfuente