@Muru'nun belirttiği gibi, yol ve dosya adlarının tamamlanacağı dizini yapılandırmak için seçenek yoktur. Her zaman pencerenin çalışma dizinini kullanır.
Bu konuda yardımcı olacak birkaç fonksiyon ve harita yazdım. Perde arkasında, yerel çalışma dizinini (kullanarak :lcd
) geçici olarak değiştirir, ardından tamamlandığında önceki çalışma dizinini geri yüklerler.
Fil
Benim bile bilmediğim nedenlerden dolayı, bu mikro eklenti Fil adını verdim .
İşte kod ( GitHub'daki Vim yapılandırmamdan kopyalandı ):
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>
Bu nasıl kullanılır
Bu eşlemelerin kullanılması 3 adımda gerçekleşir.
1. Eşlemeyi çağırın
Ekle modunda veya Komut satırı modunda, kullanarak eşlemeyi başlatın <C-R><C-E>
.
2. Bir dizin seçin
Hangi kök dizinin tamamlanmasını istediğinizi seçmek için tek bir karakter yazın. Yukarıdaki kod iki tür kök sağlar:
f
- Geçerli dosyanın (arabellek) bulunduğu dizin
p
- Geçerli dosyanın ait olduğu Git projesinin temel dizini
3. Yolu veya dosya adını girin
Tamamlama kullanılabilir durumdayken, belirtilen dizine göre yolu veya dosya adını girmeniz istenir. İşlemi Enter
tamamladığınızda düğmesine basın .
Bazı notlar
- Bu, Ekle modunda satır içi tamamlamayı
<C-X><C-F>
sağlamaz; bunun yerine, Komut satırı istemine yolu veya dosya adını yazacaksınız ( :
komutların nereye gittiği). Düğmesine basıldığında Enter
, yol arabelleğe eklenir.
- Aynı şey Komut Satırı modunda da geçerlidir; bu, bazen yazdığınız komutları vermek
Enter
için yine de vurmanız ve unutmanız gerektiğinde kafa karıştırıcı olabilir Enter
.
- Diğer dizin işlevleri bunlara eklenerek kaydedilebilir
g:elephant_map
.
- Eklenen yol tam, mutlak yol olacaktır. Senaryo bu davranışı değiştirmek için düzeltilebilir, ama bu konuda bir şey yok.
path
ya da). Vim-rooter için kullanım amacınıza bağlıdır. Ondan ne istediğinize bağlı olarak, diğer eklentileri kullanabiliriz. Kenara: Yazmaya başlarsanız geçerli arabellek dizininden yolları tamamlayan youcompleteme kullanıyorum./
. Bkz reddit.com/r/vim/comments/216jdd/...