5

这个问题Node.js prompt '>' can not show in eshell解决了 node 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

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

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

^[[1G^[[0J> ^[[3G

我知道可以使用“start”解决这个问题:“env NODE_NO_READLINE=1 node”,但是在任何地方都写这个不是找到解决方案。也许该软件包的其他用户不使用 emacs 并且需要以其他方式设置 env var。

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

alias npm='env NODE_NO_READLINE=1 npm'
4

1 回答 1

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)))

在你的 .emacs 中的某个地方。

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

于 2012-11-02T09:05:23.243 回答