Comment puis-je ouvrir plusieurs fichiers à la fois dans Vim?

87

Existe-t-il un moyen d'ouvrir tous les fichiers d'un répertoire à partir de Vim? Donc, :commandcela dirait en effet "Ouvrez tous les fichiers sous /some/pathdans des tampons".

Idéalement, ce serait génial d'ouvrir tous les fichiers sous un répertoire de manière récursive.

Ethan
la source

Réponses:

105

La commande que vous recherchez est args:

Par exemple:

:args /path_to_dir/*

ouvrira tous les fichiers du répertoire

skinp
la source
32
Utilisez **pour faire correspondre les fichiers de manière récursive. Par exemple:args /path_to_dir/**
daf
1
Pour ouvrir des fichiers sans extension, spécifiez le répertoire parent, par exemple args ** /. Hg / hgrc fonctionne mais ** / hgrc ne fonctionne pas.
79E09796
11
Une fois les fichiers ouverts, utilisez :tab allpour les mettre dans des onglets individuels.
Backlin
"Tous les fichiers" comprendra des sous-répertoires qui peuvent ne pas être souhaités. (Mes erreurs vim "/path_to_dir/subdir/" Illegal file name). La solution rapide consiste à exécuter la deuxième commande argd */pour les supprimer à nouveau de la liste
lessthanideal
Ce serait vraiment bien de compléter la réponse avec la suggestion suivante: comme bonne pratique et afin de montrer comment appliquer le même ensemble de commandes à tous les fichiers qui ont été ouverts, vous pouvez exécuter la commande suivante pour appliquer toutes les commandes contenu dans le fichier my_commands_batch.vim:argdo source my_commands_batch.vim
aturegano
21

Pourquoi cela ne fonctionne pas si je veux ouvrir tous les fichiers se terminant par une certaine extension? j'ai essayé

:n ./**.cs

et n'ouvre que les fichiers du répertoire en cours.

J'ai trouvé la réponse, le bon code est :n **/*.cs

Pour plus d'informations :h find

mp.
la source
9

As-tu essayé

:n /some/path/*

Il ouvrira tous les fichiers dans / some / path

Je ne pense pas que cela ouvrira le fichier de manière récursive.

ÉDITER

Peut-être que l'utilisation de ** s'ouvrira récursivement comme daf mentionné

Luc M
la source
Que signifie le: n? En regardant dans l'aide de vim, je ne fais que "répéter le dernier motif" .. ce que je comprends est la frappe. Existe-t-il un moyen d'obtenir de l'aide uniquement pour le mode commande?
U0001 le
1
Trop facile: h: n .. obtenir de l'aide pour ": n". Je n'aime pas répondre à mes propres questions;)
U0001
4

Une méthode qui ne nécessite pas de jouer avec argsest de mettre la liste des fichiers dans un fichier texte, puis d'utiliser la :socommande pour exécuter les commandes dans ce fichier.

Par exemple, si vous souhaitez ouvrir tous les fichiers qui se terminent dans .phpun répertoire donné, commencez par créer files.txtcontenant la liste des fichiers, précédée de la commande que vous souhaitez utiliser pour les ouvrir.

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

Ensuite, dans vim:

:so files.txt

Si la liste des fichiers est volumineuse, il est relativement simple de générer le files.txtfichier rapidement, en redirigeant la sortie de lsvers un fichier, puis en utilisant une macro vim à ajouter spavant chaque nom de fichier.

Ce n'est évidemment pas aussi élégant que d'utiliser les commandes argset argdo, mais ces commandes sont également beaucoup plus compliquées.

Il pourrait aussi y avoir un moyen de le faire avec une seule commande sur la ligne de commande, mais même après 16 ans, je trouve toujours que la programmation vim est étrange et obscure.

dirtside
la source
Intéressant ! Cela semble être un bon moyen de garder le contrôle sur les fichiers à ouvrir, au lieu d'ouvrir aveuglément tous les fichiers d'un répertoire donné si ces fichiers ne sont pas tous requis.
cram2208
1

Une autre façon d'ouvrir des fichiers de manière récursive

find . -type f -exec vi {} \;
voyou-un
la source
4
Ne répond pas à la restriction «de l'intérieur de Vim».
ZyX
et pourtant fait ce qu'il faut :)
rogue-one
3
Ce ne est pas. Ce qui est nécessaire, ce sont des fichiers du répertoire donné de manière récursive depuis vim . Si vous jetez des conditions, vous pouvez aussi bien dire que kate **/*(^/)(en utilisant la syntaxe de globbing zsh) fait ce qui est nécessaire: ouvre les fichiers du répertoire donné de manière récursive. Ce n'est pas «de l'intérieur» et il n'utilise pas du tout vim, mais il «fait pourtant ce qu'il faut». Ou même kate ~/.vimrc ~/.bashrc. Omettre «from withing», «from the given directory» et «récursivement» tout à fait, mais il «fait pourtant ce qu'il faut»: ouvre les fichiers.
ZyX
Cela ouvre les fichiers un à la fois
Paul
1

Si vous souhaitez ajouter à la liste d'arguments;

:arga what_you-d_like_to_add

voir

:he arga

de / dans vim pour plus d'informations.

imme
la source