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.


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.


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.


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).


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.


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.


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.


@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"


6

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


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 ".


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).


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


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.


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.


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.


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.


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


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

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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.