如何在Windows上的Emacs中交互运行node.js

how to run node.js interactively in Emacs on Windows

本文关键字:交互 运行 node js Emacs Windows 上的      更新时间:2023-09-26

我认为这会起作用:

(defun my-node ()
  (interactive)
  (pop-to-buffer (make-comint "my-node" "node")))

但是,当我执行M-x my-node并在comint缓冲区中输入1+1时,它不会显示任何输出。

这是在Windows 7上的Emacs 24.0.50.1中,安装NodeJS时没有任何特殊配置。

像在M-x compile RET node hello-world.js RET中那样以非交互方式调用node.js可以很好地工作。在cmd中以交互方式运行node效果良好。

这可能是相关的:当我运行M-x shell并在shell缓冲区中输入node,然后输入1+1时,它不会显示结果。我一定错过了一些非常基本的东西。

更新:

可能相关:emacs/Python:在行缓冲模式与块缓冲模式下运行Python shell-堆栈溢出

将node.js(使用nodev0.8.1测试)作为Emacs下的下级shell的最简单方法是使用js-comint包。然后,将(setq inferior-js-program-command "node --interactive")设置为强制节点在交互模式下运行。命令M-x run-js将打开解释器。

类似地,您可以很容易地验证node --interactive是否在eshell中工作。

来源http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html,看起来可能发生的情况是节点正在缓冲输出。如果有一个选项可以修改它的缓冲,您可以尝试传递它。

假设这是一个缓冲问题,可能还有另一种方法可以解决它,但我的windows知识还不够完整。I、 首先,我很想在windows平台上找到一个通用的解决方案,当它出现时,这是一个令人讨厌的问题。

我找到了一个解决方案。

制作一个节点脚本,用于启动JavaScript REPL接口。

node-in-node.js:

var repl = require("repl");
repl.start();

将"node-path''to''node-innode.js"传递给comint,而不是简单的"node"。

(defun my-node-shell ()
  (interactive)
  (pop-to-buffer (make-comint "Node Shell" "node" nil "C:''run''node-in-node.js")))

运行M-x my-node-shell在Windows Emacs中运行JavaScript shell。我不知道为什么会这样。制表符完成、语法高亮显示、通过Shift+Enter进行的多行输入不起作用。

如果js-comint不适合您,您可以尝试:

(defun node-repl () (interactive)
      (setenv "NODE_NO_READLINE" "1") ;avoid fancy terminal codes
      (pop-to-buffer (make-comint "node-repl" "node" nil "--interactive")))
(node-repl)

js-comint方式似乎效果更好。