¿Cómo puedo abrir varios archivos a la vez en Vim?

87

¿Hay alguna forma de abrir todos los archivos de un directorio desde Vim? Entonces, :commandeso diría en efecto "Abra todos los archivos /some/pathen búfer".

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

Ethan
fuente

Respuestas:

105

El comando que está buscando es args:

Por ejemplo:

:args /path_to_dir/*

abrirá todos los archivos en el directorio

skinp
fuente
32
Úselo **para hacer coincidir archivos de forma recursiva. Por ejemplo:args /path_to_dir/**
daf
1
Para abrir archivos sin una extensión, especifique el directorio principal, por ejemplo, args ** /. Hg / hgrc funciona pero ** / hgrc no.
79E09796
11
Una vez abiertos los archivos, utilice :tab allpara colocarlos en pestañas individuales.
Backlin
"Todos los archivos" incluirán subdirectorios que pueden no ser deseados. (Mis errores de vim "/path_to_dir/subdir/" Illegal file name). La solución rápida es ejecutar el segundo comando argd */para eliminarlos de la lista nuevamente
ideal
Sería muy bueno completar la respuesta con la siguiente sugerencia: Como buena práctica y para mostrar cómo aplicar el mismo conjunto de comandos a todos los archivos que se han abierto, puede ejecutar el siguiente comando para aplicar todas las órdenes. contenido en el archivo my_commands_batch.vim:argdo source my_commands_batch.vim
aturegano
21

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

:n ./**.cs

y abre solo los archivos en el directorio actual.

Encontré la respuesta El código correcto es :n **/*.cs

Para más información :h find

mp.
fuente
9

Has probado

:n /some/path/*

Abrirá todos los archivos en / some / path

Sin embargo, no creo que abra el archivo de forma recursiva.

EDITAR

Tal vez el uso de ** se abra de forma recursiva como se menciona en daf

Luc M
fuente
¿Qué significa: n? Buscar en la ayuda de vim solo me apunta a "repetir el último patrón" ... que entiendo es la pulsación de tecla. ¿Hay alguna forma de obtener ayuda solo para el modo de comando?
U0001
1
Demasiado fácil: h: n .. obtener ayuda para ": n". ¿No me gusta responder mis propias preguntas;)
U0001
4

Un método que no requiere jugar argses poner la lista de archivos en un archivo de texto y luego usar el :socomando para ejecutar los comandos en ese archivo.

Por ejemplo, si desea abrir todos los archivos que terminan en .phpun directorio determinado, primero cree que files.txtcontenga la lista de archivos, precedida del comando que desee utilizar para abrirlos.

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

Luego, dentro de vim:

:so files.txt

Si la lista de archivos es grande, es relativamente trivial generar el files.txtarchivo rápidamente, redirigiendo la salida de lsa un archivo y luego usando una macro vim para anteponer spantes de cada nombre de archivo.

Obviamente, esto no es tan elegante como usar los comandos argsy 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 de vim es extraña y arcana.

sucio
fuente
Interesante Suena como una buena manera de mantener el control sobre qué archivos deben abrirse, en lugar de abrir a ciegas todos los archivos de un directorio determinado si estos archivos no son todos necesarios.
cram2208
1

Otra forma de abrir archivos de forma recursiva

find . -type f -exec vi {} \;
pícaro
fuente
4
No cumple con la restricción "desde dentro de Vim".
ZyX
y sin embargo hace lo que se necesita :)
rogue-uno
3
No es asi. Lo que se necesita son archivos del directorio dado de forma recursiva desde dentro de vim . Si está descartando condiciones, también puede decir que kate **/*(^/)(usando la sintaxis globbing de zsh) hace lo que se necesita: abre archivos del directorio dado de forma recursiva. No es “desde adentro” y no usa vim en absoluto, pero “aún hace lo que se necesita”. O incluso kate ~/.vimrc ~/.bashrc. Omitiendo "desde adentro", "desde el directorio dado" y "recursivamente" por completo, pero "todavía hace lo que se necesita": abre archivos.
ZyX
Esto abre los archivos uno a la vez
Paul
1

Si desea agregar a la lista de argumentos;

:arga what_you-d_like_to_add

ver

:he arga

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

imme
fuente