2012-04-27 14 views
15

Ho trovato la risposta a questa domanda mentre la scrivevo, quindi l'ho ampliata un po '. Volevo accedere all'argomento --servername, al fine di creare impostazioni dinamiche nel mio file .vimrc.È possibile accedere agli argomenti della riga di comando di vim in vimscript?

Tramite l'aiuto di vim, ho trovato la variabile v:servername e il mio script funziona. Tuttavia, ora sono curioso di sapere se è possibile accedere a qualsiasi argomento da riga di comando arbitrario. Ad esempio, se volessi sapere se vim era in modalità Lisp (-l) o in modalità di debug (-D), come dovrei farlo? Non sembra esserci nessuna corrispondente v: variabile per loro.

Qui ci sono le variabili che ho trovato da autocompleting :help v:<Tab> enter image description here

Esiste un modo generico per accedere argomenti della riga di comando da vimscript?

risposta

9

Stranamente, penso che la risposta potrebbe essere "No, non esiste un modo diretto per accedere alle opzioni di avvio specificate sulla riga di comando".

Il comando :args e argv() possono essere utilizzati per accedere ai nomi di file specificati all'avvio, ma non è quello che si desidera.

vedo sul forum di Vim che qualcuno offerto questa soluzione per ottenere la linea di comando di avvio su Linux:

:exe '!tr "\0" " " </proc/' . getpid() . '/cmdline' 

presumo ci sia comando analogo su Windows. . . .

È possibile guardare oltre che thread del forum qui:

http://groups.google.com/group/vim_use/browse_thread/thread/43773f27cdc10265/ad17ae8180c0fb6e?show_docid=ad17ae8180c0fb6e

+0

Grazie. La soluzione è equivalente all'altra risposta, marcatura corretta a causa della citazione. – mwcz

7

mio googling indica che questa funzione è stato proposto, ma mai attuata. Tuttavia sono venuto su con un po 'di un kludge che funziona comunque: (. Testato su OS X Lion)

:echo split(system("ps -o command= -p " . getpid())) 
# => [ 'vim', ... arguments ... ] 

La funzione getpid() ottiene PID di Vim, allora noi chiamiamo ps esternamente con opzioni per non restituire altro che il valore "comando" per il processo, quindi utilizzare split() per dividere il comando in un elenco.

+1

Grazie, mi piace l'hack. – mwcz

Problemi correlati