linux - 变量在 vim 中打印正常,但在 bash shell 中却不行,这是怎么发生的?

标签 linux bash vim

所以我在关注一些关于 Vim 默认值的资源,我发现 $VIMRUNTIME/defaults.vim 中有一个默认文件,所以我尝试打印 $VIMRUNTIME变量

  1. 我在 Vim 命令中尝试使用 !,我使用了 !echo $VIMRUNTIME 并且它打印了一个路径
  2. 我在普通终端中尝试使用 echo $VIMRUNTIME 但它打印了一个空行

我以为 ! 只是调用终端中的命令,但输出有所不同。

这是怎么发生的?我是 Linux 新手,所以也许我遗漏了一些东西。

我唯一的猜测是这个变量是在 VIM 运行时设置的,但后来我尝试在 VIM 运行时在终端中执行该命令,但终端中仍然有一个空行。

最佳答案

您缺少环境的概念。顾名思义,环境变量驻留在环境中。它们可以从 parent 遗传给 child ,但反之则不然。 您可能在您最喜欢的编程语言中熟悉此类概念。

在您的具体示例中,Vim 创建 VIMRUNTIME (根据 :help VIMRUNTIME)并将其继承到其子进程。这就是为什么它在 :!:sh:terminal 等命令中可见。

它在不相关的终端中不可见。这是好事。想象一下您想尝试一些东西并设置例如VIMRUNTIME 到一些时髦的值。您不希望现有的 Vim session 发现它并开始出现异常行为。

回到最初的问题:要找出 Vim 从哪里加载内容,:scriptnames 命令可能会派上用场。前面提到的 :help VIMRUNTIME 还提供了一个从 shell 访问 VIMRUNTIME 的代码片段。

关于linux - 变量在 vim 中打印正常,但在 bash shell 中却不行,这是怎么发生的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77229061/

相关文章:

php - 删除包含客户端当前正在下载的文件的目录

bash - Shell脚本对编码和行尾是否敏感?

python - 为什么我的大文件在 Google Colab 上提取后尺寸非常小?

arrays - 如何比较 BASH 中的数组元素?

linux centos 6.7 pip3安装

linux - 如何在日志中未输入确切时间戳时过滤日期范围内的值

c - socket()中 "protocol"为SOCK_DGRAM或SOCK_STREAM时是否需要指定 "type"?

regex - vim 正则表达式查找和替换

Screen & PuTTy 中的 VIM 配色方案?

vim - 有没有办法获取当前正在运行的 vim 实例的服务器名称?