Vim-像 Textmate 一样在新窗口中显示代码输出?

Vim-像 Textmate 一样在新窗口中显示代码输出?

几个月前,我从 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 的输出被放入新选项卡中。但是,我无法让它在新的单独窗口中弹出。更改tabnewnew只会将输出发送到同一窗口中的拆分。

另一个问题是,可见内容^M会附加到每行的末尾,因此输出最终看起来像这样,这有点麻烦:

Hello World!^M

那么,有没有办法将输出放入单独的窗口而不^M附加到末尾?我是否应该使用任何插件来实现这种类似 Textmate 的代码输出效果?

答案1

听起来你正在使用 MacVim,所以尝试一下:

:w !ruby | mvim -c "set nomodified" -

假设您mvim的路径中有一个脚本,它将执行当前缓冲区的内容,然后将输出传输到在新的 OS X 窗口(而不是新的 Vim 窗口)中运行的 MacVim 实例中。新的缓冲区被标记为未修改,以避免在您尝试关闭它而不保存时出现警告。

更多信息:

:help macvim
:help mvim

答案2

一些建议:

  1. 为什么:!ruby foo.rb对你不起作用?假设你的 vim 在可滚动窗口中运行?或者:!ruby foo.rb > foo.out,然后是 之后:e foo.out,你将打开 2 个缓冲区,你正在处理的原始文件和运行 ruby​​ 的结果。你可以用缓冲区做各种各样的事情(在分割窗口中打开缓冲区等)。查看:help :buffer此区域中的更多选项。
  2. 如果 vim 编译时加入了 ruby​​ 支持 (+ruby),那么你就可以在 vim 中使用 ruby​​ 命令,例如:ruby {cmd}。查看:help :ruby更多相关信息。
  3. 您可能更适合安装rails.vim可能还有一些其他的 vim 包。Biodegradeable Geek 有一篇很好的文章使用 VIM 作为 Ruby on Rails IDE

相关内容