Existe-t-il un moyen de configurer VIM pour rechercher de manière interactive dans chaque fichier un projet entier?
Par interactif , je veux dire mettre à jour chaque frappe.
Quelque chose comme Emacs Counsel-Git-Grep , voir: exemple de démo .
Existe-t-il un moyen de configurer VIM pour rechercher de manière interactive dans chaque fichier un projet entier?
Par interactif , je veux dire mettre à jour chaque frappe.
Quelque chose comme Emacs Counsel-Git-Grep , voir: exemple de démo .
ctrl-p
qu'un plugin similaire est ce que vous recherchez. Notez que celaunite.vim
devrait également être en mesure de le faire, mais je ne le recommanderais pas car à mon avis, c'est un plugin assez lourd et créateur de bogues.ctrl-p
- t -il un moyen de rechercher de manière interactive le contenu du fichier? Je ne l'ai utilisé que pour rechercher de manière interactive des fichiers en fonction de leurs noms.Réponses:
Je ne suis pas sûr que ce soit ce que vous recherchez, mais vous pourriez peut-être essayer fzf et fzf.vim .
Si vous utilisez vim-plug comme gestionnaire de plugins, tout ce que vous devez faire pour les installer est d'ajouter ces lignes dans votre
vimrc
:... quelque part entre les lignes:
et:
Exécutez ensuite
:PlugInstall
.Parmi les différentes commandes et mappages fournis par
fzf.vim
(dont le seul but semble être d'installer des mappages et des commandes demandantfzf
une recherche floue à travers des sources prédéfinies), il y a la commande:Ag
.Pour pouvoir l'utiliser, vous devez installer la commande shell ag . Sur les distributions basées sur Debian, cela peut être fait avec la commande suivante:
Le projet sur github explique comment l'installer sur MacOS:
:Ag
est un wrapper autour$ ag
, et vous permet de rechercher de façon floue un modèle dans les fichiers du répertoire courant (celui affiché lorsque vous tapez:pwd
). Les correspondances sont mises à jour après chaque frappe.Vous pouvez:
C-n
etC-p
Tab
/S-Tab
M-a
ouM-d
Si vous sélectionnez une ou plusieurs correspondances, après avoir appuyé sur Entrée, elles rempliront la liste des correctifs. De là, vous pourrez les parcourir avec les commandes / mappages Vim par défaut, tels que
:cnext
et:cprevious
.Si vous souhaitez ajouter un préfixe à toutes les commandes installées par
fzf.vim
et éviter de remplacer les commandes existantes, vous pouvez l'ajouter dans votrevimrc
:J'utilise
Fzf
comme préfixe, c'est pourquoi je n'ai pas tapé:Ag
mais:FzfAg
.Si vous préférez utiliser à la
git grep
place deag
, il semble que vous puissiez installer votre propre wrapper personnalisé autour de lui:GGrep
, comme ceci:C'est expliqué dans
:h fzf-vim-customization
.En outre, si
fzf
ouvre une fenêtre dans tmux, et vous préférez qu'il faut tout l'écran à la place, vous pouvez ajouter un coup à toutes les commandes (:Ag!
,:GGrep!
...).Comme vous l'avez dit dans votre dernier commentaire ,
fzf
change par défaut la configuration de votre shell. Par exemple, si vous utilisezbash
, cela ajoutera la ligne suivante dans votre~/.bashrc
:Cela source le fichier
~/.fzf.bash
. Ce dernier contient du code:Ce code ajoute un chemin d' accès à la variable d'environnement
$PATH
:/home/user/.fzf/bin
; qui est le dossier contenant lefzf
programme.Il source également 2 autres fichiers:
Le premier semble définir des fonctions d'achèvement, tandis que le second installe des raccourcis clavier.
Malheureusement, les raccourcis clavier peuvent remplacer les
readline
fonctions par défaut .Par exemple,
fzf
lie la fonctionfzf-file-widget
àC-t
. Cette clé est généralement utilisée par readline pour exécuter latranspose-chars
fonction.Si vous ne le souhaitez pas, une solution possible serait de restaurer les raccourcis clavier à l'intérieur de votre
~/.bashrc
, aprèsfzf
avoir obtenu sa configuration. Par exemple, si vous vouliezC-t
conserver son ancien comportement, c'est-à-dire transposer les 2 caractères autour du curseur, et lierfzf-file-widget
à une autre clé, disonsC-x C-t
, vous pourriez ajouter ces lignes à la fin de~/.bashrc
:La même chose s'applique au
zsh
shell, mais la syntaxe pour installer une liaison de clé est un peu différente:Si l'une des liaisons de touches du shell auxquelles vous étiez habitué a été remplacée
fzf
, vous voulez la restaurer, mais vous ne savez pas quel est le nom exact de la fonction qui a été exécutée, vous pouvez essayer la chose suivante.Tout d'abord, à l'intérieur de votre
~/.bashrc
, mettez temporairement en commentaire la ligne source de lafzf
configuration. Ensuite, rouvrez un terminal, et jetez un œil à la sortie de labind -P
commande, que vous pouvez lire dans un tampon Vim:Je ne suis pas sûr, mais je pense qu'il devrait afficher la plupart ou la totalité des
readline
raccourcis clavier. Si vous recherchez le nom de la fonction readline liée à laC-t
clé, dans le tampon Vim, vous feriez une recherche\\C-t
. Et si vous cherchiez celui lié àM-c
(touche méta / alt), vous rechercheriez\\ec
(\e
signifie la touche d'échappement et il sembleM-c
produire les mêmes codes clés queescape + c
).Vous pouvez faire la même chose en
zsh
regardant la sortie de labindkey
commande. Mais cette fois,^[
représente la touche de modification meta / alt, tandis qu'un seul caractère caret (^
) représente la touche de contrôle.Actuellement, j'ai trouvé 4 raccourcis clavier exécutant des fonctions contenant le
fzf
mot - clé dans leur nom. Ils utilisent les séquences de touchesC-i
(identiques àTab
)C-r
,,C-t
etM-c
. Ils sont liés aux fonctions suivantes:Sur mon système, à l'origine,
readline
(la bibliothèque utilisée parbash
pour modifier la ligne de commande) a lié ces clés à ces fonctions:Et
zle
(l'éditeur de ligne utilisé parzsh
), les a liés à:la source
ag
plugin / outil distinct doit-il être installé?ag
était également nécessaire. J'ai mis à jour la réponse.