变量在 Vim 中打印正常,但在 Bash 中却不行,怎么会发生这种情况?

问题描述 投票:0回答:1

我正在关注有关 Vim 默认值的一些资源,我发现

$VIMRUNTIME/defaults.vim
中有一个默认文件,所以我尝试打印
$VIMRUNTIME
变量。

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

我以为

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

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

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

linux bash vim
1个回答
4
投票

您错过了环境的概念。顾名思义,“环境变量”驻留在环境中。它们可以从父母遗传给孩子,但反之则不然。 您可能从您最喜欢的编程语言中熟悉这样的概念。 在您的具体示例中,Vim 创建

VIMRUNTIME

(根据

:help VIMRUNTIME
)并将其继承到其子进程。这就是为什么它在
:!
:sh
:terminal
等命令中可见。
在不相关的终端中不可见。这是好事。想象一下您想尝试一些东西并设置例如

VIMRUNTIME

达到一些时髦的价值。您不希望现有的 Vim 会话发现它并开始出现异常行为。

回到最初的问题:要找出 Vim 从哪里加载内容,

:scriptnames

命令可能会派上用场。上述

:help VIMRUNTIME
还具有一个从 shell 访问
VIMRUNTIME
的代码片段。
    

© www.soinside.com 2019 - 2024. All rights reserved.