Voglio scrivere un comando, il comando avrebbe questo formato:Come passare argomenti da: comando a funzione?
[range]MyCMD[!] [count] [oneArg] [flags]
o
[range]MyCMD[!] [oneArg] [count] [flags]
simile a
:[range]P[rint] [count] [flags]
o
:[range]d[elete] [x] {count}
Il comando MyCMD
alla fine chiamerà una funzione per fare un po 'di lavoro. Ho scritto questa linea (non funzionerà)
command! -nargs=+ -range -bang -count=0 MyCMD <line1>,<line2>call MyFUNC(<q-args>, "<bang>","<count>", .... ..)
Qui il problema è, come gestire tali argomenti:
problema 1 ho letto l'aiuto,
-range
e-count
non può essere usato allo stesso tempo, ma ho bisogno di entrambi. Ho anche dato un'occhiata ad alcuni comandi di vim, come: delete,: print, quando usiamo quei comandi, potremmo dare siarange
ecount
. Inoltre ho trovato che vim doc ha due voci dello stesso comando se è disponibile un{count}
o[count]
. come::[range]d[elete] [x] :[range]d[elete] [x] {count}
o
:[range]p[rint] [flags]
:[range]p[rint] {count} [flags]
perché? perché non solo con [count]
? (Questo sarebbe un'altra piccola domanda)
problema 2 dal mio disegno, tutti questi argomenti sono opzionali, hanno valori di default (vedere la tabella qui sotto). Come posso passare quegli argomenti a funzionare (ho controllato
<q-args> and <f-args>
) e come posso distinguere quali input utente sono per quale argomento? per esempio utente dà:MyCMD 5 g
5 is count? or arg? g is arg or flag? or '5 g' is arg?
ecco i valori predefiniti per args:
argName | Default value | description
-------------------------------------
range | current line | this could be get by function xxx () range
count | 0 | this could be get by <count>
bang | "" | this is easy too, with <bang>
arg | " " | this argument could have space
flags | "" | no space allowed for flags
-------------------------------------
grazie.
thx Ingo !. Sì, vorrei analizzare gli argomenti nella mia funzione, ma non conosco la strada giusta. ci sono 3 argomenti da analizzare. conteggio, arg e bandiere. tutti sono opzionali. forse dovrei definire un formato, ad es. per "arg", il valore deve essere racchiuso tra virgolette, poiché gli spazi sono consentiti ... potrebbe essere un po 'più semplice, quindi controllare il numero o la stringa di flag .. o rompere un comando in più comandi, questa sarebbe l'ultima scelta Farei. altri suggerimenti? – Kent
e conosci la ragione di questa "altra piccola domanda" nel mio post? Ho cercato la risposta per il mio problema ieri, e l'ho notato. grazie. – Kent
Se i tuoi argomenti sono troppo ambigui per essere analizzati, ripenserò la sintassi; forse imporre più uniformità o dare ulteriori suggerimenti di che tipo è con sigilli. –