'path'Opsi Vim memungkinkan Anda untuk menentukan direktori mana perintah suka gfdan :findakan mencari file.
Jika Anda hanya ingin fungsi ini memicu set file tertentu, maka Anda dapat menggunakan autocmd untuk secara otomatis "mengarahkan" :editperintah Anda ke file di salah satu 'path'direktori.
set path+=~/
function! FindInPath(name)
let found = findfile(a:name)
if !empty(found)
exe 'silent keepalt file '. fnameescape(found)
edit
endif
endfunction
autocmd BufNewFile .vimrc,.zshrc nested call FindInPath(expand('<afile>'))
Ini menggunakan BufNewFileautocmd sebagai pemicu untuk file not found, so try to find it somewhere else. Ketika situasi itu terdeteksi, gunakan findfile()untuk mencoba menemukan file di 'path'direktori. Jika ditemukan, ubah nama buffer saat ini ke file itu dan edit kembali buffer, jika tidak terus menggunakan buffer baru.
The nestedkualifikasi diperlukan di sini karena autocmds biasanya tidak sarang. Dalam hal ini, Anda ingin memicu autocmds khas ketika :editperintah membuka file Anda.
Perhatikan bahwa ini masih akan membuat buffer tambahan dibandingkan dengan hanya mengedit file secara manual. Pada saat BufNewFiledijalankan, buffer untuk nama file yang ditentukan sebelumnya sudah dibuat. Menggunakan :fileuntuk mengubah nama buffer menciptakan buffer baru yang dibongkar dengan nama asli.
Jika Anda selalu ingin mencari 'path', maka autocmd dapat dengan mudah diubah untuk menggunakan *pola file daripada menentukan file tertentu.
Ini versi terbaru yang lebih sesuai dengan kebutuhan Anda. Ini digunakan :finduntuk langsung membuka file daripada menetapkan nama buffer berdasarkan hasil findfile().
function! FindInPath(name)
let path=&path
" Add any extra directories to the normal search path
set path+=~,~/.vim,/etc
" If :find finds a file, then wipeout the buffer that was created for the "new" file
setlocal bufhidden=wipe
exe 'silent! keepalt find '. fnameescape(a:name)
" Restore 'path' and 'bufhidden' to their normal values
let &path=path
set bufhidden<
endfunction
autocmd BufNewFile * nested call FindInPath(expand('<afile>'))
Ini menyelesaikan masalah pada fungsi sebelumnya di mana Vim akan mengeluh ketika mencoba untuk menyimpan :filebuffer -named.
keepalt filememiliki kelemahan yang sama dengan penugasan kevim.current.buffer.name- vim memperingatkan Anda bahwa file tersebut sudah ada saat mencoba menyimpan perubahan Anda.