使用 Vim 作为 Javascript 沙箱:如何将缓冲区写入节点并在另一个缓冲区中读取结果

Using Vim as a Javascript Sandbox: How do I write a buffer to node and read the result in another buffer?

本文关键字:缓冲区 节点 另一个 结果 读取 使用 沙箱 Javascript 作为 Vim      更新时间:2023-09-26

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

最终目标是有一个包含我的代码的左侧窗口,以及一个包含动态更新节点可执行文件.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函数不可靠。

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

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

  • 将输出读入寄存器,并在所选缓冲区中显示该寄存器
  • 利用r!
  • 利用快速修复或:make

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

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

  • 异步命令
  • 快速运行
  • 别人。。。

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

愚蠢的例子:

my_array = [1,2,3];
my_array.push(4);
my_array[3];
// 4

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

let g:codi#interpreters = {
  ' 'javascript': {
     ' 'rightalign': 0,
  ' },
' }

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

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