1

この関数を特定の拡張機能のロード構成に使用します

function! LoadSnippets(extension)                                                        
    let file = expand("~/.vim/templates/".a:extension.".snippets.vim")                   
    if filereadable(file)                                                                
        silent! execute 'source '.file                                                   
    endif                                                                                
endfunction  

autocmd BufRead,BufNewFile * silent! call LoadSnippets('%:e')

しかし、if決して真実ではありません。がなくてもif、関数は正常に機能します。

なぜfilereadableファイルが見つからないのですか?

編集

でやってみます

fnamemodify(file,':p')

しかし、同じです。

4

1 に答える 1

1

自動コマンドでは、文字列 を関数に渡し'%:e'ます。次に、関数の最初の行で、この文字列が連結されて。を形成し"~/.vim/templates/%:e.snippets.vim"ます。

この時点では、Vimにとって特別な意味は%あり:eません。それらはによって展開されexpand()ず、結果のパスが読み取り可能なファイルを指すことはありません。

'%:e'ただし、に直接渡すことexpand()は機能し、これで修正されます。

autocmd BufRead,BufNewFile * silent! call LoadSnippets(expand('%:e'))
于 2012-06-26T19:50:35.177 に答える