vim: als filerreerbaar

Ik gebruik deze functies voor laadconfiguratie voor een specifieke extensie

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')

maar de if is nooit True. Zonder de if werkt de functie goed.

waarom het bestandsnaam het bestand niet kan vinden?

BEWERK

Ik probeer het met

fnamemodify(file,':p')

maar is hetzelfde.

1
@RandyMorris indien uit if , zet ik execute 'sp' bestandsnaam vim open bestandsnaam
toegevoegd de auteur JuanPablo, de bron
Heb je geprobeerd 'bestand' na te spelen om te zien wat er wordt geretourneerd door de aanroep naar uitvouwen ? Mijn gok is dat het niet teruggeeft wat je verwacht.
toegevoegd de auteur Randy Morris, de bron

1 antwoord

In de autocommand geeft u de tekenreeks '%: e' door aan uw functie. Vervolgens wordt in de eerste regel van uw functie deze tekenreeks samengevoegd tot "~/.vim/templates /%: e.snippets.vim" .

Op dit punt hebben % en : e geen speciale betekenis voor Vim. Ze worden niet uitgebreid met expand() en het resulterende pad zal nooit naar een leesbaar bestand verwijzen.

Het direct doorgeven van '%: e' aan expand() werkt echter wel, en dit zou het probleem oplossen:

autocmd BufRead,BufNewFile * silent! call LoadSnippets(expand('%:e'))
1
toegevoegd
In de functie verander ik in expand ("~/.vim/templates /"). expand (a: extension). ". snippets.vim" . uitvouwen (a: extensie) verhelpt het probleem
toegevoegd de auteur JuanPablo, de bron