Je comprends que me limiter à vanilla Vim (sans utiliser de plugins) limite la puissance de l'éditeur, mais comme je passe fréquemment d'une machine à l'autre, il est souvent trop difficile de déplacer mon environnement partout. Je veux juste rester dans la vanille Vim.
Ce qui me retient, c'est la possibilité de basculer rapidement entre les fichiers. I (croire au moins) ont une bonne compréhension des tampons , des fenêtres , onglets , ainsi que netrw ( Vex
, Ex
, etc.).
Mais dans un éditeur tel que Sublime Text , je peux simplement taper ctrl- pet instantanément je suis au fichier.
Je sais que je peux passer au shell, mais je me demande s'il existe d'autres secrets "cachés" pour passer rapidement d'un fichier à l'autre dans Vim en fonction de plus que le nom de fichier.
Réponses:
L'équivalent le plus proche ("le plus proche", pas "exact") de ST2 Ctrl+ Pest un plugin appelé, préparez-vous… CtrlP . Il existe d'autres plugins similaires comme Command-T ou FuzzyFinder .
J'utilise CtrlP et j'adore ça mais je soutiens sans réserve votre décision de devenir "sans plugin". Ce n'est pas la façon la plus simple de procéder, mais elle sera payante à long terme.
Ouverture de fichiers
Le moyen le plus simple d'ouvrir un fichier est
:e /path/to/filename
. Heureusement, vous obtenez des tabulations et des jokers: le classique*
et un spécial**
, qui signifie "tout sous-répertoire".En combinant tout cela, vous pouvez faire:
de choisir parmi tous les fichiers contenant
foo
dans leur nom sous le répertoire de travail ou:de choisir parmi tous les fichiers contenant
bar
dans leur nom sous n'importe quel sous-répertoire contenantfoo
dans son nom, n'importe où sous le répertoire de travail.Bien sûr, cela fonctionne pour
:tabe[dit]
,:sp[lit]
et:vs[plit]
, aussi.Ces commandes sont cependant limitées à un seul fichier. Utilisez
:next
pour ouvrir plusieurs fichiers:et jetez un oeil à
:help arglist
.Sauter entre les tampons
:b[uffer]
est la commande de base de commutation de tampon:Notez que beaucoup de ces commandes et leurs proches acceptent un décompte.
La
:ls
commande vous montre une liste des tampons chargés. C'est un peu "spécial", cependant: les tampons reçoivent un numéro lors de leur création afin que vous puissiez avoir une liste qui ressemble à1 2 5
si vous supprimez des tampons. C'est un peu gênant, oui, et cela rend le passage à un tampon par son numéro un peu trop gênant. Je préfère passer par une partie du nom,:b foo<Tab>
ou du vélo,:bn :bp
.Quoi qu'il en soit, voici un mappage sympa qui répertorie tous les tampons chargés et remplit l'invite pour vous, en attendant que vous tapiez le numéro d'un tampon et appuyez sur
<enter>
:Avec ce mappage, passer à un autre tampon est aussi simple que:
ou:
L'idée vient de cette image tirée de la collection d'infographies Vim de Bairui :
Vim a aussi
<C-^>
(ou<C-6>
sur certains claviers) - l'équivalent en mode normal de:b#
- pour sauter entre le tampon actuel et le précédent. Utilisez-le si vous alternez souvent entre deux tampons.Lisez tout sur les tampons dans
:help buffers
.Aller à la déclaration
Dans un fichier, vous pouvez utiliser
gd
ougD
.Dans un projet, la fonction "tags" de Vim est votre ami mais vous aurez besoin d'un indexeur de code externe comme ctags ou cscope. Les commandes les plus élémentaires sont
:tag foo
et<C-]>
avec le curseur sur un nom de méthode. Les deux outils sont bien intégrés dans Vim: voir:help tags
,:help ctags
et:help cscope
.Pour ce que ça vaut, j'utilise beaucoup la navigation par balises pour me déplacer dans un projet (en utilisant les commandes CtrlP
:CtrlPTag
et les:CtrlPBufTag
commandes, principalement, mais aussi celles intégrées) et ma méthode de commutation de tampon "générique" préférée est par nom.Déployer votre configuration
De nombreux utilisateurs de Vim placent leur configuration sous contrôle de version, ce qui rend très rapide et facile l'installation de votre propre configuration sur une nouvelle machine. Pensez-y.
ÉDITER
Il y a quelques mois, j'ai dû travailler sur une machine distante avec un Vim obsolète. J'aurais pu installer un Vim approprié et cloner ma propre config bien-aimée mais j'ai décidé de voyager léger, cette fois, pour «affûter la scie». J'ai rapidement construit un minimaliste
.vimrc
et revisité quelques fonctionnalités natives à moitié oubliées. Après ce concert, j'ai décidé que CtrlP n'était pas si nécessaire et je m'en suis débarrassé: les fonctionnalités natives et les mappages personnalisés ne sont pas aussi sexy, mais ils font le travail sans trop de dépendances.Jongler avec des fichiers
:find
est une commande vraiment géniale dès que vous avezset path
correctement. Avec mes paramètres,,ffoo<Tab>
retrouvera tous les fichiers contenantfoo
sous le répertoire courant, de manière récursive. C'est rapide, intuitif et léger. Bien sûr, je profite de la même finition et des mêmes wildcards qu'avec:edit
et amis.Pour rendre le processus encore plus rapide, les mappages suivants me permettent de sauter des parties entières du projet et de trouver des fichiers de manière récursive dans le répertoire du fichier actuel:
AVERTISSEMENT! L'
path
option est extrêmement puissante. La valeur ci-dessus -.,**
fonctionne pour moi, mais les langues que j'utilise n'ont pas de bibliothèque standard. La valeur appropriée dépend entièrement de vos besoins.Jongler avec les tampons
Les mappages ci-dessus répertorient les tampons disponibles dans le "wildmenu" avec une invite vide, me permettant de naviguer dans le menu avec
<Tab>
ou de taper quelques lettres et<Tab>
encore de réduire la liste. Comme avec les mappages de fichiers ci-dessus, le processus est rapide et presque sans friction.Ces mappages parlent d'eux-mêmes.
Jongler avec les tags
Ce mappage utilise la recherche regex au lieu de la recherche par mot entier afin que je puisse le faire
,jba<Tab>
pour trouver une balisefoobarbaz()
.Oui, la correspondance floue crée une dépendance, mais vous pouvez être tout aussi productif sans elle. Et pour une fraction du coût.
PLUS EDIT
Quelques trucs / astuces supplémentaires…
Options du Wildmenu
Le "wildmenu", activé avec
set wildmenu
, facilite la navigation dans les fichiers / tampons. Son comportement est régi par un tas d'options qui méritent d'être étudiées:wildmode
indique à Vim comment vous voulez que le "wildmenu" se comporte:wildignore
filtre toute la cruauté:wildignorecase
vous permet de rechercherfoo
et de trouverFoo
:Marques de fichier
J'ai récemment trouvé ce bijou chez quelqu'un d'autre
~/.vimrc
. Il crée une marque de fichier à la position exacte du curseur chaque fois que vous quittez une mémoire tampon afin que, où que vous soyez,'J
saute au dernier tampon JavaScript que vous avez modifié. Impressionnant.la source
:e
mais je vais l'utiliser beaucoup à partir de maintenant. Je suis émerveillé par le travail qui est entré dans Ctrl-P et je peux en apprendre beaucoup, mais cela n'a pas fonctionné pour moi. Je l'ai trouvé un peu lent et en tant que tel interrompant mon train de pensées tout en travaillant (cela pourrait être mon système, mes paramètres, moi-même mais je n'ai pas enquêté)**
c'est génial, en effet.gb
carte. Un autre que j'utiliserai beaucoup. Tous les plugins de tampon que j'ai essayés (CtrlP, bufExplorer, ...) ne sont pas aussi rapides que cela (d'accord, ils offrent plus de fonctionnalités mais pas assez pour que je continue à les utiliser) .La réponse dépend beaucoup de vos préférences et de votre situation. Quelques exemples:
<C-^>
c'est très pratique. En général, le fichier alternatif est un concept important.:split
s détourne le problème de la localisation d'un tampon de la localisation de la fenêtre (une fois que vous avez ouvert tous les tampons). Vous pouvez l'utiliser[N]<C-w><C-w>
pour y accéder rapidement.:[N]b[uffer]
et:[N]sb[uffer]
sont très pratiques;:ls
vous indique les chiffres.Les plugins (ou du moins les mappages personnalisés) peuvent beaucoup améliorer les choses, et il y a toute une variété sur ce sujet sur vim.org . Il existe différents mécanismes pour distribuer votre configuration (Pathogen + GitHub, Dropbox, ...), ou vous pouvez éditer à distance les fichiers du serveur via le plugin netrw fourni avec Vim.
la source
mA
pour stocker la marqueA
et `` `` A '' pour revenir. Je trouve netrw beaucoup plus utile après avoir appris:Rex
quels retours dans l'explorateur.:b
,:e
et bien d'autres peuvent prendre des caractères génériques comme*
et**
. La:b
commande peut prendre un nom de fichier partiel. Combinez cela avec<c-d>
ou le menu sauvage, vous pouvez aller assez loin. En ce qui concerne les plugins, vous pouvez utiliser quelque chose de spécifique au domaine comme rail.vim qui fournit des commandes de navigation spécifiques aux rails ou quelque chose de plus général comme CtrlP.Parfois, il est également pratique de parcourir séquentiellement une liste de fichiers (par exemple, si vous avez fait quelque chose comme
vim *.php
ouvrir plusieurs fichiers à la fois). Ensuite, vous pouvez utiliser:n[ext]
(ainsi que:prev[ious]
,:fir[st]
et:la[st]
) pour la navigation (en plus de ce qui a été suggéré dans les autres réponses).la source
Vous pouvez effectuer la complétion des onglets génériques sur la ligne de commande sans aucun plug-in. par exemple
vous permettra de parcourir tous les fichiers commençant par «foo» dans l'arborescence des répertoires sous ./src et de sélectionner celui que vous souhaitez éditer.
Si vous avez déjà édité le fichier et qu'il est toujours dans une mémoire tampon, vous pouvez y accéder avec:
qui parcourra tous les tampons avec «foo» dans le chemin. Vous devrez peut-être définir les options wildmode et wildmenu pour obtenir le comportement souhaité. j'ai
dans mon .vimrc.
la source
Si vous êtes sur un nom de fichier et que vous souhaitez accéder à ce fichier, le
gf
fera pour vous. J'aime aussi utiliser ctags , qui n'est pas un plugin; vous construisez simplement les balises et pouvez facilement parcourir votre base de code.la source
Si vous voulez basculer entre les fichiers dans l'éditeur vim, veuillez voir la réponse ci-dessous
Appuyez d'abord sur la
Esc
touche pour quitter le mode d'édition.Tapez ensuite
:e
pour vérifier le chemin du fichier actuel.si vous voulez aller dans un autre fichier, tapez en
:e /path-of-file.txt/
utilisant ceci, vous pouvez changer.Si vous souhaitez accéder au fichier précédent, tapez simplement
:e#
le chemin du fichier précédent.la source
J'ai eu le même problème avec Vim.
La dernière chose que je souhaite est de dépendre des plugins pour une tâche aussi banale que le changement de fichier.
J'ai ajouté les lignes suivantes à
.vimrc
Et BAM! Je peux maintenant
:find any/filename/in/any/folder/
tant que vim est dans le répertoire racine du projet. L'achèvement des onglets fonctionne. Les jokers fonctionnent!Une fois que les fichiers sont déjà ouverts et qu'il y a une tonne de tampons en arrière-plan (vous pouvez les utiliser
:ls
pour voir tous les tampons), l'exécution d':b any/file <TAB>
une recherche floue pour tous les tampons et saute vers le fichier requis. Dans le cas où il n'est pas unique, il y aura un wildmenu d'onglets (d'où la 2ème ligne dans .vimrc) qui peuvent être sélectionnés en utilisant tab.Ma réponse vient de cette superbe vidéo
https://www.youtube.com/watch?v=XA2WjJbmmoM&feature=youtu.be&t=489
Il y a plus d'astuces et je recommande de la regarder.
la source