Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取Vim中所有环境变量的列表?_Vim_Environment Variables - Fatal编程技术网

如何获取Vim中所有环境变量的列表?

如何获取Vim中所有环境变量的列表?,vim,environment-variables,Vim,Environment Variables,启动Vim时,它从操作系统中获取许多环境变量(如PATH),并设置自己的环境变量(如MYVIMRC) 如何列出或查看Vim了解的所有环境变量,以及Vim内部的相应值?要列出所有环境变量,请使用 :echo $<C-D> :echo$ 然后,您可以开始键入感兴趣的变量的名称,使用Tab自动完成,最后按Enter键显示其值 您没有说明是以交互方式还是在脚本中需要它。对于后者,不幸的是不可能通过Vimscript中的redir捕获输出,因为没有直接的方法来获取 当前定义的环境变量。然而

启动Vim时,它从操作系统中获取许多环境变量(如
PATH
),并设置自己的环境变量(如
MYVIMRC


如何列出或查看Vim了解的所有环境变量,以及Vim内部的相应值?

要列出所有环境变量,请使用

:echo $<C-D>
:echo$
然后,您可以开始键入感兴趣的变量的名称,使用Tab自动完成,最后按Enter键显示其值


您没有说明是以交互方式还是在脚本中需要它。对于后者,不幸的是不可能通过Vimscript中的redir
捕获输出,因为没有直接的方法来获取
当前定义的环境变量。然而,这是可能的
要利用Vim命令行完成功能,请创建一个

考虑以下未完成命令的可能完成:

:echo $
不难看出,根据Vimscript语法, 完成项必须是环境变量的名称。 按
wildchar
键(默认为Tab)或 Ctrl+D组合键将显示所有选项

为了从脚本中获取此完成列表,我们需要 克服其互动性。我提议的一个可能的伎俩 本文依赖于特征的组合。第一个是 Ctrl+A命令。在命令行模式下,此 快捷方式会触发在前面插入每个可用的完成项 光标。插入的完成项按字母顺序列出 用空间隔开

如果我们能让Vim把这些完成的内容直接打印到 命令行,我们可以通过重定向命令轻松捕获它们 使用
:redir
命令输出。但我们需要做的就是实现这一目标 副作用是引用使用Ctrl+A插入的文本: 引用使
:echo
命令的其余部分成为 可以直接打印出来

:echo 'NAME1 NAME2 NAME3'
NAME1 NAME2 NAME3
要以这种方式编辑命令行,用户可以键入
:ec
(一个
:echo
)的别名,后跟
$
,按 Ctrl+A,键入
,跳转到 行通过按Ctrl+B,将光标移动到 按一下按钮,美元就会升值⇾ (右箭头键)两次, 删除
$
,最后插入
。相同的序列 可以使用
:正常的
命令

将所有这些部分放在一起,我们得到以下函数:

function! Env()
    redir => s
    sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
    redir END
    return split(s)
endfunction
函数!环境()
redir=>s
西尔!exe“norm!:ec$\'\\'\\'\'
重拨端
返回拆分(s)
端功能
为了使这种方法起作用,必须使用
+cmdline\u compl
功能。

查看其他Anwer,无需脚本即可完成

进入插入模式,然后按

<C-R>=

这应该将每个环境变量放在不同的行上。

根据ib的想法和ZyX的评论,我最终使用了以下函数:

function! GetEnvVars()
    silent execute "normal! :return $\<C-a>')\<C-b>\<C-right>\<Right>\<Del>split('\<CR>"
endfunction
函数!GetEnvVars()
静默执行“正常:返回$\”)\\\\split('\'
端功能

前面的答案已被vimscriptenviron()函数废弃

例如,要按顺序列出它们,请执行以下操作:

:let evars = environ()
:for var in evars->keys()->sort()
:    echo var . '=' . evars[var]
:endfor

可能会有帮助,所以您正在查找vim继承的环境变量的完整列表,或者您正在查找vim自己(自己)创建的所有环境变量?据我所知,仅通过Vim是不可能做到这一点的。但是,在类似Unix的系统中,可以只使用
:!env
。Tarek Fadel:正如我的问题中所指出的,我对两者都感兴趣。Vim也将两者都称为环境变量。Ingo Karkat:谢谢。交互式对我来说很好。可以捕获命令行的完整性n使用
:redir
。不过,这需要一个非常简单的技巧。如果有兴趣,请查看我的。最好将
echo
更改为
return
:这对我很有效:
执行“fu!Test()\nexe'silent normal!:return$\'\\\\\\\split('.\'.\\\\n\\'\nendfu'
function! GetEnvVars()
    silent execute "normal! :return $\<C-a>')\<C-b>\<C-right>\<Right>\<Del>split('\<CR>"
endfunction
:let evars = environ()
:for var in evars->keys()->sort()
:    echo var . '=' . evars[var]
:endfor