18

我在写这个问题的时候找到了答案,所以我把它扩大了一点。我想访问--servername参数,以便在我的.vimrc文件中创建动态设置。

通过 vim 的帮助,我找到了v:servername变量,并且我的脚本正在运行。但是,现在我很好奇是否可以访问任意命令行参数。例如,如果我想知道 vim 是处于 Lisp 模式 ( -l) 还是调试模式 ( -D),我该怎么做?他们似乎没有对应v:的变量。

这是我通过自动完成找到的变量:help v:<Tab> 在此处输入图像描述

是否有从 vimscript 访问命令行参数的通用方法?

4

2 回答 2

12

奇怪的是,我认为答案可能是“不,没有直接的方法可以访问命令行上指定的启动选项”。

: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

于 2012-04-27T21:36:19.897 回答
8

我的谷歌搜索表明此功能已被提出但从未实施。但是,我确实想出了一些仍然有效的方法:

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

(在 OS X Lion 上测试。)

getpid()函数获取 Vim 的 PID,然后我们ps使用选项在外部调用以返回进程的“命令”值,然后用于split()将命令拆分为列表。

于 2012-04-27T21:36:54.713 回答