Можно ли получить доступ к аргументам командной строки vim в vimscript?

Я нашел ответ на этот вопрос, написав его, поэтому немного расширил его. Я хотел получить доступ к аргументу --servername, чтобы создать динамические настройки в моем файле .vimrc.

С помощью vim help я нашел переменную v:servername, и мой script работает. Однако теперь мне любопытно, можно ли получить доступ к любому произвольному аргументу командной строки. Например, если бы я хотел знать, был ли vim в режиме Lisp (-l) или режиме отладки (-D), как бы я это сделал? Кажется, что для них нет соответствующей переменной v:.

Вот переменные, найденные автозаполнением :help v:<Tab> enter image description here

Есть ли общий способ доступа к аргументам командной строки из vimscript?

Ответы

Ответ 1

Странно, я думаю, что ответ может быть "Нет, нет прямого способа доступа к параметрам запуска, указанным в командной строке".

Команда :args и argv() могут использоваться для доступа к именам файлов, указанным при запуске, но это не то, что вы хотите.

Я вижу на форумах Vim, что кто-то предложил это решение, чтобы получить командную строку запуска в Linux:

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

Я предполагаю наличие аналогичной команды в Windows.,.

Вы можете посмотреть эту тему форума:

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

Ответ 2

Мой googling указывает, что эта функция была предложена, но никогда не реализована. Однако я придумал немного клочья, который тем не менее работает:

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

(Протестировано на OS X Lion.)

Функция getpid() получает VID PID, затем мы вызываем ps извне с параметрами, чтобы возвращать ничего, кроме значения "command" для процесса, затем используйте split() для разделения команды на список.