'path'
Opsi Vim memungkinkan Anda untuk menentukan direktori mana perintah suka gf
dan :find
akan mencari file.
Jika Anda hanya ingin fungsi ini memicu set file tertentu, maka Anda dapat menggunakan autocmd untuk secara otomatis "mengarahkan" :edit
perintah 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 BufNewFile
autocmd 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 nested
kualifikasi diperlukan di sini karena autocmds biasanya tidak sarang. Dalam hal ini, Anda ingin memicu autocmds khas ketika :edit
perintah membuka file Anda.
Perhatikan bahwa ini masih akan membuat buffer tambahan dibandingkan dengan hanya mengedit file secara manual. Pada saat BufNewFile
dijalankan, buffer untuk nama file yang ditentukan sebelumnya sudah dibuat. Menggunakan :file
untuk 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 :find
untuk 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 :file
buffer -named.
keepalt file
memiliki kelemahan yang sama dengan penugasan kevim.current.buffer.name
- vim memperingatkan Anda bahwa file tersebut sudah ada saat mencoba menyimpan perubahan Anda.