在vim中的内部ruby错误

12 浏览
0 Comments

在vim中的内部ruby错误

我在vim上遇到了一个问题已经有一段时间了。每当我第一次执行与ruby交互的操作,比如:ruby puts "test",我会得到:1:in 'require': cannot load such file -- rubygems.rb (LoadError)的错误信息。

以下是一些可能有用的诊断信息:我的操作系统是OS X 10.11.2,Vim版本是7.4,ruby版本是2.1.2,通过rvm安装,我的shell是zsh(但使用bash也会出现此问题),我的vim是完全原始的。

 $  ruby --version
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
 $  rvm list
rvm rubies
=* ruby-2.1.2 [ x86_64 ]
# => - current
# =* - current && default
#  * - default
 $  which -a ruby
/Users/marcusbuffett/.rvm/rubies/ruby-2.1.2/bin/ruby
/usr/local/bin/ruby
/usr/local/bin/ruby
/usr/bin/ruby
 $  vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar 18 2016 09:07:16)
MacOS X (unix) version
Included patches: 1-1401
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
-balloon_eval    +float           +mouse_urxvt     -tag_any_white
-browse          +folding         +mouse_xterm     -tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+channel         -gettext         -mzscheme        +textobjects
+cindent         -hangul_input    +netbeans_intg   +title
-clientserver    +iconv           +packages        -toolbar
+clipboard       +insert_expand   +path_extra      +user_commands
+cmdline_compl   +job             +perl            +vertsplit
+cmdline_hist    +jumplist        +persistent_undo +virtualedit
+cmdline_info    +keymap          +postscript      +visual
+comments        +langmap         +printer         +visualextra
+conceal         +libcall         +profile         +viminfo
+cryptv          +linebreak       +python          +vreplace
+cscope          +lispindent      -python3         +wildignore
+cursorbind      +listcmds        +quickfix        +wildmenu
+cursorshape     +localmap        +reltime         +windows
+dialog_con      -lua             +rightleft       +writebackup
+diff            +menu            +ruby            -X11
+digraphs        +mksession       +scrollbind      -xfontset
-dnd             +modify_fname    +signs           -xim
-ebcdic          +mouse           +smartindent     -xsmp
+emacs_tags      -mouseshape      -sniff           -xterm_clipboard
+eval            +mouse_dec       +startuptime     -xterm_save
+ex_extra        -mouse_gpm       +statusline      -xpm
+extra_search    -mouse_jsbterm   -sun_workshop
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/local/share/vim"
Compilation: /usr/bin/clang -c -I. -Iproto -DHAVE_CONFIG_H   -F/usr/local/Frameworks -DMACOS_X_UNIX  -Os -w -pipe -march=native -mmacosx-version-min=10.11 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: /usr/bin/clang   -L. -L/Users/travis/.sm/pkg/active/lib -fPIC -Bstatic -fstack-protector -L/usr/local/lib -F/usr/local/Frameworks -Wl,-headerpad_max_install_names -o vim        -lm  -lncurses -liconv -framework Cocoa   -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -framework Python   -lruby-static -framework CoreFoundation -lobjc -L/Users/marcusbuffett/.rvm/rubies/ruby-2.1.2/lib

0
0 Comments

在VIM中出现“Internal ruby error in vim”错误的原因是VIM默认不使用登录shell。而RVM在shell的初始化脚本中进行初始化,这些脚本仅在登录shell中运行,例如在终端中打开时。因此,当您尝试在VIM中使用RVM时,VIM会看到系统中的ruby而不是RVM中的ruby。而且我猜测您的系统ruby中没有安装rubygems。

解决方法之一是强制VIM使用登录shell,这样它就能像命令行一样运行。在这个Stack Overflow问题中有相关回答,我引用如下:

# ~/.vimrc
set shell=bash\ -l

另一个解决方法是手动设置VIM的PATH,使得找到的第一个ruby是RVM中的ruby而不是系统中的ruby。

我尝试过这个方法,但不幸的是没有起作用。当我执行:ruby puts RUBY_VERSION时,我得到的是通过RVM安装的ruby(2.1.2),所以这似乎不是问题所在。

等一下,你的意思是:ruby puts RUBY_VERSION可以工作,但:ruby puts "test"不行?

总是第一个ruby命令失败,之后的命令都正常工作,所以第一个:ruby puts RUBY_VERSION会显示错误,第二个会给我2.1.2。

我也遇到了同样的问题,第一个命令失败,第二个命令执行成功。

我在Mac(OS X Yosemite)上遇到了这个问题。我之前使用的是通过brew安装的vim 7.4,出现了这个问题。卸载vim 7.4后,重新安装了vim 7.3(系统默认版本),问题就解决了。

你找到了解决这个问题的方法吗?我也只是第一个ruby命令失败,之后的命令都正常执行。

0
0 Comments

从上面的内容中可以得知,出现(Internal ruby error in vim)这个问题的原因可能是由于某个非vim相关的问题引起的。解决方法是使用以下命令进行修复和重新安装Ruby版本2.1.2:

rvm fix-permissions && rvm reinstall 2.1.2

这个解决方法可能在stackoverflow上被提到过,并被确认为解决类似非vim问题的正确答案。

0
0 Comments

在vim中出现“Internal ruby error”错误的原因是在执行ruby命令时发生了内部错误。解决方法是使用另一种方式来运行ruby命令,避免出现错误。

可以像运行其他命令一样,使用:!ruby -e "puts 'Hello'"来运行ruby命令,或者使用:!ruby %:p来运行当前文件。

但需要注意的是,这种方式会切换回shell,直到按下一个键返回vim,而不会像:ruby命令一样在命令窗口中执行代码。我认为这是值得权衡的,因为它更加灵活。下面是一个解决方法。

当配合以下代码使用时,最后一种方法特别有用:

if __FILE__ == $0
  run_some_command || assert_something || run_only_this_test_file
end

例如,你可以在文件保存时为特定文件名(例如*_test.rb)添加autocmd,以自动在保存时运行测试,如果你对此类功能感兴趣的话。

另外,如果你不喜欢闪烁的效果,你还可以将结果存储到一个变量中,生成一个新的缓冲区,并将结果放入其中,使用:let res=system('ruby '.expand('%:p')) | new | put=res

0