2009-01-12 11 views
23

tengo una lista bastante larga de archivos abiertos en vim que tiene este aspecto:cómo abrir un archivo en una lista de archivos en vim?

/dir1/file1 
/dir2/file2 
/dir2/file3 
..... 

¿Cómo puedo abrir todos ellos uno por uno de la manera más sencilla posible en la misma sesión de vim ya sea con split o editar?

+0

Usted está diciendo "Los tengo abiertos" y luego pregunta "¿Cómo puedo abrirlos?" Si es el primero, la respuesta de Paul Tomblin es para usted -: n y: prev –

+0

¿O es la lista real que ha abierto en Vim? – seanhodges

+0

solo curiosidad, pero ¿por qué esta wiki de la comunidad? – Hasturkun

Respuesta

44

diría con -p para las pestañas

vim -p `cat yourlistoffiles` 
+2

Tenga en cuenta que si desea abrir los archivos en búferes separados sin utilizar las pestañas vim, puede eliminar el indicador '-p'. –

+2

Además, si usa '-p' para las pestañas, el número de pestañas que se abrirán estará limitado a' tabpagemax' (10 por defecto). Si quiere cambiar esto a 100 (por ejemplo), puede agregar 'set tabpagemax = 100' a su vimrc o configurarlo en otro lugar. –

4

Usted puede hacer lo siguiente

cat file | xargs vim 

Donde "archivo" contiene la lista de archivos, esto abrirá los archivos en la misma sesión vim. Como es habitual al abrir varios buffers, puede navegar hacia adelante con: bn y hacia atrás: bp.

+1

.. A menos que el número de archivos sea mayor que el umbral de división de xargs, en cuyo caso obtendrá múltiples sesiones de vim. –

+0

Usando xargs puedes manejar decenas de miles de archivos, ¿estás sugiriendo escribirlos uno por uno en la línea de comandos como lo has sugerido? Esto parece mucho menos práctico. –

+6

@ng, no entiendes xargs en absoluto. Si le pasa "decenas de miles de archivos", emitirá el comando vim durante los primeros 20, luego emitirá otro comando vim para el segundo 20, y así sucesivamente. –

0

Es tan simple como escribir

vim /dir1/file1 /dir2/file1 /dir2/file2 ... 

Una vez que estés en vim, puede cambiar entre y luego con ": n" para ir al siguiente archivo, ": prev" para ir al archivo anterior mi.

+0

Esto no es lo que se preguntó, la pregunta es cómo abrir una larga lista de archivos. –

+0

@ng, la pregunta es excepcionalmente ambigua. –

8

Voy a asumir que usted tiene la lista de archivos abiertos en el interior de Vim, y desea simular el comando "GF" a través de toda la lista ...

Editar su .vimrc para incluir esta función:

function Openall() 
    edit <cfile> 
    bfirst 
endfunction 

A continuación, puede resaltar todo el archivo (o el conjunto de rutas que desea abrir) utilizando el modo visual (1G, Shift-V, G) y escribiendo ": llamar a Openall()". Posteriormente la fila comando mostrará esto:

:'<,'>call Openall() 

Esto ejecutará la función nueva OpenAll() en todas las líneas de relieve.

Presione Entrar y todos los archivos se abrirán en los almacenamientos intermedios de fondo. A continuación, puede acceder a ellos utilizando los comandos de búfer habituales. : los mostraré como una lista.

0

Mi plugin searchInRuntime tiene un: Sp and a: comandos Vsp que harán el truco cuando se los llama banged. Sin embargo, los archivos deben existir.

11

Puede utilizar el modo quickfix, de la siguiente manera

:set errorformat=%f 
:cf myfilelist 

en este punto se pueden utilizar los atajos Quickfix normales para ir a través de sus archivos, :cn para el siguiente archivo, :cp de la anterior y :cr ir al primero otra vez.

EDIT:

oh, si quieres leer la lista de la memoria intermedia actual, utilice :cb en lugar de :cf en las instrucciones anteriores

+0

Esta parece ser la mejor solución para mí cuando el número de archivos es grande. Podría configurar un alias como: vim -o ': establecer errorformat =% f' -o ': cf myfilelist' –

+0

@RandyProctor decir que quiero usar 'hg st -n' como mi lista de archivos, ¿cómo podría hacerlo? – kenttam

0

que a menudo necesitan para abrir una lista cambiante de los archivos que habían sido modificados en mi salida de subversion. Este único liner funciona para abrir todos los archivos modificados en las pestañas vim.

svn st | grep ^M | awk "{print($2)}" | xargs vim -p 
2

supongo que desea seleccionar y lista en vim. todos los archivos de una cierta extensión Desde su directorio de inicio o una fuente en particular.

find . -name "*.sh" | vim - 

Luego dentro de vim, puede buscar y ver esta lista potencialmente enorme. (Otro tema)

¿Encontraste tu archivo, ahora quieres abrirlo en una división?

CTRL-W F      *CTRL-W_F* 
    Split current window in two. Edit file name under cursor and 
    jump to the line number following the file name. See |gF| for 
    details on how the line number is obtained. 
    {not available when the |+file_in_path| feature was disabled 
    at compile time} 


CTRL-W gf      *CTRL-W_gf* 
    Open a new tab page and edit the file name under the cursor. 
    Like "tab split" and "gf", but the new tab page isn't created 
    if the file does not exist. 
    {not available when the |+file_in_path| feature was disabled 
    at compile time} 
Cuestiones relacionadas