Comme @muru l'a mentionné, il n'y a pas d'options pour configurer le répertoire à partir duquel le chemin et les noms de fichiers doivent être complétés. Il utilise toujours le répertoire de travail de la fenêtre.
J'ai écrit quelques fonctions et mappages pour vous aider. Dans les coulisses, ils changent :lcd
temporairement le répertoire de travail local (à l'aide de ), puis restaurent le répertoire de travail précédent une fois terminé.
l'éléphant
Pour des raisons que je ne connais même pas, j'ai appelé ce micro-plugin Elephant .
Voici le code (copié de ma configuration Vim sur GitHub ):
let g:elephant_map = {
\ 'f': function('elephant#current_file'),
\ 'p': function('elephant#vcs_project')
\ }
function! elephant#prompt(base)
let l:Fcn = get(g:elephant_map, a:base, function('elephant#identity'))
let l:basedir = l:Fcn()
execute 'lcd' l:basedir
let l:file = fnamemodify(input(l:basedir.'/', '', 'file'), ':p')
lcd -
return fnamemodify(l:file, ':.')
endfunction
function! s:elephant_init()
let l:base = getchar()
return elephant#prompt(nr2char(l:base))
endfunction
function! elephant#identity()
return '.'
endfunction
function! elephant#vcs_project()
return fnamemodify(finddir('.git', '.;'), ':h')
endfunction
function! elephant#current_file()
return expand('%:h')
endfunction
inoremap <silent> <expr> <C-R><C-E> <SID>elephant_init()
cnoremap <silent> <C-R><C-E> <C-R>=<SID>elephant_init()<CR>
Comment l'utiliser
L'utilisation de ces mappages se déroule en 3 étapes.
1. Appelez le mappage
En mode Insertion ou en ligne de commande, appelez le mappage à l'aide de <C-R><C-E>
.
2. Choisissez un répertoire
Tapez un seul caractère pour choisir le répertoire racine à partir duquel vous souhaitez terminer. Le code ci-dessus fournit deux types de racines:
f
- Le répertoire dans lequel se trouve le fichier actuel (tampon)
p
- Le répertoire de base du projet Git auquel appartient le fichier actuel
3. Entrez le chemin ou le nom du fichier
Vous serez invité à entrer le chemin d'accès ou le nom de fichier relatif au répertoire spécifié, l'achèvement étant disponible. Appuyez sur Enter
lorsque vous avez terminé.
Quelques notes
- Cela ne fournit pas la complétion en ligne en mode Insertion comme le
<C-X><C-F>
fait; au lieu de cela, vous taperez le chemin d'accès ou le nom de fichier sur l'invite de ligne de :
commande (où les commandes vont). En appuyant sur Enter
, le chemin sera inséré dans le tampon.
- La même chose est vraie en mode ligne de commande, ce qui peut parfois être déroutant lorsque vous appuyez
Enter
et oubliez que vous devez toujours appuyer Enter
pour émettre la commande que vous venez de taper.
- D'autres fonctions de répertoire peuvent être enregistrées en les ajoutant à
g:elephant_map
.
- Le chemin inséré sera le chemin absolu complet. Le script peut être modifié pour changer ce comportement, mais je n'y suis pas parvenu.
path
plus). Cela dépend de votre utilisation prévue pour vim-rooter. Selon ce que vous en attendez, nous pourrions utiliser d'autres plugins. En plus: j'utilise youcompleteme, qui complète les chemins du répertoire du tampon courant si vous commencez à taper./
. Voir reddit.com/r/vim/comments/216jdd/…