Jak wspomniano @muru, nie ma opcji konfiguracji katalogu, z którego należy uzupełnić ścieżki i nazwy plików. Zawsze korzysta z katalogu roboczego okna.
Napisałem kilka funkcji i mapowań, aby w tym pomóc. Za kulisami :lcdtymczasowo zmieniają lokalny katalog roboczy (za pomocą ), a po zakończeniu przywracają poprzedni katalog roboczy.
Słoń
Z nieznanych mi powodów, nazwałem ten mikro-plugin Elephant .
Oto kod (skopiowany z mojej konfiguracji Vima na 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>
Jak tego użyć
Korzystanie z tych mapowań odbywa się w 3 krokach.
1. Wywołaj mapowanie
W trybie wstawiania lub w trybie wiersza poleceń uruchom mapowanie za pomocą <C-R><C-E>.
2. Wybierz katalog
Wpisz pojedynczy znak, aby wybrać katalog główny, z którego chcesz uzupełnić. Powyższy kod zapewnia dwa rodzaje korzeni:
f - Katalog, w którym znajduje się bieżący plik (bufor)
p - Katalog podstawowy projektu Git, do którego należy bieżący plik
3. Wprowadź ścieżkę lub nazwę pliku
Zostaniesz poproszony o podanie ścieżki lub nazwy pliku względem określonego katalogu, z możliwością uzupełnienia. Naciśnij Enterpo zakończeniu.
Kilka notatek
- Nie zapewnia to wbudowanego uzupełniania w trybie wstawiania, jak to
<C-X><C-F>robi; zamiast tego będziesz wpisywać ścieżkę lub nazwę pliku w wierszu polecenia (tam, gdzie :idą polecenia). Po naciśnięciu Enterścieżka zostanie wstawiona do bufora.
- To samo dotyczy trybu wiersza poleceń, który czasami może być mylący, gdy naciskasz
Enteri zapominasz, że wciąż musisz nacisnąć, Enteraby wydać dowolne polecenie, które właśnie wpisałeś.
- Inne funkcje katalogu można zarejestrować, dodając je do
g:elephant_map.
- Wstawiona ścieżka będzie pełną ścieżką bezwzględną. Skrypt można zmodyfikować, aby zmienić to zachowanie, ale nie miałem o tym pojęcia.
pathrównież). Zależy to od zamierzonego zastosowania vim-rootera. W zależności od tego, czego od niego chcesz, możemy użyć innych wtyczek. Poza tym: używam youcompleteme, który uzupełnia ścieżki z katalogu bieżącego bufora, jeśli zaczniesz pisać./. Zobacz reddit.com/r/vim/comments/216jdd/...