Seperti yang disebutkan @muru, tidak ada opsi untuk mengonfigurasi direktori untuk melengkapi path dan nama file. Itu selalu menggunakan direktori kerja dari jendela.
Saya telah menulis beberapa fungsi dan pemetaan untuk membantu ini. Di belakang layar, mereka mengubah direktori kerja lokal (menggunakan :lcd
) sementara, kemudian mengembalikan direktori kerja sebelumnya ketika selesai.
Gajah
Untuk alasan yang bahkan tidak diketahui oleh saya, saya telah memanggil Gajah plugin mikro ini .
Berikut kode (disalin dari konfigurasi Vim saya di 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>
Bagaimana cara menggunakannya
Menggunakan pemetaan ini terjadi dalam 3 langkah.
1. Aktifkan pemetaan
Dalam mode Sisipkan atau mode baris perintah, aktifkan pemetaan menggunakan <C-R><C-E>
.
2. Pilih direktori
Ketikkan satu karakter untuk memilih direktori root yang ingin Anda selesaikan. Kode di atas menyediakan dua jenis root:
f
- Direktori tempat file (buffer) saat ini berada
p
- Direktori dasar proyek Git milik file saat ini
3. Masukkan jalur atau nama file
Anda akan diminta untuk memasukkan jalur atau nama file relatif ke direktori yang ditentukan, dengan penyelesaian tersedia. Tekan Enter
saat selesai.
Beberapa catatan
- Ini tidak memberikan penyelesaian inline dalam mode Sisipkan seperti yang
<C-X><C-F>
dilakukan; sebagai gantinya, Anda akan mengetik path atau nama file pada command-line prompt (ke mana :
perintah pergi). Setelah menekan Enter
, path akan dimasukkan ke buffer.
- Hal yang sama berlaku dalam mode Command-line, yang kadang-kadang bisa membingungkan ketika Anda menekan
Enter
dan lupa bahwa Anda masih harus menekan Enter
untuk mengeluarkan perintah apa pun yang baru saja Anda ketikkan.
- Fungsi direktori lainnya dapat didaftarkan dengan menambahkannya ke
g:elephant_map
.
- Jalur yang dimasukkan akan menjadi jalur penuh dan absolut. Script dapat diubah untuk mengubah perilaku itu, tapi saya belum sempat melakukannya.
path
). Tergantung pada apa yang Anda gunakan untuk vim-rooter. Bergantung pada apa yang Anda inginkan darinya, kami dapat menggunakan plugin lain. Selain itu: Saya menggunakan youcompleteme, yang melengkapi jalur dari direktori buffer saat ini jika Anda mulai mengetik./
. Lihat reddit.com/r/vim/comments/216jdd/…