npm在emacs eshell下没有正确显示提示

Rob*_*lga 5 emacs node.js npm

这个问题Node.js提示'>'无法在eshell中显示解决节点repl的问题,但是当你从npm调用node时,该解决方案不起作用.

举例来说,如果我做

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

或者如果你有一个带有"脚本"的package.json:{"start":"node"}

$ npm start
npm WARN package.json nodo1@0.0.1 No README.md file found!
> node

^[[1G^[[0J> ^[[3G
Run Code Online (Sandbox Code Playgroud)

我知道这个可以使用"start"解决:"env NODE_NO_READLINE = 1 node",但是到处写这个并不是一个查找解决方案.也许包的其他用户不使用emacs,需要以其他方式设置env var.

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

alias npm='env NODE_NO_READLINE=1 npm'
Run Code Online (Sandbox Code Playgroud)

小智 5

这是过滤许多shell前端用于着色文本的特殊字符的comint模式.如果您通过Emacs与shell程序交互过,您可能熟悉"使用哑终端或Emacs终端"等消息.有些人可以检测到使用了Emacs或哑终端,并且不会发送那些无法解释的字符,但Node不会这样做.无论如何,你可以使用这样的东西:

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

你的.emacs中的某个地方.

Stackoverflow不会正确复制控制字符,正则表达式中的第一个字符(在引号之后和斜杠之前)是^[字符.您可以通过执行C-q 0 3 3下一步键入的任何操作在Emacs中输入它将导致控制字符插入当前缓冲区.