You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IEx/Erlang REPL退格键删除整符号而非单字符,如何恢复正常?

解决IEx/Erl退格删除整个符号的问题及两者共同点

恢复正常退格功能的方法

临时生效(单次会话)

在IEx或Erl中执行以下命令:

io:setopts([{edit_mode, raw}]).

如果是IEx,也可以用Elixir语法:

:io.setopts([edit_mode: :raw])

执行后,退格键就会恢复为逐字符删除的正常行为。

永久生效(所有会话)

  • 针对Erl和IEx通用:在用户主目录创建.erlang文件,添加以下内容:
    io:setopts([{edit_mode, raw}]).
    
  • 仅针对IEx:在用户主目录创建.iex.exs文件(如果已存在则修改),添加:
    :io.setopts([edit_mode: :raw])
    

下次启动IEx或Erl时,配置会自动加载。

问题根源

Erlang/OTP默认使用emacs编辑模式(并非指Emacs编辑器,是Erlang实现的类Emacs编辑绑定),该模式下退格键默认绑定backward-kill-word操作,会删除到最近的词边界。Erlang/Elixir的语法符号(如{、}、#等)会被识别为词边界,因此会出现误删整个符号块的情况。切换到raw模式后,退格键直接发送单个字符删除信号,与普通REPL行为一致。

IEx与Erl的共同点

  • 共享Erlang/OTP终端处理核心:IEx是运行在Erlang虚拟机(BEAM)上的Elixir应用,其终端交互完全依赖Erlang的io模块和底层终端处理逻辑,因此两者的输入行为完全同步。
  • 默认编辑模式一致:都默认启用Erlang的emacs编辑模式,快捷键绑定、输入处理规则完全相同。
  • 配置互通:影响终端行为的环境变量(如$TERM)、Erlang IO配置参数,对两个REPL的作用完全一致。

内容的提问来源于stack exchange,提问作者Patrick Bucher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:00:22