如何在Vim中列出所有环境变量?

Ash*_*ppa 13 vim environment-variables

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

如何从Vim内部列出或查看Vim理解的所有环境变量及其各自的值?

ib.*_*ib. 19

在Vim脚本中,没有设计方法来获取当前定义的环境变量列表.但是,可以利用Vim命令行完成功能.

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

:echo $
Run Code Online (Sandbox Code Playgroud)

根据Vim脚本语法,不难看出所有的完成都是环境变量的名称.按下wildchar键(Tab默认情况下)或Ctrl+ D将显示所有的人.

为了从脚本中获取此完成列表,我们需要克服其交互性.我们在这里考虑的一个可能的技巧,依赖于功能的组合.首先是 Ctrl+ A命令.在命令行模式下,此快捷方式会触发在光标前插入每个可用的完成.这些完成按字母顺序列出,并用空格分隔.

如果我们让Vim打印出那些插入到命令行的完成,我们可以通过使用:redir 命令重定向命令输出来轻松捕获它们.但是我们需要实现的副作用是引用插入的文本Ctrl+ A:引用使我们:echo命令的其余部分成为 一个字符串文字,它将被打印出来!

:echo 'NAME1 NAME2 NAME3'
NAME1 NAME2 NAME3
Run Code Online (Sandbox Code Playgroud)

要以这种方式编辑命令行,用户可以键入:ec(别名:echo),然后$Ctrl+ A,键入',用Ctrl+ 跳转到命令的开头,B两次右箭头键将光标移到美元符号上,删除$ 并插入'.可以使用该:normal命令以非交互方式再现相同的按键序列.

将所有这些拼图拼凑在一起,我们获得以下功能.

function! Env()
    redir => s
    sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
    redir END
    return split(s)
endfunction
Run Code Online (Sandbox Code Playgroud)

要使这种方法起作用,应该使用该+cmdline_compl 功能编译Vim .


Ing*_*kat 15

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

:echo $<C-D>
Run Code Online (Sandbox Code Playgroud)

然后,您可以开始键入感兴趣的变量的名称,自动完成Tab,最后按下Enter以显示其值.

您没有以交互方式或脚本告诉您是否需要此功能.对于后者,遗憾的是无法捕获输出:redir.


小智 5

先前的答案已被 vimscript环境()函数淘汰。

例如,要按顺序列出它们:

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