2012-04-27 11 views
15

Encontré la respuesta a esta pregunta mientras la escribía, así que la amplié un poco. Quería acceder al argumento --servername, para crear configuraciones dinámicas en mi archivo .vimrc.¿Es posible acceder a los argumentos de línea de comandos de vim en vimscript?

A través de la ayuda de vim, encontré la variable v:servername, y mi script está funcionando. Sin embargo, ahora tengo curiosidad si es posible acceder a cualquier argumento arbitrario de línea de comandos. Por ejemplo, si quisiera saber si vim estaba en modo Lisp (-l) o modo de depuración (-D), ¿cómo lo haría? No parece haber ninguna variable correspondiente v: para ellos.

Aquí son las variables que encontré por autocompletar :help v:<Tab> enter image description here

¿Hay una manera general, a acceder a los argumentos de línea de comandos de Vimscript?

Respuesta

9

Extrañamente, creo que la respuesta puede ser "No, no hay una forma directa de acceder a las opciones de inicio especificadas en la línea de comandos".

El comando :args y argv() se pueden usar para acceder al nombre de archivo especificado al inicio, pero eso no es lo que desea.

veo en los foros de Vim que otro ha ofrecido esta solución para obtener la línea de comandos de inicio en Linux:

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

que asumir que hay comandos análoga en Windows. . . .

Usted puede mirar por encima de que el tema del foro aquí:

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

+0

Gracias. La solución es equivalente a la otra respuesta, marcando correcta debido a la cita. – mwcz

7

Mi googlear indica que esta función se ha propuesto, pero nunca puestos en práctica. Sin embargo, yo he venido para arriba con un poco de una chapuza que sin embargo funciona: (. Probado en OS X Lion)

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

La función getpid() consigue PID de Vim, entonces nos llaman ps externamente con opciones a devuelva nada más que el valor de "comando" para el proceso, luego use split() para dividir el comando en una lista.

+1

Gracias, me gusta el truco. – mwcz

Cuestiones relacionadas