¿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 issue547
fácilmente en la CLI? Cuando presiono Tabdespués de que $ git checkout is
Git 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 issue547314
se 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:
xterm
También tienedabbrev-expand
caracterí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 laxterm
ventana se puede usar una combinación de teclas personalizada especificada~/.Xresources
para invocardabbrev-expand
en una cadena dada. Por ejemplo, tengo la siguiente entrada en mi~/.Xresources
(yo usouxterm
, una versión Unicode de xterm):Dentro de la
xterm
ventana puedo usarM-/
(ALT + /
) para invocardabbrev-expand
.xterm
buscará todas las cadenas visibles en la pantalla que comienzan con las letras que escribí. Ejemplo:Si presionara
M-/
ahoraxterm
se expandiríaa_v
aa_very_long_string
. Desafortunadamente, como dije,xterm
no es tan inteligente y sudabbrev-expand
función solo funcionará en cadenas completas. Entonces, en su casois
se expandiríaissue540
y noissue547314
porqueissue547314
es parte deorigin/issue547314
(piense en ello como\b
en las expresiones regulares, es un poco similar, aunque la mayoría de los motores de expresiones regulares captarían ambas ocurrencias deissue
cadenas\bissue.+\b
). Pero , puede escribiror
y luego presM-/
.xterm
primero se expandiráor
aorigin/v2.1
, esto no es lo que queremos, así que presioneM-/
nuevamente yxterm
lo ampliará aorigin/issue547314
. Ahora, si usas Bash puedes hacerloM-b
,C-w
yC-e
para quitarorigin/
parte. En resumen, eldabbrev-expand
interiorxterm
no 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
xterm
no se compila con ladabbrev-expand
función de forma predeterminada y debe habilitarla explícitamente. Sin embargo, la versión de losxterm
repositorios de Ubuntu está compiladadabbrev-expand
y puede usarla de inmediato.fuente
xterm
yuxterm
no 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~/.Xresources
queMeta <KeyPress> /: dabbrev-expand() \n\
como se encuentra aquí , pero eso no ayuda, tampoco.xrdb -merge .Xresources
en xterm.zsh
tiene 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
ls
y 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
git
paquete. 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 + tab
para iniciar extraktotab
para insertarlo en el panel actual,enter
copiarlo al portapapelesctrl-o
para abrir la ruta / url octrl-e
para editar con$EDITOR
fuente