为什么从MacVim执行shell输出/设置与终端不同

时间:2012-06-20 04:31:59

标签: ruby vim rvm zsh macvim

使用Vim时,您可以通过

进行shell
:!<command_name>

这是我的问题。

我已将当前的Ruby设置为

ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0]

这是

的输出
ruby -v
在Terminal.app中的

或只是终端。

一旦我加载MacVim并输入

:!ruby -v

我得到了

ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]

Vim从哪里获取它的上下文?

它似乎不符合我在.zshrc中指定的设置。 这些设置似乎都没有加载或生效。 我甚至创建了一个函数来通过命令行

来获取我的dotfile
:!source ~/.zshrc

并没有用!

我不明白这里到底发生了什么。我遇到了一个问题,因为 Vim使用的是Ruby 1.9.3p0,但RVM设置为不同的Ruby。这当然是打破 任何对Rails的调用。

/usr/lib/ruby/1.9.1/rubygems.rb:314:in `bin_path': can't find gem rails ([">= 0"]) with executable rails (Gem::GemNotFoundException)
        from /usr/bin/rails:19:in `<main>'

shell returned 1

有人可以告诉我如何覆盖它吗?

甚至我的版本的导轨在Vim与终端不同。

# Terminal output
which rails

# prints - /Users/adubb/.rvm/gems/ruby-1.9.3-p194/bin/rails

# Vim/MacVim output
:!which rails

# prints - /usr/bin/rails

1 个答案:

答案 0 :(得分:1)

好的,伙计们,一切都很好。让我概述我的解决方案的步骤。首先,非常感谢@romainl和@mpapis的帮助。 @romainl,我做的第一件事是尝试RVM插件,但这没有帮助。然后我看了at the link that @mpapis posted,在那里我了解了MacVim的隐藏设置。好吧,我无法立即找到这个设置,因为当他们提到偏好时,他们不是在谈论UI(通常映射到Command +,热键)。他们在谈论

:h macvim

我在扫描the aforementioned post后发现了这一点。

一旦我进入macvim帮助部分,我就搜索了世界“shell”。

/shell

我在3.首选项部分下找到了两个设置。

==============================================================================
3. Preferences                  macvim-prefs macvim-preferences

Some settings are global to the MacVim application and would not make sense as
Vim options.  These settings are stored in the user defaults database and can
be accessed via the "MacVim.Preferences..." menu item.

                            macvim-user-defaults
Not all entries in the user defaults database are exposed via the preference
panel, usually because they should not be changed by the user under normal
circumstances.  These options can still be changed with the "defaults" command
by opening Terminal and typing

    defaults write org.vim.MacVim KEY VALUE

Check the man page on "defaults" for more information on this command as well
as general information regarding Mac OS X user defaults.

Here is a list of relevant dictionary entries:

...more entries
MMLoginShellArgument    login shell parameter [string]
MMLoginShellCommand     which shell to use to launch Vim [string]
...more entries

MMLoginShellArgument和MMLoginShellCommand设置引起了我的注意。所以我通过

尝试了其中一个设置
defaults write org.vim.MacVim KEY VALUE

语法,但无济于事。

然后我用谷歌搜索了“mmloginshell命令macvim”,这是我在MacVim帮助的首选项部分找到的2个设置之一。

The first link was a Stackoverflow question.

一旦到达那里,我就遇到了this answerthis page on the MacVim Github wiki给了我。

在那里,我跟随BjörnWinckler(一位核心MacVim开发人员)执行他的故障排除指南;特别是标题为“For zsh users”的部分。

正是在这里我了解了这两个文件:

/etc/zshenv 
/etc/zprofile

当加载MacVim并且zsh是当前shell时,可以预期〜/ .zshrc的内容将被读/源,但事实并非如此。一旦我意识到这两个文件中的一个(/ etc / zshenv和/ etc / zprofile)应该包含我的$ PATH变量,我继续将它从〜/ .zshrc单独迁移到每个文件,以便查看是否可以工作。我最初的目标是/ etc / zshenv(同时保留/ etc / zprofile完整),重新加载vim / MacVim,一切都运行完美。

which rails

这次实际上有正确的输出。

@romainl,当你最初询问我的$ PATH变量是否在Terminal.app和vim之间同步时,我想我错误地认为它们是等价的。在后来分析两组输出时,我发现它们确实略有不同。对于潜在的问题,这本来就是一个很好的指标。我的错误和谢谢。

Bash用户可能想要考虑我怀疑相当于/ etc / zshenv的内容,概述为here in this post

Ben Schmidt提到你应该在“〜/ .profile not~ / .bashrc”中设置你的$ PATH变量;所以在排除故障时要考虑到这一点。

我不记得在使用〜/ .bashrc中指定的$ PATH变量时遇到了bash这个问题,但谁知道......这些信息在某些时候可以派上用场。

谢谢大家,我希望这些信息有助于麻烦的zsh用户。快乐的红宝石黑客攻击。