Vim 用于 :ruby 命令的是哪个 Ruby?

Which Ruby does Vim use for :ruby commands?

Vim 支持 Ruby 命令。 (有关详细信息,请参阅 the :help if-ruby documentation。)如果启用 +ruby 支持(请参阅 vim --version),这些命令可以 运行 使用 :ruby。例如,我可以看到我目前使用的是 v3.0.0:

:ruby print RUBY_VERSION

但是,这是哪个 Ruby 安装?例如,它是系统 Ruby、由 RVM 管理的东西,还是 Vim 中内置的单独 Ruby 安装?

此外,是否可以安装 Ruby gem 以与 :ruby 命令一起使用?


关于我的安装的详细信息:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.7
BuildVersion:   19H524
$ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar 21 2021 06:59:54)
macOS version - x86_64
Included patches: 1-2625
Compiled by Homebrew
[...]
$ vim --version | grep ruby
+cursorshape       +lua               +ruby              +wildmenu
Linking: clang -L. -fstack-protector-strong -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/readline/lib -L/usr/local/lib -o vim -lncurses -liconv -lintl -framework AppKit -L/usr/local/opt/lua/lib -llua5.4 -mmacosx-version-min=10.15 -fstack-protector-strong -L/usr/local/lib -L/usr/local/Cellar/perl/5.32.1_1/lib/perl5/5.32.1/darwin-thread-multi-2level/CORE -lperl -lm -lutil -lc -L/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/lib/python3.9/config-3.9-darwin -lpython3.9 -framework CoreFoundation -lruby.3.0 -L/usr/local/Cellar/ruby/3.0.0_1/lib
$ which -a ruby
/Users/username/.rbenv/shims/ruby
/usr/bin/ruby
$ rbenv versions
  system
* 2.6.5 (set by /Users/username/.rbenv/version)

所有这些都取决于 Vim 构建配置。 :ver 输出可能指示以下内容:

  • -lang“lang”的接口根本没有编译;
  • +lang 所有内容都静态链接到 Vim 可执行文件;
  • +lang/dyn 接口链接到动态库 (dll/so)

如果它是动态链接的,那么将根据选项值(例如 :h 'rubydll')按需搜索和加载库。在这种情况下,它可能指向您想要的任何安装。 (尽管在编译时指定的 -DRUBY_VERSION=XX 可能仍然相关并且 Vim 可能无法加载不匹配的库)。

你没有提到你的平台,或者你是如何安装的 Vim。如果我们谈论默认行为,这些事情很重要。

除非您将 Ruby 静态编译为 Vim,否则它将是您的 PATH 中第一个 Ruby 或 fish_user_paths[ 中的第一个=41=]如果你用鱼shell。在 macOS 和典型的桌面 Linux 发行版(如 Ubuntu 上,这就是您开箱即用的期望。

其他检查方法包括:

  1. 使用 which -a ruby 将显示 PATH.

    中的所有红宝石

    如果 Ruby 3.0.0 不是第一个列出的项目,或者不是安装到 /usr/bin/ruby 的版本,那么您可以非常确定其他东西正在管理它。

  2. 检查 env | fgrep -i ruby 以获取各种 Ruby 管理员的设置。

    版本管理员通常通过修改您的环境来工作。比如chruby在环境中添加CHRUBY_VERSIONRUBY_ROOT设置选择的路径Ruby.其他常见的版本管理器也会通过各种方式更新环境,所以这里是个不错的地方。

  3. 检查您的 shell 初始化文件(例如 ~/.bashrc)。

    如果您没有在 shell 的初始化脚本中设置 RVM、rbenv 或 chruby,那么您可能没有使用其中之一。当然,这并不排除使用符号链接、GNU stow 或其他重定向,但如果您没有设置它们并且不在其他人可能拥有的多用户系统上工作,那么您可以非常自信调用 ruby 是在调用 PATH.

    中的第一个 Ruby