Relacionado con Bash como tabulación parcial completa para nombres de archivo en Vim
Una de las características realmente fantásticas zsh
es que puede escribir, por ejemplo ls /u/s/m/m/who.1
, presionar Taby completarlo
ls /usr/share/man/man1/who.1.gz
. Una vez que te acostumbras, es realmente molesto volver /u<tab>/s<tab>/m<tab>/m<tab>...
, especialmente cuando toda la ruta parcial solo puede resolverse en una ruta real, pero cada componente individual puede tener múltiples finalizaciones. ¿Se puede lograr esto en Vim, por ejemplo, cuando se usa :e
o :cd
?
Hay otras características útiles relacionadas con la ruta en zsh, como usar cd foo bar
para moverse a una ruta equivalente con foo
reemplazado por bar
(es decir, se /blah/foo/baz/yada
convierte /blah/bar/baz/yada
). Si hay una solución que también los incorpore (esencialmente entregando tareas relacionadas con shell a un shell que las haga muy bien), sería genial.
Respuestas:
Solía usar CtrlP y otros complementos relacionados mucho antes hasta que realmente descubrí los poderes nativos de vim. Permítanme explicar algunas formas de hacerlo sin requerir un complemento externo:
:e
, lo bueno de: e es que puedes hacer algo como:e /u*/s*/m*/m*/<Tab>
y vim lo expandirá automáticamente para que lo hagas:e /usr/share/man/man
. Eso es mucho más corto y simple que lo que publicaste, pero una forma aún mejor es hacerlo:e /usr/**/man<Tab>
, de esa manera se verá recursivamente debajo/usr
y enumerará todas las rutas coincidentes, aunque esto puede tomar tiempo, dependiendo de qué tan grande sea el conjunto, pero en un proyecte que esto funciona de maravilla porque puede hacer algo así:e ap**/jav**/user<Tab>
y completará todas las rutas incompletas y le dará una lista de rutas coincidentes y funciona de maravilla.:b
, Para abrir buffers existentes. Esto es realmente poderoso porque acepta parciales de forma predeterminada, por lo que puede hacer algo así:b usr*man<Tab>
y completará el nombre del archivo si ya se ha cargado en la lista de búfer. Esto es especialmente bueno porque es casi instantáneo y muy rápido. También uso mucho las sesiones de vim, con la ayuda de tpope / vim-obsession y dhruvasagar / vim-prosession , que mantiene todos los archivos que abro en la lista de búfer y están disponibles incluso si existo vim y vuelvo a él desde el directorio del proyectofuente
/u*/s*/m*/m*/<Tab>
así es como solía trabajar alrededor de bash. No es un sustituto de zsh por una milla./usr/**/man<Tab>
es terriblemente lento cuando tiene todo el sistema de archivos abierto, pero puede ser útil para proyectos pequeños. A menos que malinterprete:b
, no es para abrir nuevos archivos.**
es realmente lento, pero funciona bien para proyectos regulares.:b
es para el búfer abierto existente, por eso es útil usar sesiones.vim-zsh-path-complete pretende hacer exactamente lo que está pidiendo (la primera parte, al menos), pero nunca lo he intentado. (Ni siquiera había oído hablar de él hasta que romainl vinculó a una respuesta SO de su autor , aunque su documentación también menciona varias limitaciones.
Además de esto, hay varios buscadores de archivos difusos que logran algo similar para abrir archivos.
Mi complemento favorito para esto es CtrlP . Cuando se usa para abrir archivos, busca cualquier archivo cuyas rutas completas contengan los caracteres que escribe en el orden correcto; no tiene que escribir partes de cada componente de la ruta (y todos los separadores de ruta) a medida que tienes en tu ejemplo, pero funciona perfectamente bien si lo haces. También usa la misma interfaz para abrir archivos usados recientemente y buffers abiertos actualmente, y más.
Por defecto, se asigna
<c-p>
en modo normal para abrir el indicador CtrlP. La solicitud muestra una lista de archivos, que se reduce a medida que escribe caracteres. Puede presionar Enteren cualquier punto para abrir el archivo seleccionado actualmente, o usar<c-k>
y<c-j>
para mover la selección hacia arriba y hacia abajo a través de la lista de archivos coincidentes actualmente.Otra alternativa popular es Command-T , pero estoy a favor de CtrlP porque está implementado en VimScript; Command-T tiene un componente Ruby.
fuente