Je sais que je peux ouvrir plusieurs fichiers avec vim
en faisant quelque chose comme vim 2011-12*.log
, mais comment basculer entre les fichiers et fermer les fichiers un par un? De plus, comment savoir le nom de fichier du fichier actuel que je modifie?
Tout d'abord, dans vim, vous pouvez entrer : (deux points), puis aidez help
, ala :help
pour une liste de rubriques d'auto-assistance, y compris un court didacticiel. Dans la liste des sujets, déplacez votre curseur sur le sujet qui vous intéresse, puis appuyez sur ctrl] et ce sujet sera ouvert.
Un bon endroit pour commencer serait le sujet
|usr_07.txt| Editing more than one file
Ok, passons à votre réponse.
Après avoir démarré vim avec une liste de fichiers, vous pouvez passer au fichier suivant en entrant :next
ou :n
pour faire court. :wnext
est l'abréviation d'écrire les modifications actuelles, puis de passer au fichier suivant.
Il y a aussi un analogue :previous
, :wprevious
et :Next
. (Notez que :p
est un raccourci pour :print
. Le raccourci pour :previous
est :prev
ou :N
.)
Pour voir où vous vous trouvez dans la liste des fichiers, entrez :args
et le fichier en cours de modification apparaîtra dans []
(supports).
Exemple:
vim foo.txt bar.txt
:args
résultat:
[foo.txt] bar.txt
vous pouvez ouvrir un autre fichier pendant que vim est ouvert avec :tabe filename
et pour passer à l'autre fichier que vous tapez :tabn
ou :tabp
pour le suivant et le précédent en conséquence.
Les raccourcis clavier gT et gt peuvent également être utilisés pour changer d'onglet lorsque vous n'êtes pas en mode édition (c'est-à-dire pas en mode insertion, remplacement, etc.). Sur certains systèmes Ctrl+Alt+Page Up et Ctrl+Alt+Page Down autorise également le changement de tabulation, mais cela ne fonctionne pas toujours (par exemple, il ne fonctionnera pas dans le terminal OS X "prêt à l'emploi").
Et vous pouvez voir le nom du fichier en haut de l'application vim.
Commandes pour basculer entre les tampons:
:bf # Go to first file.
:bl # Go to last file
:bn # Go to next file.
:bp # Go to previous file.
:bw # Close file.
:help buffer
pour plus d'informations
Pour connaître le nom de fichier, utilisez Ctrl+G, :file
ou :f
Outre les réponses données, une autre option consiste à diviser la fenêtre avec:
:sp
:vsp
:vsp
est pour la division verticale. Utilisez ensuite Ctrl+W <ARROW_KEYS>
pour se déplacer dans les volets.
:n -> Move to next file
:N -> Move to previous file
J'ai posé une question similaire au superutilisateur,
"Comment copier et coller entre différentes fenêtres bash et fichiers ouverts avec VI?"
La réponse à ma question était que vous ne pouvez pas, mais vous pouvez ouvrir deux fichiers dans une fenêtre bash en utilisant la commande :split
De VIM:
$ vim file1
, Ouvrez un deuxième fichier dans VIM en utilisant la commande :split file2
.$ vim -o file1 file2
De bash.:q
Se ferme et :q!
Force à se fermer.Mon bash est en noir et blanc, donc le nom de fichier de chaque écran est stylisé comme une ligne inversée "sélectionnée" avec le nom de fichier qui y est cité.
Woot!
argadd a/b c/d e/f
argadd ...
ajoutera tous les fichiers aux arguments, ainsi qu'à :ls
/:buffers
et vous permet de les modifier.
Voir :h arglsit
& :h argedit
& :h argsd
En outre, vous ne pouvez effectuer certaines actions que sur des arguments avec :argdo ...
, et vous pouvez recommencer avec vos arguments en faisant :argsd*
.
Je trouve que la méthode la plus pratique pour modifier plusieurs fichiers consiste à utiliser des onglets. Vous pouvez ouvrir plusieurs fichiers dans des onglets séparés via la ligne de commande comme ceci:
vim -p file1.txt file2.txt
Ou si vous avez déjà ouvert vim, vous pouvez ouvrir un nouveau fichier dans un nouvel onglet comme ceci:
:tabe file2.txt
Une fois les onglets ouverts, utilisez gt
pour afficher l'onglet suivant et gT
pour afficher l'onglet précédent.
Vous pouvez également accéder au premier onglet avec 1gt
, le deuxième onglet avec 2gt
, etc.
Vous pouvez fermer les onglets à l'aide de :tabc
Enfin, vous pouvez déplacer l'onglet actuel vers n
ème emplacement avec :ntabm
où n
est un nombre supérieur ou égal à 0
.
Il existe de nombreuses façons de le faire. La première, peut-être la moins pratique, consiste à appeler vim
avec les fichiers que vous souhaitez modifier - créez:
vim first_file second_file ...
Il appelle les deux fichiers dans deux tampons. Pour passer d'un fichier à un autre, veuillez utiliser :n
et :N
. Pour répertorier les fichiers que vous modifiez, :args
fera l'affaire. :help buffer
vous aidera davantage à ce sujet.
Ceci devrait répondre à votre question. Mais voici plus d'informations:
Il existe un moyen de modifier vos fichiers de manière plus pratique en fractionnant l'écran de votre console à l'aide de vim. Pour ce faire, ouvrez deux cadres avec :split
(:sp
) ou :vsplit
(:vs
) lors de l'utilisation de vim. Naviguez ensuite dans ces cadres en utilisant la combinaison Ctrl + W > Ctrl + W. Vous pouvez aussi utiliser Ctrl + W + la flèche ou la clé (H, J, K ou L) correspondant à la trame suivante. Lorsque cela est fait, modifiez le fichier souhaité avec :e file_name
. :help opening-window
vous aidera davantage à ce sujet.
Maintenant, si vous souhaitez voir les différences entre les fichiers, utilisez le -d
argument ou appelez le programme vimdiff (c'est la même chose) avec les fichiers correspondants. :help diff
vous aidera davantage à ce sujet.
vim -d first_file second_file ...
Veuillez me faire savoir si vous avez un problème.
J'aime utiliser des fenêtres divisées - horizontales et verticales - pour éditer plusieurs fichiers.
J'utilise tmux pour gérer ces fenêtres plus facilement
https://tmux.github.io/ "Qu'est-ce qu'un multiplexeur de terminaux? Il vous permet de basculer facilement entre plusieurs programmes dans un même terminal, de les détacher (ils continuent de fonctionner en arrière-plan) et de les rattacher à un autre terminal. Et faites-en beaucoup plus. Consultez le manuel. "
Exemple: regarder des fichiers ou exécuter des tests à droite, éditer des fichiers de test et source à gauche:
:e #(filename)
pour basculer entre deux fichiers ouverts
:p
pour le fichier précédent
:n
pour le fichier suivant