Il vimscript file di aiuto affermano che quando si definisce una funzione:Perché posso rompere regola di denominazione user-funzione di vim utilizzando un cancelletto (#)
Il nome della funzione deve iniziare con una lettera maiuscola, a evitare la confusione di con le funzioni integrate.
Questo è applicato tranne nei seguenti casi che ho scoperto guardando il codice di altri.
"This should not work.
"But it does as long as the function is in a file called 'overrides.vim'.
function! overrides#name() abort
echo 'Test overrides\name'
endfunction
"This should not work either.
"But it does as long as the file above is in a folder called 'plugin'.
function! plugin#overrides#name() abort
echo 'Test plugin\overrides\name'
endfunction
let stupid = {}
"This should not work.
"But it does aslong as the stupid Dictionary is defined.
function! stupid.name() abort
echo 'Test stupidname'
endfunction
call overrides#name()
call plugin#overrides#name()
call stupid.name()
Ho cercato ovunque qualcosa che spiegasse questa sintassi. So che questo funziona ora. Ciò di cui sono molto curioso è che quelli di voi hanno usato questa sintassi, dove l'avete appresa?
Esistono altre funzionalità di vimscript che non sono menzionate nei file della Guida?
Poiché le funzioni incorporate non contengono il carattere '#', non vi è alcuna possibilità di confusione, quindi la regola sull'avvio dei nomi di funzione con una lettera maiuscola non si applica alle funzioni caricate automaticamente. – qqx
@qqx Questo non può essere perché posso dare un nome a 'crazy & name' o' crazy * name' e lo script fallirà con 'E128: il nome della funzione deve iniziare con una maiuscola o contenere due punti." – dkinzer
@dkinzer It dice solo che il parser usa per prima cosa un dump per determinare dove termina il nome della funzione e poi avvia il controllo.Se lo aggiustate ('Crazy & name') otterrete un errore diverso che ancora non dice' & 'non è permesso nel nome della funzione:' E124: Mancante '(': Crazy & name() '. Ci sono ulteriori informazioni:' fu abc() 'funziona, proprio come' fu :() 'e' fu a :::::::: :: b() '. Ma a differenza delle funzioni di autoload e dizionario questo non è menzionato da nessuna parte in help –
ZyX