¿Cómo hago que Vim haga la finalización normal (similar a Bash) de la pestaña para los nombres de archivo?

289

Cuando abro un nuevo archivo en Vim y uso la finalización de tabulación, completa el nombre completo del archivo en lugar de hacer la coincidencia parcial como lo hace Bash. ¿Existe alguna opción para hacer que esta finalización de la pestaña de nombre de archivo funcione más como Bash?

Eric Johnson
fuente
10
Técnicamente hablando, estoy bastante seguro de que "bash" no completa ninguna pestaña. Es readline lo que hace eso.
Maxy-B
2
¿Estamos hablando de personalizar el comportamiento de la función ^ X ^ F?
BrunoJCM

Respuestas:

413

Yo personalmente uso

set wildmode=longest,list,full
set wildmenu

Cuando escribe el primer golpe de pestaña, se completará tanto como sea posible. El segundo golpe de pestaña proporcionará una lista. Las pestañas tercera y subsiguientes recorrerán las opciones de finalización para que pueda completar el archivo sin más claves.

Bash-like sería solo

set wildmode=longest,list 

pero el completo es muy útil.

Miguel
fuente
1
Desearía que este fuera el comportamiento predeterminado en vim. Pensé que no había forma de completar la pestaña completa hasta que vi esta publicación.
Neha Karanjkar
66
@NehaKaranjkar Recomiendo mantener un archivo de archivos de puntos para facilitar la implementación en nuevos entornos
michael
2
¿Hay alguna manera de comenzar por completo solo cuando hay pocos resultados? algo parecido set wildmode=longest,5full,list. Con muchos resultados completos es inútil pero muy útil con pocos. Será perfecto con algo como "mostrar completo solo si la finalización se ajusta en una pantalla de línea"
albfan
1
Esto solía estar funcionando en el pasado (gVim / ubuntu) pero ahora no (macvim8.x / macOS). Ver ejemplo . ¿Algunas ideas?
Paschalis
1
Después de tolerar la finalización de la pestaña de origen durante 2 meses, creo que debe haber una manera de simplificarla. Gracias.
ramwin
23

El comportamiento más cercano a la finalización de Bash debe ser

set wildmode=longest:full,full

Con unos pocos caracteres escritos, presionando la tecla una vez dará todas las coincidencias disponibles en wildmenu. Esto es diferente a la respuesta de Michael, que abre una ventana de tipo quickfix debajo de la línea de comandos.

Luego puede seguir escribiendo el resto de los caracteres o presionar la tecla nuevamente para completar automáticamente con la primera coincidencia y rodearlo.

weynhamz
fuente
Creo que prefiero de esta manera.
Eddy Ekofo
8

Si no desea configurar el menú comodín, siempre puede presionar Ctrl+ Lcuando desee abrir un archivo. Ctrl+ Lcompletará el nombre de archivo como finalización de Bash.

Amjith
fuente
Ctrl-L no actúa como bash autocompletar. No recorre todas las opciones posibles.
Raine
2
Mi fiesta de no actuar así. <Tab>completa la cadena actual hasta donde sea inequívocamente posible (como CTRL-Len Vim) y <Tab><Tab>muestra una lista de posibles coincidencias (como CTRL-Den Vim).
glts
8

Además del comodín / modo salvaje sugerido, Vim también ofrece la opción de mostrar todas las terminaciones posibles usando Ctrl+ D. Esto podría ser útil para algunos usuarios que se topan con esta pregunta al buscar diferentes opciones de autocompletado en Vim como lo hice yo.

tc88
fuente
4

Supongo que está utilizando autocompletar en Vim a través de Ctrl+ Npara buscar a través del búfer actual. Cuando usa este comando, obtiene una lista de soluciones; simplemente repita el comando para ir al siguiente elemento de la lista. Lo mismo es cierto para todos los comandos de autocompletar. Mientras completan la palabra completa, puede continuar desplazándose por la lista hasta llegar a la que desea utilizar.

Este puede ser un comando más útil: Ctrl+ P. La única diferencia es que Ctrl+ Pbusca hacia atrás en el búfer mientras que Ctrl+ Nbusca hacia adelante ... De manera realista, ambos proporcionarán una lista con los mismos elementos, y pueden aparecer en un orden diferente.

Miguel
fuente
0

Intenta usarlo :set wildmenu. Aparte de eso, no estoy seguro de qué estás intentando exactamente.

Ah, sí, y tal vez intente este enlace: enlace

Torre
fuente