Raccourci pour ouvrir un fichier dans Vim

123

Je veux ouvrir un fichier dans Vim comme dans Eclipse en utilisant Ctrl+ Shift+ R, ou via le Ctrl+N option de remplissage automatique. Appelez un raccourci clavier, saisissez le nom / modèle de fichier et choisissez parmi tous les noms de fichiers correspondants.

Je sais l'ouvrir normalement comme:

:tabe <filepath>
:new <filepath>
:edit <filepath>

Le problème ici est que je dois spécifier le chemin complet du fichier dans ces cas.

Techmaddy
la source
1
Notez que les commandes suggérées ont un effet différent :tabeouvriront le fichier dans un nouvel onglet, :newdiviseront horizontalement la fenêtre et :editfermeront le fichier actuel avant d'ouvrir le nouveau.
Skippy le Grand Gourou

Réponses:

61

Je suis récemment tombé amoureux de fuzzyfinder.vim ... :-)

: FuzzyFinderFile vous permettra d'ouvrir des fichiers en tapant des noms partiels ou des modèles.

f3lix
la source
141

Ce que je fais normalement, c'est e .(e-space-dot) qui me donne un répertoire courant navigable - alors je peux /- rechercher des fragments de nom, tout comme trouver un mot dans un fichier texte. Je trouve cela généralement assez bon, simple et rapide.

dkretz
la source
22
Vous n'avez pas besoin d'espace, économisant 25% de frappe supplémentaire. ( :e.).
Konrad Rudolph
67
Vous n'avez pas besoin du point si vous utilisez un e majuscule, par exemple: E <ENTER>
Andriy Drozdyuk
2
@drozzy Cela se produit avec vim :-)
DerMike
7
Il y a une différence de comportement entre :e.et :Ecependant: si le fichier actuel a été édité et pas encore sauvegardé, le premier se plaindra (comme :edit) à cause de "pas d'écriture depuis le dernier changement", tandis que le second divisera horizontalement la fenêtre (comme :new) pour permettre l'ouverture d'un nouveau fichier (alors que les deux remplaceront le fichier actuel par le nouveau fichier s'il n'a pas été modifié (like :edit)).
Skippy le Grand Gourou
1
Si vous ouvrez un fichier, puis le remplacez par un deuxième fichier, vous pouvez revenir au premier en utilisant "e #"
dkretz
33

:find est une autre option.

J'ouvre vim à partir de la racine de mon projet et j'ai le path ensemble.

Ensuite, je peux ouvrir des fichiers situés n'importe où dans l'arborescence en utilisant:

:find **/filena< tab >

Tab se complétera automatiquement à travers diverses correspondances. (lui **dit de rechercher récursivement dans le chemin).

Mattwarren
la source
Je ne trouve pas utile :findcar pour obtenir le chemin relatif au répertoire de travail. Voir la question et la réponse @romainl ici: stackoverflow.com/questions/28224168/… . Je trouve la réponse @strager plus intéressante pour obtenir plus facilement le chemin relatif au répertoire de travail.
ziiweb
25

Vous pouvez rechercher un fichier dans le chemin actuel en utilisant **:

:tabe **/header.h

Appuyez sur l'onglet pour voir diverses complétions s'il y a plus d'une correspondance.

