vim:如果文件可读

vim:如果文件可读,vim,Vim,我使用这个函数来配置特定扩展的负载 function! LoadSnippets(extension) let file = expand("~/.vim/templates/".a:extension.".snippets.vim") if filereadable(file)

我使用这个函数来配置特定扩展的负载

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')
但是,
如果
就永远不会是真的。如果没有
,则功能正常工作

为什么
filereadable
找不到该文件

编辑 我试着用

fnamemodify(file,':p')

但是是相同的。

在自动命令中,您将字符串
'%:e'
传递给您的函数。然后,在函数的第一行,这个字符串被连接成
“~/.vim/templates/%:e.snippets.vim”

此时,
%
:e
对Vim没有任何特殊意义。它们不会通过
expand()
展开,并且生成的路径永远不会指向可读文件

'%:e'
直接传递到
expand()
将起作用,这将解决此问题:

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

在自动命令中,您将字符串
'%:e'
传递给您的函数。然后,在函数的第一行,这个字符串被连接成
“~/.vim/templates/%:e.snippets.vim”

此时,
%
:e
对Vim没有任何特殊意义。它们不会通过
expand()
展开,并且生成的路径永远不会指向可读文件

'%:e'
直接传递到
expand()
将起作用,这将解决此问题:

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

您是否尝试回显“file”以查看调用
expand
返回的内容?我猜它没有返回您期望的结果。@RandyMorris如果超出
if
,我将
执行'sp'filename
vim open filename您是否尝试回显'file'以查看调用
expand
返回的内容?我猜它没有返回您期望的结果。@RandyMorris如果超出
if
,我将
execute'sp'filename
vim open filename放在函数中,我改为
expand(~/.vim/templates/”)。展开(扩展名)。“.snippets.vim”
<代码>扩展(a:扩展)
修复函数中的问题,我改为
扩展(“~/.vim/templates/”)。展开(扩展名)。“.snippets.vim”
<代码>扩展(a:扩展)修复问题