Après avoir fait un peu plus lecture J'ai trouvé en fait un moyen d'intégrer les fzf-marks dans vim, (qui fonctionnent aussi très bien sans fzf-marks).
Tout ce dont vous avez besoin, c'est d'un fichier listant les répertoires marqués d'un signet, avec une variable pointant vers lui, par ex. FZF_MARKS_FILE="${HOME}/.fzf-marks
Ce fichier est formaté comme suit, cat $FZF_MARKS_FILE
:
project1 : /home/user/project1/code
project2 : /home/user/project2/code
vimswapdir : /home/user/.local/share/nvim/swap
rlibsloc : /home/user/R/x86_64-pc-linux-gnu-library
trash : /home/user/.local/share/Trash/files
vim-plugins : /home/user/.config/nvim/plugged
L'idée est maintenant de le charger et de l'analyser de manière similaire à ce qui est fait dans fzf-marks. fonction de saut et le rendre interrogeable de manière floue pour un accès rapide définissant une fonction FM
:
command! -bang FM call fzf#run(fzf#wrap({'source': 'cat ~/.fzf-marks | sed "s/.*: \(.*\)$/\1/" | sed "s#~#${HOME}#"', 'sink': 'lcd'}, <bang>0))
Appel à :FM
fait maintenant apparaître une fenêtre fzf avec les répertoires marqués d'un signet à sélectionner.
Cas d'utilisation (que je retrouve souvent) :
Disons que j'ai commencé à éditer un fichier quelque part (disons dans ~/myproject
), mais il fallait chercher ( :grep
) pour une phrase contenant le mot foo
qui, je le sais, est dans un fichier dans /home/user/project1/code
. Je ne me souviens jamais du chemin du projet 1, juste qu'il a code
sur son chemin. C'est pour cette raison que je l'ai mis dans mes favoris (voir ci-dessus).
Auparavant, il fallait rechercher le chemin d'accès et le saisir dans vim, c'est-à-dire taper :grep foo /home/user/project1/code
. Maintenant, cela fonctionne plus rapidement comme suit :
:FM
dans vim, en faisant apparaître la liste des répertoires marqués d'un signet, en tapant des morceaux de code
par exemple co
limite rapidement la recherche :
en sélectionnant la première ligne, le répertoire courant est fixé à project1
(ce qui peut être confirmé par :pwd
) mais en laissant le fichier édité tel quel. Maintenant, :grep! foo
recherche en effet récursivement dans le projet1.
Après avoir terminé la recherche, je peux réinitialiser le répertoire de travail au répertoire des fichiers actuels. :cd %:h
ou c'est Root avec Racine : :Rooter
.