strager
la source
J'ai essayé de l'utiliser mais c'est tellement lent. Je veux dire que mon application est volumineuse et que l'éditeur a cessé de fonctionner pendant un certain temps. Connaissez-vous un paramètre pour augmenter les performances et la vitesse de l'éditeur.
Techmaddy
1
Bonne réponse. Utilisez quelque chose comme :tabe **/*der.hsi vous ne vous souvenez pas du nom complet du fichier.
ziiweb
16

Pensez à utiliser le plug-in CtrlP .

Il est inclus dans Janus Distributive .

Vous permet de rechercher des fichiers dans le répertoire courant, des tampons ouverts ou les fichiers les plus récemment utilisés en utilisant la «correspondance floue» ou l'expression régulière.

Alexey
la source
1
en fait, je l'utilise dans le cadre de la distribution Janus.
Alexey le
Le dépôt CtrlP d'origine est inactif, mais il y a un fork actif
jpyams
12

sauf si je manque quelque chose,: le nom de fichier est le moyen le plus rapide que j'ai trouvé.

Vous pouvez également utiliser tab pour compléter automatiquement le nom de fichier.

Ian P
la source
@dirkgently, ça l'est. C'est toujours un raccourci, comme le suggère le titre de cette question, mais je ne pense pas que ce soit ce que le questionneur recherche.
strager
Pour moi, la saisie semi-automatique de l'onglet ne fonctionne pas pour: e. En outre, vous ne voulez pas toujours rechercher un nom de fichier qui commence par quelque chose, mais plutôt un mot du milieu dans un nom de fichier.
Andriy Drozdyuk
9

J'utilise quelques raccourcis dans mon fichier .vimrc (syntaxe exacte ci-dessous).

Ils sont basés sur le fait que dans 90% des cas, je souhaite ouvrir un autre fichier dans le même répertoire que le fichier que je suis en train de modifier, ou dans un répertoire qui est très proche dans la hiérarchie de ce fichier édité.

Voici ce que font les commandes:

,cd : Remplacez le répertoire de travail actuel par le répertoire dans lequel se trouve le fichier en cours d'édition.

,e: Ouvre un fichier avec le répertoire de travail actuel déjà rempli, vous ne devez donc spécifier que le nom du fichier.

Mettez-les dans votre .vimrc:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Voici une séquence d'événements:


  1. Vous éditez un fichier appelé test.java dans "/ home / prog"
  2. ,cd -> Le répertoire de travail actuel devient "/ home / prog"
  3. ,e -> Se développe en ": e / home / prog" pour que vous puissiez simplement remplir le nom du fichier, dites test.h.

  1. ,e -> S'étend à ": e / home"
  2. tab -> Parcourir les sous-répertoires de / home
  3. enter -> cd dans le répertoire que vous voulez dire / home / prog
  4. ,e -> S'étend à ": e / home / prog"
Himadri Choudhury
la source
8

Il y a aussi command-t que je trouve être le meilleur du groupe (et je les ai tous essayés). C'est un peu compliqué de l'installer mais, une fois installé, c'est un rêve à utiliser.

https://wincent.com/products/command-t/

Bronson
la source
1
Vous pouvez également essayer ctrlp.vim ( github.com/kien/ctrlp.vim ). C'est fondamentalement le même que Command-T mais écrit en pur Vimscript. (À
mon humble avis,
6

Utilisez les onglets, ils fonctionnent lors de la saisie des chemins de fichiers en mode d'échappement vim!

dirkgently
la source
4

Si vous avez des balises (et vous devriez), vous pouvez ouvrir un fichier à partir de la ligne de commande juste par le nom de la classe ou de la méthode ou de la fonction c, avec "vim -t DBPlaylist", et dans vim avec ": tag ShowList ".

Paul Tomblin
la source
4

Si vous modifiez des fichiers dans un répertoire commun, vous pouvez accéder :cdà ce répertoire, puis utiliser:e uniquement le nom de fichier.

Par exemple, plutôt que:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Tu peux faire:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

Ou, si vous avez déjà un fichier dans le répertoire souhaité ouvert, vous pouvez utiliser le %raccourci pour le nom de fichier actuel, et le couper dans le répertoire actuel avec le :hmodificateur ( :help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

Et, comme d'autres l'ont dit, vous pouvez compléter les noms de fichiers par tabulation sur l'ex-ligne (voir :help cmdline-completionpour plus d'informations).

rampion
la source
4

Ce n'est pas exactement ce que vous recherchez, mais c'est bien dans de nombreux cas (mais pas tous).

Si vous ouvrez VIM et qu'il y a un nom de fichier dans le tampon, vous pouvez placer le curseur sur ce nom et ce type de fichier gf. Cela ouvre le fichier dont le nom est sous le curseur dans le même tampon. C'est la même chose que

:e CTRL+r CTRL+w

Nathan Fellman
la source
1
J'ai appuyé sur gf et maintenant j'ai ouvert le nouveau fichier qui se trouve sous le curseur. Maintenant, comment revenir au fichier d'origine. !!
vrbilgi
@ user430294: Il est ouvert dans un tampon différent. Utilisation:b oldname
Nathan Fellman
@vrbilgi, utilisez Ctrl + o pour revenir au fichier précédemment édité. Utilisez Ctrl + i pour avancer à nouveau vers le fichier à partir duquel vous êtes de retour.
Беров
3

Je connais trois plugins qui permettent d'ouvrir des fichiers, prennent en charge l'auto-complétion et ne nécessitent pas d'entrer le nom de chemin complet du ou des fichiers à ouvrir (tant que les fichiers sont sous l'un des répertoires de l' &pathoption vim) :

Dernièrement, j'ai vu un autre plugin avec une fonctionnalité similaire, mais je ne me souviens pas du nom.

Bientôt, il est probable que find supporte l'auto-complétion - des correctifs sur ce sujet circulent sur la liste de diffusion vim_dev ces jours-ci.

Luc Hermitte
la source
1
  • vous pouvez utiliser (set wildmenu)
  • vous pouvez utiliser l'onglet pour compléter automatiquement les noms de fichiers
  • vous pouvez également utiliser la correspondance, par exemple: e p*.datou quelque chose comme ça (comme dans l'ancien 'dos)
  • vous pouvez aussi: parcourir confirmer e (pour une fenêtre graphique)

  • mais vous devriez aussi probablement spécifier la version de vim que vous utilisez et comment cela fonctionne dans emacs. Peut-être que nous pourrions vous trouver une alternative exacte à vim.

Tour
la source
1

FuzzyFinder a été mentionné, mais j'aime le comportement de textmate de FuzzyFinderTextmate plugin qui étend le comportement pour inclure tous les sous-répertoires.

Assurez-vous que vous utilisez la version 2.16 de fuzzyfinder.vim - Les versions supérieures cassent le plugin.

Naseer
la source
1

Avec Exuberant ctags, vous pouvez créer des fichiers de balises avec des informations sur les fichiers:

ctags --extra=+f -R *

Ensuite, ouvrez le fichier à partir de VIM avec

:tag filename

Vous pouvez également utiliser <tab>pour compléter automatiquement le nom de fichier.

Wonil
la source
1

Dans GVIM, le fichier peut être parcouru en utilisant la boîte de dialogue ouvrir / lire / écrire;

:browse {command}

{command} - ouvrir / lire / écrire

open - Ouvre le fichier lu - Ajoute l' écriture du fichier - Boîte de dialogue Enregistrer sous

Samantha
la source
0

J'ai installé FuzzyFinder. Cependant, la limitation est qu'il ne trouve que les fichiers dans le répertoire actuel. Une solution de contournement consiste à ajouter FuzzyFinderTextmate. Cependant, d'après les documents et les commentaires, cela ne fonctionne pas de manière fiable. Vous avez besoin de la bonne version de FuzzyFinder et vous avez besoin que votre copie de Vim soit compilée avec le support Ruby.

Une solution de contournement différente que j'essaie maintenant est d'ouvrir tous les fichiers dont je suis susceptible d'avoir besoin au début de la session d'édition. Par exemple, ouvrez tous les fichiers dans les répertoires clés ...

:args app/**
:args config/**
:args test/**
etc...

(Cela signifie que j'aurais peut-être des dizaines de fichiers ouverts, mais jusqu'à présent, cela semble toujours fonctionner correctement.)

Après cela, je peux utiliser FuzzyFinder en mode tampon et cela agira un peu comme le command-oraccourci de TextMate ...

:FuzzyFinderBuffer
Ethan
la source
Vous êtes sûr? J'ai une configuration dans mon .vimrc, recherchez "g: fuf_abbrevMap". J'ai dû trouver un exemple dans la documentation. Lorsque je tape le raccourci, je tape ensuite un abbrev comme "web:" et il recherchera tous les fichiers dans un dossier de mon choix. Mon problème est en fait que pour une raison quelconque, il n'ouvre plus les fichiers, je vois [NOUVEAU RÉPERTOIRE] dans la barre d'état à la place. Mais j'ai le même problème avec: o, semble sans rapport avec fuf.