2009-01-12 6 views
23

J'ai une liste assez longue des fichiers ouverts dans vim qui ressemble à ceci:comment ouvrir un fichier dans une liste de fichiers dans vim?

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

Comment puis-je ouvrir tous un par un le plus simple possible dans la même session de vim soit avec division ou modifier?

+0

Vous dites "Je les ai ouverts", puis je me suis demandé "Comment les ouvrir?" Si c'est le premier, la réponse de Paul Tomblin est pour vous -: n et: prev –

+0

Ou est-ce la liste que vous avez donnée qui est ouverte dans Vim? – seanhodges

+0

juste curieux, mais pourquoi ce wiki communautaire? – Hasturkun

Répondre

44

Je dirais avec -p pour les onglets

vim -p `cat yourlistoffiles` 
+2

Notez que si vous souhaitez ouvrir les fichiers dans des tampons séparés sans utiliser les onglets vim, vous pouvez supprimer l'indicateur '-p'. –

+2

De même, si vous utilisez '-p' pour les onglets, le nombre d'onglets qui seront ouverts sera limité à' tabpagemax' (10 par défaut). Si vous voulez changer cela à 100 (par exemple), vous pouvez ajouter 'set tabpagemax = 100' à votre vimrc ou le définir ailleurs. –

4

Vous pouvez effectuer les opérations suivantes

cat file | xargs vim 

Où « fichier » contient votre liste de fichiers, cela va ouvrir les fichiers dans la même session vim. Comme d'habitude lors de l'ouverture de plusieurs buffers, vous pouvez naviguer avec: bn et backward: bp.

+1

..Sauf le nombre de fichiers est supérieur au seuil de division de xargs, auquel cas vous obtiendrez plusieurs sessions vim. –

+0

En utilisant xargs vous pouvez gérer des dizaines de milliers de fichiers, suggérez-vous de les taper un par un sur la ligne de commande comme vous l'avez suggéré, cela semble beaucoup moins pratique. –

+6

@ng, vous ne comprenez pas xargs du tout. Si vous lui passez des "dizaines de milliers de fichiers", il lancera la commande vim pour les 20 premiers, puis émettra une autre commande vim pour les 20 autres, et ainsi de suite. –

0

Il est aussi simple que de taper

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

Une fois que vous êtes dans vim, vous pouvez basculer entre ": n" pour passer au fichier suivant, ": prev" pour aller au fichier précédent e.

+0

Ce n'est pas ce qui a été demandé, la question est de savoir comment ouvrir une longue liste de fichiers. –

+0

@ng, la question est exceptionnellement ambiguë. –

8

Je vais supposer que vous avez la liste des fichiers ouverts dans Vim et que vous souhaitez simuler la commande « gf » à travers toute la liste ...

Modifier votre .vimrc pour inclure cette fonction:

Vous pouvez ensuite sélectionner le fichier entier (ou l'ensemble de chemins que vous voulez ouvrir) en utilisant le mode visuel (1G, Shift-V, G) et en tapant ": call Openall()". Ensuite, la ligne de commande affichera ceci:

:'<,'>call Openall() 

Ceci lancera la nouvelle fonction OpenAll() sur l'ensemble des lignes en surbrillance.

Appuyez sur Entrée et tous les fichiers seront ouverts dans les tampons d'arrière-plan. Vous pouvez ensuite y accéder en utilisant les commandes de tampon habituelles. : ls les affichera sous forme de liste.

0

Mon plugin searchInRuntime a: Sp et a: commandes Vsp qui feront l'affaire quand on les appellera banged. Cependant, les fichiers doivent exister.

11

Vous pouvez utiliser le mode quickfix, comme suit

:set errorformat=%f 
:cf myfilelist 

à ce stade, vous pouvez utiliser les raccourcis quickfix normal de passer par vos fichiers, :cn pour le fichier suivant, :cp pour le précédent et :cr aller au premier à nouveau.

EDIT:

oh, si vous voulez lire la liste de la mémoire tampon en cours, utilisez :cb au lieu de :cf dans les instructions ci-dessus

+0

Cela me semble être la meilleure solution lorsque le nombre de fichiers est important. Pourrait mettre en place un alias comme: vim -o ': set errorformat =% f' -o ': cf myfilelist' –

+0

@RandyProctor dis que je veux utiliser 'hg st -n' comme ma liste de fichiers, comment ferais-je cela? – kenttam

0

J'ai souvent besoin d'ouvrir une liste changeante des fichiers qui ont été modifiés dans ma caisse de SVN. Ce doublure fonctionne pour ouvrir tous les fichiers modifiés dans les onglets vim.

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

Je suppose que vous voulez sélectionner et liste vim. tous les fichiers d'une certaine extension. De votre répertoire personnel ou d'une source particulière.

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

Ensuite, dans vim, vous pouvez rechercher et afficher cette liste potentiellement énorme. (Un autre sujet)

Vous avez trouvé votre fichier, vous voulez maintenant l'ouvrir en split?

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} 
Questions connexes