npm在emacs eshell下不能正确显示提示符

这个问题Node.js提示'>'不能在eshell中显示解决节点repl的问题,但是当你从npm调用节点时,这个解决scheme不起作用。

如果我做的例子

$ npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sane defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. ^[[1G^[[0Jname: (nodo1) ^[[15G 

或者,如果你有一个包含“脚本”的package.json:{“start”:“node”}

 $ npm start npm WARN package.json nodo1@0.0.1 No README.md file found! > node ^[[1G^[[0J> ^[[3G 

我知道这个可以使用“开始”解决:“env NODE_NO_READLINE = 1节点”,但是到处写这不是一个find解决scheme。 也许包的其他用户不使用emacs,需要以其他方式设置envvariables。

我尝试使用别名为npm设置NODE_NO_READLINE = 1,但结果相同

 alias npm='env NODE_NO_READLINE=1 npm' 

这是许多shell前端用来对文本进行着色的过滤特殊字符的comint模式。 如果您曾经通过Emacs与一个shell程序进行交互,您可能会熟悉诸如“使用哑terminal或Emacsterminal”之类的消息。 有些人可以检测到使用Emacs或哑terminal,不会发送那些无法解释的字符,但节点不这样做。 无论如何,你可以使用这样的东西:

 (add-to-list 'comint-preoutput-filter-functions (lambda (output) (replace-regexp-in-string "\\[[0-9]+[GK]" "" output))) 

在你的.emacs的某个地方。

Stackoverflow不会正确地复制控制字符,正则expression式中的第一个字符(在引号之后和斜线之前)是^[字符。 您可以通过执行Cq 0 3来input它在Emacs中的内容。接下来input的任何内容都会导致控制字符被插入到当前缓冲区中。