2010-01-27 21 views
16

Me preguntaba si hay una forma de abrir archivos múltiples con Vim, pero cada archivo en un número de línea específico. Me explico:Vim: Abrir archivos múltiples en líneas diferentes

que a menudo utilizan la sintaxis: Vim mi/forma/también// archivo ahora 120 con el fin de editar este archivo en la línea 120 porque gcc me dijo también :)

Ahora lo i' m buscando es una manera de hacer esto para múltiples archivos al mismo tiempo!

Por supuesto, vim archivo1 + archivo2 + xx xx ... no va a funcionar (la opción + sólo afectan primer archivo ... no me preguntes por qué)

Así que si alguien sabe una forma de ¿arregla esto? No me encontré en la página de manual ...

Por cierto, a veces, fichero1 tal vez el mismo archivo que fichero2 ...

Respuesta

11

Aquí está una manera: vim +6 file1 +"sp +3 file2". Cambie sp a tabnew si prefiere las pestañas.

Pero sería realmente útil sólo si alguien podría hacer un script con ella ...

+0

que funciona! genial, ahora solo tengo que calcular cómo usar xargs para ir de una lista de file1 +10 file2 +14 ... a vim +10 file1 + "tabnew +14 file2" + "tabnew + ... (sí prefiero tabnew :) Voy a publicar mi línea de cmd si tengo suficiente fe para escribir;) thx! – claf

+0

De hecho, lo malo es que esta solución no permite más que algo así como 10 archivos max al mismo tiempo. Estoy usando un comando para obtener los nombres de archivo y la línea y el uso de xargs para pasarlos a vim. Me gustaría ser capaz de ejecutar la mayor cantidad de archivos que yo quiera, me decepciona que vim no puede manejar más de 10 archivos para abrir al mismo tiempo ... – claf

+0

Tal vez podría usar un 'for' en el comando ViM, con una lista de nombres de archivos a y otro para las posiciones del cursor. – Pikrass

1

Otra opción sería utilizar un script como utl, creando automáticamente un archivo completo de hipervínculos a los números de archivo/Hileras en la salida de gcc (esto debería ser trivial con sed).

Un enlace se formatean como este con UTL: <url:error.c#line=10>

EDIT: ligado a una secuencia de comandos de vim que une más apropiado.

+0

La sugerencia de Neil es una mejor versión de esto. –

3

vim puede leer su salida de gcc y crear una lista de soluciones rápidas que le permite navegar fácilmente a través de todos los errores en su código. Puede leer un archivo de error existente usando vim -q o si su proyecto utiliza un archivo Makefile, entonces puede usar el comando: make para ejecutar make desde dentro de vim y capturar su salida.

5

acabo de escribieron https://gist.github.com/xim/6123691

Gracias a Pikrass a la idea =)

EDIT:

Como claferri dice, usando '+ tabnew ...' límites que 10 archivos. Actualizó la esencia para usar -S.

La función vim creará una cadena ($ script) que contiene una secuencia de comandos de vim que abre los archivos, en las líneas correspondientes, en pestañas. Al explicar con un ejemplo, esto se hace cambiando vim -R file1:42 file2 file3:1337 a vim -S <script> -R file1 file2 file3 - que contiene una secuencia de comandos de vim, en este caso:

tab all 
tablast 
1337 
tabprev 
tabprev 
42 

Por lo tanto: estamos abriendo los archivos normalmente, a continuación, ejecutar la secuencia de comandos: Salto a la última pestaña, luego saltando a la línea apropiada para cada archivo mientras se mueve hacia el primer archivo.

Este hack es solo moderadamente probado, comente cualquier error.

RE-EDIT:

fijo el guión lo que incluso un loco como ejemplo vim -R 1:3 "a file" foo -- -- "some other file":34 -R funciona como se espera.

+0

Sería útil si incluyes tu código con una explicación (para vim noobs como yo) aquí en SO. – Enigmadan

1

Para ir a la línea 3 en file1.txt y la línea 4 en file2.txt Puedo hacer esto:

vim -c ":e file1.txt|:3|:e file2.txt|:4" 
+2

¡Agradable! Creo que la pantalla dividida sería aún mejor: vim -c ": e file1.txt |: 3 |: vsplit file2.txt |: 4" –

0

Hay una llamada línea archivo vim plugin que te permite hacer esto fácilmente, aunque tiene un par de problemas con la apertura de varios archivos a líneas específicas actualmente. Me gustan algunas de las soluciones anteriores, pero la línea de archivo funciona si desea obtener una lista de almacenamiento intermedio llena de los archivos con sus respectivos números de línea, y luego puede usar algo como bufdo para abrirlos todos en divisiones.

https://github.com/bogado/file-line

Cuestiones relacionadas