Можно ли получить доступ к аргументам командной строки 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()
для разделения команды на список.