2010-01-27 6 views
16

Je me demandais s'il y avait un moyen d'ouvrir plusieurs fichiers avec Vim, mais chaque fichier sur un numéro de ligne spécifique. J'explique:Vim: Ouvrir plusieurs fichiers sur des lignes différentes

J'utilise souvent la syntaxe: vim mon/chemin/trop/beaucoup/fichier +120 pour éditer ce fichier à la ligne 120 parce que gcc m'a dit aussi :)

Maintenant ce que je Je cherche est un moyen de faire cela pour plusieurs fichiers en même temps!

Bien sûr, vim fichier1 + xx fichier2 + xx ... ne fonctionne pas (l'option + affecte seulement le premier fichier ... ne me demandez pas pourquoi)

Donc, si quelqu'un connait un moyen de répare ça? Je ne l'ai pas trouvé dans la page ...

D'ailleurs, parfois, fichier1 peut-être le même fichier que fichier2 ...

Répondre

11

Voici une manière: vim +6 file1 +"sp +3 file2". Remplacez sp par tabnew si vous préférez les onglets.

Mais ce serait vraiment utile que si quelqu'un pouvait faire un script avec elle ...

+0

cela fonctionne! super, maintenant je dois juste comprendre comment utiliser xargs pour aller à partir d'une liste de fichier1 +10 fichier2 +14 ... à vim +10 fichier1 + "tabnew +14 fichier2" + "tabnew + ... (oui je prefere tabnew :) je posterai ma ligne de cmd si j'ai assez de foi pour l'écrire;) thx! – claf

+0

En fait, la mauvaise chose est que cette solution ne permet pas plus de quelque chose comme 10 fichiers J'utilise une commande pour obtenir les noms de fichiers et les lignes et j'utilise xargs pour les transmettre à vim J'aimerais pouvoir lancer autant de fichier que je veux, je suis déçu que vim ne peut pas gérer plus de 10 fichiers à ouvrir en même temps ... – claf

+0

Peut-être que vous pourriez utiliser un 'for' dans la commande ViM, avec une liste de noms de fichiers un autre pour les positions du curseur. – Pikrass

1

Une autre option serait d'utiliser un script comme utl, ce qui crée automatiquement un fichier complet de liens hypertextes vers les numéros fichier/ligne basé sur la sortie de gcc (cela devrait être trivial avec sed).

Un lien serait formaté comme celui-ci avec UTL: <url:error.c#line=10>

EDIT: lié à un script de liaison vim plus approprié.

+0

La suggestion de Neil est une meilleure version de ceci. –

3

vim peut lire votre sortie gcc et créer une liste de raccourcis qui vous permet de naviguer facilement toutes les erreurs dans votre code. Vous pouvez lire un fichier d'erreur existant en utilisant vim -q ou si votre projet utilise un Makefile, vous pouvez utiliser la commande: make pour exécuter make depuis vim et capturer sa sortie.

5

Je viens d'écrire https://gist.github.com/xim/6123691

Merci à Pikrass l'idée =)

EDIT:

Comme dit claferri, en utilisant '+ tabnew ...' vous limite à 10 fichiers. Mise à jour de l'essentiel pour utiliser -S.

La fonction vim va générer une chaîne ($ script) contenant un script vim qui ouvre les fichiers, aux lignes appropriées, dans les onglets. Expliquer en utilisant un exemple, cela se fait en changeant vim -R file1:42 file2 file3:1337 à vim -S <script> -R file1 file2 file3 - contenant un script vim, dans ce cas:

tab all 
tablast 
1337 
tabprev 
tabprev 
42 

donc: nous ouvrons les fichiers normalement, puis exécuter le script: Saut au dernier onglet, puis saut à la ligne appropriée pour chaque fichier tout en se déplaçant vers le premier fichier.

Ce hack est seulement modérément testé, commentez les erreurs éventuelles.

RE-EDIT:

fixe le script de sorte que même un exemple fou comme vim -R 1:3 "a file" foo -- -- "some other file":34 -R fonctionne comme prévu.

+0

Il serait utile si vous avez inclus votre code avec une explication (pour vox noobs comme moi) ici sur SO. – Enigmadan

1

Pour aller à la ligne 3 sur file1.txt et la ligne 4 file2.txt-je faire ceci:

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

Nice! Je pense que l'écran partagé serait encore mieux: vim -c ": e fichier1.txt |: 3 |: vsplit fichier2.txt |: 4" –

0

Il y a un fichier en ligne appelé plugin vim qui vous permet de faire facilement ce, même si elle a quelques problèmes avec l'ouverture de plusieurs fichiers à des lignes spécifiques actuellement. J'aime certaines des solutions de contournement ci-dessus, mais file-line fonctionne si vous voulez obtenir une liste de tampons :ls complète des fichiers avec leurs numéros de ligne respectifs, et vous pouvez utiliser quelque chose comme bufdo pour les ouvrir tous en groupes.

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

Questions connexes