Vim - 在新窗口中显示代码输出 á la Textmate?

mic*_*ael 6 vim gvim macvim

几个月前,我从 Textmate 切换到 Vim。总的来说,我真的很喜欢 Vim,但我从 Textmate 中错过的一件事是使用 ⌘R 命令来运行 Ruby 代码,并在一个新的可滚动窗口中整齐地弹出结果。显然,Vim 能够运行 Ruby 代码并使用:w !ruby. 唯一的缺点是,如果结果输出太长,我无法滚动浏览它。

为了解决这个问题,我尝试修改Vim Tips 中的一个:redir函数。它看起来像这样:

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>)
Run Code Online (Sandbox Code Playgroud)

现在 Ruby 的输出被放入一个新选项卡中。但是,我无法让它在一个新的、单独的窗口中弹出。更改tabnewnew仅将输出发送到同一窗口中的拆分。

另一个问题是一个visible^M被附加到每一行的末尾,所以输出最终看起来像这样,这有点麻烦:

Hello World!^M
Run Code Online (Sandbox Code Playgroud)

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

小智 1

听起来你正在使用 MacVim,所以试试这个:

:w !ruby | mvim -c "set nomodified" -
Run Code Online (Sandbox Code Playgroud)

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

更多信息:

:help macvim
:help mvim
Run Code Online (Sandbox Code Playgroud)