2

我正在尝试将 vim 用作复杂的 javascript 沙盒编辑器。

最终目标是拥有一个包含我的代码的左窗口,以及一个包含来自 node.js 可执行文件的动态更新输出的右窗口。

我目前正在使用:

map <Leader>r :silent :w !node -p > /tmp/jsconsole<cr>

silent !cat '' > /tmp/jsconsole

botright  vnew
e /tmp/jsconsole

set buftype=nofile
set bufhidden=hide
set nobuflisted
setlocal noswapfile
" set nomodifiable " maybe later once i can figure out how to lock/unlock

wincmd h
set buftype=nofile
set bufhidden=hide
set nobuflisted
setlocal noswapfile

autocmd QuitPre * :qa

set autoread

这行得通,有点。我发现vim的autoread功能不可靠。

理想情况下,我将能够运行左侧缓冲区的内容,而无需node -p通过 stdin 保存文件,将 stdout 和 stderr 读入右侧缓冲区,这是不可编辑的。

我知道有几种方法可以做到这一点,但缺乏将它们粘合在一起的知识。

  • 将输出读取到寄存器并在所选缓冲区中显示该寄存器
  • 利用 r!
  • 使用 quickfix 或 :make

如何通过 stdin to 传递缓冲区内容,node -p捕获 stdout 和 stderr 并将它们传递到不同的缓冲区?

4

3 回答 3

2

有各种脚本或多或少在做你想做的事。

我最近遇到了非常简约的pipe2eval,它可以让您评估当前行或视觉选择,并在下面的评论中插入结果。

愚蠢的例子:

my_array = [1,2,3];
my_array.push(4);
my_array[3];
// 4
于 2013-09-09T19:07:22.923 回答
2

您可以使用https://github.com/metakirby5/codi.vim只需安装它并将此行添加到您的 .vimrc

let g:codi#interpreters = {
  \ 'javascript': {
     \ 'rightalign': 0,
  \ },
\ }
于 2017-11-23T07:19:28.653 回答
1

根据 Randy 的评论,在 tmux 顶部使用 vim-slime 并在右侧 tmux 窗格中使用节点 REPL 确实有效。这是专门回答这个问题的一种非常有效的方法,尽管我仍然对包含 vim 的答案感兴趣。

虽然我还没有设置它,但我计划将它设置为由 tmuxinator 管理的特定 tmux 配置。

于 2013-09-09T18:04:23.963 回答