Come menzionato @muru, non ci sono opzioni per configurare la directory da cui completare il percorso e i nomi dei file. Utilizza sempre la directory di lavoro della finestra.
Ho scritto un paio di funzioni e mappature per aiutare con questo. Dietro le quinte, cambiano :lcd
temporaneamente la directory di lavoro locale (usando ), quindi ripristinano la directory di lavoro precedente.
Elefante
Per ragioni sconosciute anche a me, ho chiamato questo micro-plug-in Elephant .
Ecco il codice (copiato dalla mia configurazione di Vim su 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>
Come usarlo
L'uso di questi mapping avviene in 3 passaggi.
1. Richiamare la mappatura
Nella modalità Inserisci o nella riga di comando, invocare la mappatura usando <C-R><C-E>
.
2. Scegli una directory
Digitare un singolo carattere per scegliere da quale directory root si desidera completare. Il codice sopra fornisce due tipi di root:
f
- La directory in cui risiede il file corrente (buffer)
p
- La directory di base del progetto Git a cui appartiene il file corrente
3. Immettere il percorso o il nome del file
Ti verrà richiesto di inserire il percorso o il nome del file relativo alla directory specificata, con completamento disponibile. Premere Enter
al termine.
Alcune note
- Questo non fornisce il completamento in linea in modalità Inserisci come
<C-X><C-F>
fa; invece, dovrai digitare il percorso o il nome del file sul prompt della riga di comando (dove :
vanno i comandi). Dopo aver premuto Enter
, il percorso verrà inserito nel buffer.
- Lo stesso vale nella modalità riga di comando, che a volte può essere fonte di confusione quando si preme
Enter
e si dimentica che è ancora necessario premere Enter
per emettere qualsiasi comando che stavi solo digitando.
- Altre funzioni di directory possono essere registrate aggiungendole in
g:elephant_map
.
- Il percorso inserito sarà il percorso completo e assoluto. La sceneggiatura può essere modificata per cambiare quel comportamento, ma non ci sono riuscito.
path
neanche). Dipende dall'uso previsto per vim-rooter. A seconda di cosa vuoi da esso, potremmo usare altri plugin. A parte: uso youcompleteme, che completa i percorsi dalla directory del buffer corrente se si inizia a digitare./
. Vedi reddit.com/r/vim/comments/216jdd/…