comment ouvrir un fichier dans une liste de fichiers dans vim?

j'ai allongé la liste des fichiers ouverts dans vim qui ressemble à ceci:

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

Comment puis-je ouvrir chacun d'eux un par un de la manière la plus facile possible dans la même session de vim soit avec split soit avec edit?

24
demandé sur dimus 2009-01-13 01:28:01
la source

10 ответов

je dirais avec -p pour les onglets

vim -p `cat yourlistoffiles`
50
répondu Ronny Brendel 2009-01-13 01:33:13
la source

vous pouvez utiliser le mode quickfix, comme suit

:set errorformat=%f
:cf myfilelist

a ce point vous pouvez utiliser les raccourcis quickfix normaux pour parcourir vos fichiers,:cn pour le prochain fichier, :cp pour le précédent et :cr pour aller à la première fois.

EDIT:

oh, si vous voulez lire la liste dans le tampon courant, utilisez :cb au lieu de :cf dans les instructions ci-dessus

13
répondu Hasturkun 2009-01-13 13:34:29
la source

je vais supposer que vous avez la liste des fichiers ouverte dans Vim, et que vous voulez simuler la commande "gf" dans toute la liste...

Modifier votre .vimrc pour inclure cette fonction:

function Openall()
    edit <cfile>
    bfirst
endfunction

vous pouvez ensuite mettre en surbrillance le fichier entier (ou l'ensemble des 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() dans toutes les zones surlignées ligne.

Appuyez sur Entrée et tous les fichiers seront ouverts en arrière-plan tampons. Vous pouvez alors y accéder en utilisant les commandes habituelles de buffer. :ls affiche sous forme de liste.

8
répondu seanhodges 2009-01-13 02:56:34
la source

Vous pouvez faire ce qui suit

cat file | xargs vim

où "file" contient votre liste de fichiers, ceci ouvrira les fichiers de la même session vim. Comme d'habitude lorsque vous ouvrez plusieurs tampons, vous pouvez naviguer vers l'avant avec: bn et vers l'arrière :bp.

4
répondu ng. 2009-01-13 02:36:49
la source

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

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

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

vous avez trouvé votre fichier, Maintenant vous voulez 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}
2
répondu Will Budic 2017-07-25 07:30:23
la source

j'ai souvent besoin d'ouvrir une liste changeante de fichiers qui ont été modifiés dans ma commande SVN. Ce liner fonctionne pour ouvrir TOUS les fichiers modifiés dans les onglets vim.

svn st | grep ^M | awk "{print()}" | xargs vim -p
1
répondu Jared Chmielecki 2014-08-25 18:57:08
la source

cela pourrait peut-être aider:

http://vimdoc.sourceforge.net/htmldoc/windows.html

0
répondu Eldelshell 2009-01-13 01:34:24
la source

C'est aussi simple que de taper

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

une Fois que vous êtes dans vim, vous pouvez basculer entre ensuite avec ":n" pour passer au fichier suivant, ":prev" pour passer au fichier précédent.

0
répondu Paul Tomblin 2009-01-13 01:40:54
la source

Mon searchInRuntime le plugin a des commandes A :Sp et a: Vsp qui feront l'affaire quand il sera appelé banged. Toutefois, les fichiers doivent exister.

0
répondu Luc Hermitte 2009-01-13 12:20:04
la source

Essayez ceci avec bash:

$ vim -S <(sed "s/^/badd /" <your file name>)

Mais je ne sais pas pourquoi la première ligne du fichier est ignoré... :- O

Ce script fonctionne comme prévu:

rm -f myfile
for i in `seq 10000`
do
  touch $i
  echo $i >> myfile
done
vi -c "badd `head -1 myfile`" -S <(sed "s/^/badd /" myfile)

http://vimdoc.sourceforge.net/htmldoc/starting.html#-S

http://vimdoc.sourceforge.net/htmldoc/windows.html#:bad

0
répondu Daniel Fanjul 2011-09-02 18:50:12
la source

Autres questions sur