2012-11-25 8 views
8

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?

+0

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

+0

@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

+1

@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

risposta

9

Questa sintassi di denominazione è per la funzione autoload. Digitare :help autoload-functions per aiuto.

+0

wow, per la vita di me non riuscivo a trovarlo. Grazie! – dkinzer

+0

Graat e: help Le funzioni del dizionario hanno risposto alla seconda parte della mia domanda. È tutto lì dentro, dopo tutto. – dkinzer

Problemi correlati