几个月前,我从 Textmate 换到了 Vim。总的来说,我真的很喜欢 Vim,但我怀念 Textmate 的一点是使用 ⌘R 命令运行 Ruby 代码,并将结果整齐地弹出到新的可滚动窗口中。显然,Vim 能够运行 Ruby 代码并使用 显示输出:w !ruby
。唯一的缺点是,如果结果输出太长,我无法滚动查看。
为了解决这个问题,我尝试修改一个:redir
函数Vim 技巧。它看起来像这样:
function! TabMessage(cmd)
redir => message
silent execute a:cmd
redir END
tabnew
silent put=message
set nomodified
endfunction
command! -nargs=+ -complete=command TabMessage call TabMessage(<q-args>)
现在 Ruby 的输出被放入新选项卡中。但是,我无法让它在新的单独窗口中弹出。更改tabnew
为new
只会将输出发送到同一窗口中的拆分。
另一个问题是,可见内容^M
会附加到每行的末尾,因此输出最终看起来像这样,这有点麻烦:
Hello World!^M
那么,有没有办法将输出放入单独的窗口而不^M
附加到末尾?我是否应该使用任何插件来实现这种类似 Textmate 的代码输出效果?
答案1
听起来你正在使用 MacVim,所以尝试一下:
:w !ruby | mvim -c "set nomodified" -
假设您mvim
的路径中有一个脚本,它将执行当前缓冲区的内容,然后将输出传输到在新的 OS X 窗口(而不是新的 Vim 窗口)中运行的 MacVim 实例中。新的缓冲区被标记为未修改,以避免在您尝试关闭它而不保存时出现警告。
更多信息:
:help macvim
:help mvim
答案2
一些建议:
- 为什么
:!ruby foo.rb
对你不起作用?假设你的 vim 在可滚动窗口中运行?或者:!ruby foo.rb > foo.out
,然后是 之后:e foo.out
,你将打开 2 个缓冲区,你正在处理的原始文件和运行 ruby 的结果。你可以用缓冲区做各种各样的事情(在分割窗口中打开缓冲区等)。查看:help :buffer
此区域中的更多选项。 - 如果 vim 编译时加入了 ruby 支持 (+ruby),那么你就可以在 vim 中使用 ruby 命令,例如
:ruby {cmd}
。查看:help :ruby
更多相关信息。 - 您可能更适合安装rails.vim可能还有一些其他的 vim 包。Biodegradeable Geek 有一篇很好的文章使用 VIM 作为 Ruby on Rails IDE