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
:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
... quelque part entre les lignes:
call plug#begin('~/.vim/plugged')
et:
call plug#end()
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 demandant fzf
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:
apt-get install silversearcher-ag
Le projet sur github explique comment l'installer sur MacOS:
brew install the_silver_searcher
: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:
- avancer et reculer dans les matchs avec
C-n
etC-p
- sélectionner la correspondance actuelle et passer à la suivante / précédente avec
Tab
/S-Tab
- sélectionner ou désélectionner toutes les correspondances avec
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 votre vimrc
:
let g:fzf_command_prefix = 'your_prefix'
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 de ag
, il semble que vous puissiez installer votre propre wrapper personnalisé autour de lui :GGrep
, comme ceci:
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
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 utilisez bash
, cela ajoutera la ligne suivante dans votre ~/.bashrc
:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
Cela source le fichier ~/.fzf.bash
. Ce dernier contient du code:
# Setup fzf
# ---------
if [[ ! "$PATH" == */home/user/.fzf/bin* ]]; then
export PATH="$PATH:/home/user/.fzf/bin"
fi
# Auto-completion
# ---------------
[[ $- == *i* ]] && source "/home/user/.fzf/shell/completion.bash" 2> /dev/null
# Key bindings
# ------------
source "/home/user/.fzf/shell/key-bindings.bash"
Ce code ajoute un chemin d' accès à la variable d'environnement $PATH
: /home/user/.fzf/bin
; qui est le dossier contenant le fzf
programme.
Il source également 2 autres fichiers:
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
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 fonction fzf-file-widget
à C-t
. Cette clé est généralement utilisée par readline pour exécuter la transpose-chars
fonction.
Si vous ne le souhaitez pas, une solution possible serait de restaurer les raccourcis clavier à l'intérieur de votre ~/.bashrc
, après fzf
avoir obtenu sa configuration. Par exemple, si vous vouliez C-t
conserver son ancien comportement, c'est-à-dire transposer les 2 caractères autour du curseur, et lier fzf-file-widget
à une autre clé, disons C-x C-t
, vous pourriez ajouter ces lignes à la fin de ~/.bashrc
:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
La même chose s'applique au zsh
shell, mais la syntaxe pour installer une liaison de clé est un peu différente:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
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 la fzf
configuration. Ensuite, rouvrez un terminal, et jetez un œil à la sortie de la bind -P
commande, que vous pouvez lire dans un tampon Vim:
bind -P | vim -R -
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 à la C-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 semble M-c
produire les mêmes codes clés que escape + c
).
Vous pouvez faire la même chose en zsh
regardant la sortie de la bindkey
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 touches C-i
(identiques à Tab
) C-r
,, C-t
et M-c
. Ils sont liés aux fonctions suivantes:
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
Sur mon système, à l'origine, readline
(la bibliothèque utilisée par bash
pour modifier la ligne de commande) a lié ces clés à ces fonctions:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
Et zle
(l'éditeur de ligne utilisé par zsh
), les a liés à:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
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.