Acceso directo para abrir el archivo en Vim

123

Quiero abrir un archivo en Vim como en Eclipse usando Ctrl+ Shift+ R, o mediante la opción Ctrl+ Nde autocompletar. Invoque un atajo de teclado, escriba el nombre / patrón del archivo y elija entre todos los nombres de archivos coincidentes.

Sé abrirlo normalmente como:

:tabe <filepath>
:new <filepath>
:edit <filepath>

El problema aquí es que tengo que especificar la ruta completa del archivo en estos casos.

Techmaddy
fuente
1
Tenga en cuenta que los comandos sugeridos tienen un efecto diferente :tabeque abrirá el archivo en una nueva pestaña, :newdividirá horizontalmente la ventana y :editcerrará el archivo actual antes de abrir el nuevo.
Skippy le Grand Gourou

Respuestas:

61

Recientemente me enamoré de fuzzyfinder.vim ... :-)

: FuzzyFinderFile le permitirá abrir archivos escribiendo nombres o patrones parciales.

f3lix
fuente
141

Lo que normalmente hago es e .(e-space-dot) que me da un directorio actual navegable, luego puedo /, buscar fragmentos de nombre, al igual que encontrar una palabra en un archivo de texto. Creo que, en general, es lo suficientemente bueno, simple y rápido.

dkretz
fuente
22
No necesita el espacio, ahorrando un 25% adicional de escritura. ( :e.)
Konrad Rudolph
67
No necesita el punto si usa una e mayúscula, por ejemplo: E <ENTER>
Andriy Drozdyuk
2
@drozzy Esto sucede con vim :-)
DerMike
77
Sin embargo, existe una diferencia en el comportamiento entre :e.y :E: si el archivo actual se ha editado y aún no se ha guardado, el primero se quejará (como :edit) debido a "no escribir desde el último cambio", mientras que el segundo dividirá horizontalmente la ventana (como :new) para permitir la apertura de un nuevo archivo (mientras que ambos reemplazarán el archivo actual con el nuevo archivo si no se ha modificado (como :edit)).
Skippy le Grand Gourou
1
Si abre un archivo, luego lo reemplaza con un segundo archivo, puede volver al primero usando "e #"
dkretz
33

:find Es otra opción.

Abro vim desde la raíz de mi proyecto y tengo el pathconjunto allí.

Entonces, puedo abrir archivos ubicados en cualquier parte del árbol usando:

:find **/filena< tab >

La pestaña se completará automáticamente a través de varias coincidencias. ( **le dice que busque recursivamente a través del camino).

Mattwarren
fuente
No me parece útil :findya que para obtener la ruta relativa al directorio de trabajo. Vea la pregunta y @romainl respuesta aquí: stackoverflow.com/questions/28224168/… . Encuentro más interesante la respuesta @strager para que la ruta relativa al directorio de trabajo sea más fácil.
ziiweb
25

Puede buscar un archivo en la ruta actual utilizando **:

:tabe **/header.h

Presione la pestaña para ver varias finalizaciones si hay más de una coincidencia.

extraño
fuente
Intenté usar esto, pero esto es muy lento. Quiero decir que mi aplicación es grande y el editor dejó de funcionar por algún tiempo. ¿Conoces alguna configuración para aumentar el rendimiento y la velocidad del editor?
Techmaddy
1
Buena respuesta. Use algo como :tabe **/*der.hsi no recuerda el nombre completo del archivo.
ziiweb
16

Considere usar el complemento CtrlP .

Está incluido en Janus Distributive .

Le permite encontrar archivos en el directorio actual, abrir búferes o archivos usados ​​más recientemente utilizando "coincidencia difusa" o expresión regular.

Alexey
fuente
1
en realidad lo uso como parte de la distribución de Janus.
Alexey
El repositorio CtrlP original está inactivo, pero hay una bifurcación activa
jpyams
12

a menos que me falte algo: el nombre de archivo es la forma más rápida que he encontrado.

También puede usar la pestaña para completar automáticamente el nombre del archivo.

Ian P
fuente
@dirkgently, lo es. Sigue siendo un atajo, como sugiere el título de esta pregunta, pero no creo que sea lo que el interlocutor está buscando.
extraño
Para mí, la pestaña autocompletar no funciona para: e. Además, no siempre desea buscar un nombre de archivo que comience con algo, sino una palabra intermedia en un nombre de archivo.
Andriy Drozdyuk
9

Utilizo un par de accesos directos en mi archivo .vimrc (sintaxis exacta a continuación).

Se basan en el hecho de que en el 90% de los casos, quiero abrir otro archivo en el mismo directorio que el archivo que estoy editando actualmente, o en un directorio que está muy cerca en la jerarquía de ese archivo editado.

Esto es lo que hacen los comandos:

,cd : Cambie el directorio de trabajo actual al directorio en el que se encuentra el archivo actual que está editando.

,e: Abre un archivo con el directorio de trabajo actual ya completado, por lo que debe especificar solo el nombre de archivo.

Pon estos en tu .vimrc:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Aquí hay una secuencia de eventos:


  1. Estás editando un archivo llamado test.java en "/ home / prog"
  2. ,cd -> El directorio de trabajo actual ahora se convierte en "/ home / prog"
  3. ,e -> Se expande a ": e / home / prog" para que pueda completar el nombre del archivo, por ejemplo, test.h.

  1. ,e -> Se expande a ": e / home"
  2. tab -> Recorrer los subdirectorios de / home
  3. enter-> cdal directorio que quieras decir / home / prog
  4. ,e -> Se expande a ": e / home / prog"
Himadri Choudhury
fuente
8

También hay command-t que considero el mejor del grupo (y los he probado todos). Instalarlo es una molestia menor, pero una vez que está instalado, es un sueño usarlo.

https://wincent.com/products/command-t/

Bronson
fuente
1
Es posible que también desee probar ctrlp.vim ( github.com/kien/ctrlp.vim ). Básicamente es lo mismo que Command-T pero escrito en Vimscript puro. (En mi humilde opinión es más fácil de usar también)
datentyp
6

¡Use pestañas, funcionan al ingresar rutas de archivos en modo de escape vim!

Dirkgently
fuente
4

Si tiene etiquetas (y debería hacerlo), puede abrir un archivo desde la línea de comandos simplemente por el nombre de la clase o método o función c, con "vim -t DBPlaylist", y dentro de vim con ": etiqueta ShowList ".

Paul Tomblin
fuente
4

Si está editando archivos en un directorio común, puede :cdhacerlo en ese directorio y luego usar :esolo el nombre del archivo.

Por ejemplo, en lugar de:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Tu puedes hacer:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

O, si ya tiene abierto un archivo en el directorio deseado, puede usar la %abreviatura para el nombre de archivo actual y recortarlo en el directorio actual con el :hmodificador ( :help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

Y, como han dicho otros, puede completar con tabulación los nombres de archivo en la línea externa (consulte :help cmdline-completionpara más información).

rampion
fuente
4

Esto no es exactamente lo que está buscando, pero es bueno en muchos casos (aunque no en todos).

Si abre VIM y hay un nombre de un archivo en el búfer, puede colocar el cursor en ese nombre de archivo y escribir gf. Esto abre el archivo cuyo nombre está debajo del cursor en el mismo búfer. Es lo mismo que

:e CTRL+r CTRL+w

Nathan Fellman
fuente
1
Presioné gf y ahora he abierto el nuevo archivo que está debajo del cursor. Ahora cómo volver al archivo original. !!
vrbilgi
@ user430294: está abierto en un búfer diferente. Uso:b oldname
Nathan Fellman el
@vrbilgi, use Ctrl + o para volver al archivo editado previamente. Use Ctrl + i para avanzar nuevamente al archivo desde el que regresó.
Беров
3

Conozco tres complementos que permiten abrir archivos, admiten la finalización automática y no requieren ingresar el nombre de ruta completo de los archivos para abrir (siempre que los archivos estén en uno de los directorios de la &pathopción vim) :

Últimamente, he visto otro complemento con una función similar, pero no recuerdo el nombre.

Pronto: es probable que find encuentre compatibilidad con la finalización automática: los parches sobre este tema circulan en la lista de correo vim_dev en estos días.

Luc Hermitte
fuente
1
  • puedes usar (establecer wildmenu)
  • puedes usar la pestaña para autocompletar nombres de archivo
  • También puede usar la coincidencia, por ejemplo: e p*.dato algo así (como en los viejos 'dos)
  • También podría: examinar confirmar e (para una ventana gráfica)

  • pero también deberías especificar qué versión de vim estás usando y cómo funciona eso en emacs. Quizás podamos encontrarle una alternativa vim exacta.

Torre
fuente
1

Se ha mencionado FuzzyFinder, sin embargo, me encanta el comportamiento similar al textmate del complemento FuzzyFinderTextmate que extiende el comportamiento para incluir todos los subdirectorios.

Asegúrese de estar utilizando la versión 2.16 de fuzzyfinder.vim: las versiones superiores rompen el complemento.

Naseer
fuente
1

Con las etiquetas exuberantes, puede crear archivos de etiquetas con información de archivo:

ctags --extra=+f -R *

Luego, abra el archivo de VIM con

:tag filename

También puede usar <tab>para autocompletar el nombre del archivo.

Wonil
fuente
1

En GVIM, el archivo se puede examinar utilizando el diálogo abrir / leer / escribir;

:browse {command}

{comando} - abrir / leer / escribir

abrir - Abre el archivo de lectura - Añade el archivo de escritura - Guardar como diálogo

Samantha
fuente
0

Instalé FuzzyFinder. Sin embargo, la limitación es que solo encuentra archivos en el directorio actual. Una solución alternativa para eso es agregar FuzzyFinderTextmate. Sin embargo, según los documentos y comentarios, eso no funciona de manera confiable. Necesita la versión correcta de FuzzyFinder y necesita que su copia de Vim se compile con el soporte de Ruby.

Una solución diferente que estoy probando ahora es abrir todos los archivos que probablemente necesite al comienzo de la sesión de edición. Por ejemplo, abra todos los archivos en directorios clave ...

:args app/**
:args config/**
:args test/**
etc...

(Esto significa que posiblemente tendría decenas de archivos abiertos, sin embargo, hasta ahora parece funcionar bien).

Después de eso, puedo usar FuzzyFinder en modo búfer y actuará de manera similar al command-oacceso directo de TextMate ...

:FuzzyFinderBuffer
Ethan
fuente
¿Estás seguro? Tengo algo de configuración en mi .vimrc, busque "g: fuf_abbrevMap". Debo haber encontrado un ejemplo en la documentación. Cuando escribo el acceso directo, escribo un abreviatura como "web:" y buscará todos los archivos dentro de una carpeta de mi elección. Mi problema es que, por alguna razón, ya no abre archivos, veo [NUEVO DIRECTORIO] en la barra de estado. Pero tengo el mismo problema con: o, parece no estar relacionado con fuf.