2010-01-07 18 views
82

¿Hay alguna manera de abrir todos los archivos en un directorio desde Vim? Entonces, un :command que diría en efecto "Abrir todos los archivos bajo /some/path en búferes".¿Cómo puedo abrir varios archivos a la vez en Vim?

Idealmente, sería genial abrir todos los archivos bajo un directorio de manera recursiva.

Respuesta

101

El comando que busca es args:

Por ejemplo:

:args /path_to_dir/* 

abrirá todos los archivos en el directorio

+31

Use '**' para hacer coincidir los archivos recursivamente. P.ej. ': args/path_to_dir/**' – daf

+0

Perfecto. Gracias – Ethan

+1

Para abrir archivos sin una extensión, especifique el directorio principal, p. args ** /. hg/hgrc funciona pero **/hgrc no. – 79E09796

9

¿Usted intentó

:n /some/path/* 

Será abra todos los archivos en/some/path

No creo que se abra el archivo de forma recursiva.

EDITAR

usando Tal ** se abrirá de forma recursiva como daf mencionado

+0

Sí, esto también funciona. – daf

+0

¿Qué significa: n? Mirar la ayuda de vim solo me indica "repetir el último patrón" ... lo que entiendo es la pulsación de tecla. ¿Hay alguna manera de obtener ayuda solo para el modo comando? – U0001

+1

Demasiado fácil: h: n .. obtener ayuda para ": n". No me gusta responder mis propias preguntas;) – U0001

21

Por qué no funciona si quiero abrir todos los archivos que terminan con una extensión determinada? Probé

:n ./**.cs 

y abre sólo los archivos en el directorio por el momento.

He encontrado el código correcto es answer.The :n **/*.cs

Para obtener más información :h find

1

Otra forma de abrir archivos de forma recursiva

find . -type f -exec vi {} \; 
+4

No cumple con la restricción "desde dentro de Vim". – ZyX

+0

y aún hace lo que se necesita :) –

+3

No es así. Lo que se necesita son los archivos del directorio dado recursivamente * desde dentro de vim *. Si está descartando condiciones, puede decir que 'kate **/* (^ /)' (usando la sintaxis de globbing de zsh) hace lo necesario: abre los archivos del directorio dado recursivamente. No es "desde dentro" y no está usando vim en absoluto, pero "todavía hace lo que se necesita". O incluso 'kate ~/.vimrc ~/.bashrc'. Omitir "froming", "from the given directory" y "recursively" en total, pero "todavía hace lo que se necesita": abre archivos. – ZyX

1

Si desea añadir a la lista de argumentos ;

:arga what_you-d_like_to_add 

ver

:he arga 

desde/en vim para más información.

4

Un método que no requiere jugar con args es poner la lista de archivos en un archivo de texto, y luego usar el comando :so para ejecutar los comandos en ese archivo.

Por ejemplo, si desea abrir todos los archivos que terminan en .php en un directorio determinado, primero cree files.txt que contenga la lista de archivos, junto con el comando que desee usar para abrirlos.

sp alpha.php 
sp bravo.php 
sp charlie.php 

Entonces, dentro de vim:

:so files.txt 

Si la lista de archivos es grande, es relativamente trivial para generar el archivo files.txt rápidamente, redirigiendo la salida de ls a un archivo, y luego usar una macro vim para anteponer sp antes de cada nombre de archivo.

Esto obviamente no es tan elegante como el uso de los comandos args y argdo, pero esos comandos también son mucho más complicados.

También podría haber una manera de hacer esto con un solo comando en la línea de comandos, pero incluso después de 16 años todavía encuentro que la programación vim es extraña y misteriosa.

+0

¡Interesante! Parece una buena forma de mantener el control sobre qué archivos se requieren para abrir, en lugar de abrir a ciegas todos los archivos de un directorio determinado si estos archivos no son necesarios. – cram2208

Cuestiones relacionadas