En bash, el autocompletado de rutas ha dejado de funcionar recientemente al emitir vim
comandos donde la ruta es más profunda que dos directorios (continúa funcionando como se esperaba con otros comandos, como ls
y cd
).
Por ejemplo, si escribo ls .config/btsync/bt
y luego presiono TAB, se expande a ls .config/btsync/btsync.conf
.
Si escribo vim .config/bt
y luego presiono TAB, se expande a vim .config/btsync/
.
Sin embargo, si escribo vim .config/btsync/bt
y luego presiono TAB, no sucede nada (esperaría que se expanda vim .config/btsync/btsync.conf
, como en el ls
ejemplo anterior).
Tengo el mismo problema cuando ejecuto como mi propio usuario y cuando ejecuto como su.
Leí esta publicación que mencionaba un problema con versiones anteriores de bash-complete pero estoy ejecutando 2.1-5.
ACTUALIZACIÓN: Después de algunas pruebas adicionales, descubrí que el problema raíz es que bash solo completará los nombres de directorio, no los nombres de archivo.
ACTUALIZACIÓN: Resulta que esa bash-completion
fue la causa general. Vea mi segundo comentario sobre la respuesta aceptada.
¡Cualquier sugerencia sobre la posible causa de este comportamiento sería recibida con gratitud!
fuente
.bashrc
!.bashrc
publicado, según lo exigido.Respuestas:
Investigué un poco más para usted y esto es lo que encontré: la clave para el autocompletado es el
bash
comandocomplete
. Puede imprimir las reglas paravim
usar:Del mismo modo, puede eliminar estas reglas específicas con:
Este comando lo restablece a los valores predeterminados: las rutas habituales y la finalización de los nombres de archivo sin ninguna lógica adicional. Eso es probablemente lo que quieres.
Para obtener más información, consulte
help complete
oman bash
busque la sección sobre elcomplete
comando (es un bash incorporado, por lo tanto, está documentado en la página de manual de bash).Un último punto: los cambios anteriores solo afectan a la
bash
sesión actual , si desea eliminar las reglas vim después de cada inicio de sesión, coloque elcomplete -r vim
en su~/.bashrc
.Espero que ayude :)
fuente
complete -p vim
comando regresócomplete -F _filedir_xspec vim
que fue eliminado por elcomplete -r vim
comando, resolviendo el problema. Voy a leer un poco sobre elcomplete
comando y la información devuelta por el modificador -p. Ligeramente desconcertado por qué este comportamiento cambió, también lo investigará._filedir_xspec
función/usr/share/bash-completion/bash_completion
solo completa directorios. Desinstalébash-completion
, eliminé lacomplete -r vim
línea.bashrc
y reinicié yvim
ahora se comporta como se esperaba.Bash por defecto autocompleta solo la ruta y los nombres de archivo. Sin embargo, el mecanismo es extensible y se puede enseñar a bash a realizar diferentes autocompletados para diferentes programas. Por ejemplo
git
, puede completar automáticamente los nombres de los subcomandos (clonar, confirmar) y revisiones en lugar de solo nombres de ruta. A veces es útil, a veces bastante molesto, por ejemplo, cuando segzip -d
niega a completar automáticamente los nombres de archivo que no tienen la.gz
extensión.La finalización de Bash generalmente se configura en
/etc/bash_completion.d
: probablemente encontrará un archivo llamadovim
allí. Ese es el archivo que contiene las reglas de autocompletado para lavim
línea de comandos.Ahora tienes dos opciones:
vim
reglas especiales y solo realice el autocompletado de ruta predeterminado.Y, por supuesto, presente un informe de error que describa el problema para que se solucione en las futuras versiones :)
fuente
/etc/bash_completion.d
y solo hay unhg
archivo presente (para Mercurial). Muy extraño./usr/share/bash-completion/
o enumere todos los archivos delvim
paquete o desdebash
obash-completion
paquetes (no estoy seguro de cómo se llama en ArchLinux). Estará allí en alguna parte.bash-completion
paquete muestra/usr/share/bash-completion/completions
contiene reglas para muchos programas, pero novim
. La lista de archivos instalados con elvim
paquete no muestra ningún archivo relacionado con la finalización y la búsqueda en todo el sistema usandofind / -name vim
tampoco muestra ningún archivo relacionado con la finalización.Quizás podría reinstalar bash-complete:
apt-get install --reinstall bash-completion
Y eche un vistazo al archivo /etc/bash.bashrc:
nano /etc/bash.bashrc
Y verifique que la siguiente línea no esté bien comentada:
Luego, reinicie su sesión de terminal
fuente
bash-completion
, probar elvim
comportamiento y luego reinstalarbash-completion
y probar, pero aún tuve el mismo problema en ambas circunstancias. Las líneas que ha enumerado no están presentes/etc/bash.bashrc
. Esta línea es, sin embargo[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion