Onglet de type Zsh pour les chemins partiels

11

Associé à la tabulation partielle de type Bash pour les noms de fichiers dans Vim

L'une des caractéristiques vraiment fantastiques de zshest que vous pouvez, par exemple ls /u/s/m/m/who.1, taper, appuyer Tabet le compléter ls /usr/share/man/man1/who.1.gz. Une fois que vous vous y êtes habitué, il est vraiment ennuyeux d'y revenir /u<tab>/s<tab>/m<tab>/m<tab>..., surtout lorsque le chemin partiel complet ne peut se résoudre qu'en un seul chemin réel, mais chaque composant individuel peut avoir plusieurs complétions. Cela peut-il être réalisé dans Vim, par exemple, en utilisant :eou :cd?

Il existe d'autres fonctionnalités utiles liées au chemin dans zsh, telles que l'utilisation cd foo barpour se déplacer vers un chemin équivalent avec fooremplacé par bar(c'est-à-dire, /blah/foo/baz/yadadevient /blah/bar/baz/yada). S'il y a une solution qui les apporte également (essentiellement en transférant des tâches liées au shell à un shell qui les fait très bien), ce serait génial.

muru
la source
1
Je ne suis au courant de rien qui réalise précisément ce que vous demandez, mais il existe divers moteurs de recherche de fichiers flous qui vous permettent d'ouvrir des fichiers de la même manière. Je préfère CtrlP, mais il y a aussi Command-T et je suis sûr qu'il y en a d'autres dont j'oublie le nom.
Rich
1
@Rich Tant que je n'ai pas à écraser Tab une douzaine de fois, je serais heureux.
muru
Il y a déjà une question similaire sur SO.
romainl

Réponses:

6

J'avais l'habitude d'utiliser CtrlP et d'autres plugins connexes beaucoup plus tôt jusqu'à ce que je découvre vraiment les pouvoirs natifs de vim. Permettez-moi d'expliquer quelques façons de le faire sans avoir besoin d'un plugin externe:

  1. :e, la bonne chose à propos de: e est que vous pouvez faire quelque chose comme :e /u*/s*/m*/m*/<Tab>et vim étendra cela automatiquement pour vous :e /usr/share/man/man. C'est beaucoup plus court et simple que ce que vous avez publié, mais une façon encore meilleure est de le faire :e /usr/**/man<Tab>, de cette façon, il apparaîtra de manière récursive sous /usret répertoriera tous les chemins correspondants, cela peut prendre du temps, mais en fonction de la taille de l'ensemble, mais dans un projeter cela fonctionne à merveille parce que vous pouvez faire quelque chose comme :e ap**/jav**/user<Tab>et cela complètera tous les chemins incomplets et vous donnera une liste de chemins correspondants et fonctionne super bien.
  2. :b, Pour ouvrir les tampons existants. C'est vraiment puissant car il accepte les partiels par défaut, vous pouvez donc faire quelque chose comme :b usr*man<Tab>et il complétera le nom du fichier s'il est déjà chargé dans la liste des tampons. C'est particulièrement bon car il est presque instantané et très rapide. J'utilise aussi beaucoup les sessions vim, avec l'aide de tpope / vim-obsession et dhruvasagar / vim-prosession , qui garde tous les fichiers que j'ouvre dans la liste des tampons et ils sont disponibles même si j'existe vim et y reviens depuis le répertoire du projet.
Dhruva Sagar
la source
1
/u*/s*/m*/m*/<Tab>est la façon dont je travaillais autour de bash. Ce n'est pas un substitut pour zsh d'un mile. /usr/**/man<Tab>est horriblement lent lorsque le système de fichiers est ouvert, mais peut être utile pour les petits projets. Sauf si je comprends mal :b, ce n'est pas pour ouvrir de nouveaux fichiers.
muru
@muru vous avez raison, ce n'est pas un substitut à zsh mais c'est toujours mieux que d'avoir à taper le tout vous-même, il s'agit de le rendre plus facile, **est horriblement lent en effet, mais fonctionne bien pour les projets réguliers. :best pour le tampon ouvert existant, c'est pourquoi l'utilisation de sessions aide.
Dhruva Sagar
5

vim-zsh-path-complétement prétend faire exactement ce que vous demandez (la première partie, au moins), mais je ne l'ai jamais essayé. (Je n'en avais même pas entendu parler avant que romainl ne soit lié à une réponse SO de son auteur , bien que sa documentation mentionne également plusieurs limites.

En plus de cela, il existe différents moteurs de recherche de fichiers flous qui réalisent quelque chose de similaire pour l'ouverture de fichiers.

Mon plugin préféré pour cela est CtrlP . Lorsqu'il est utilisé pour ouvrir des fichiers, il recherche tous les fichiers dont les chemins d'accès complets contiennent les caractères que vous saisissez dans le bon ordre - vous n'avez pas besoin de taper certaines parties de chaque composant du chemin d'accès (et tous les séparateurs de chemin d'accès) lorsque vous avoir dans votre exemple, mais cela fonctionne parfaitement bien si vous le faites. Il utilise également la même interface pour ouvrir les fichiers récemment utilisés et les tampons actuellement ouverts, et plus encore.

Par défaut, il mappe <c-p>en mode normal pour ouvrir l'invite CtrlP. L'invite affiche une liste de fichiers, qui est réduite lorsque vous tapez des caractères. Vous pouvez appuyer Enterà tout moment pour ouvrir le fichier actuellement sélectionné, ou utiliser <c-k>et <c-j>pour déplacer la sélection vers le haut ou vers le bas dans la liste des fichiers actuellement correspondants.

Une autre alternative populaire est Command-T , mais je préfère CtrlP car il est implémenté dans VimScript; Command-T a un composant Ruby.

Riches
la source