这里完全缺乏直觉。 首先,我认为我只会在从编辑器复制和粘贴代码时发生。不幸的是,它更常见。我唯一要做的就是尝试在当前输入的中间某处插入更多代码或对其进行修改。
预期行为:
- 无副作用地修改输入。
实际发生了什么:
- 在修改输入时,经常会搞砸。
- 如果发生这种情况,每次按键都会复制并插入当前输入以及按下的字符。
重要笔记:
在终端中将编码设置为 UTF-8
问题在不同的模拟器(Terminator、gnome-terminal)上仍然存在
使用不同的 Ruby 运行时控制台(IRB、Pry)时问题仍然存在
问题似乎与 Ruby 运行时有关,而不是 Linux shell(我猜...)
问题出现自:
- 自系统安装以来。没有出现在我的 MacBook Air 上
系统:
- ArchLinux,尽管同事报告说他的 MacBook Pro 上也发生了同样的事情。
如何重现(对我有用):
- 打开 Rails 控制台
- 键入示例代码:Shift.where(name: "som").where(name: "dom").where(name: "pom")
- 导航光标以修改第一个 where 语句。
- 将“som”改为“SOM”
- 应该看到它破裂
- 反复按随机键,看它断得更厉害。
图片:
- 良好的输入
现在我将导航到第一个 where 语句,将“som”更改为大写的“SOM”
我基本上是导航我的光标并按 SHIFT+S、SHIFT+O、SHIFT+M
希望它足够清楚:-) 谢谢!
编辑 1:
尝试使用 zsh 而不是 bash,没有帮助
禁用 spring gem,没有帮助
编辑 2:
reddit 上的人建议我检查是否有任何 Ruby readline 警告,例如。 “未安装阅读线”。它们都没有出现在任何地方。还重新安装了 ruby 2.4.1,看来这不是我的问题。
编辑 3:
我无法在不同的 Rails 项目中重现该问题。 Rails 5.1.1 出现问题,同时 5.0.3 工作正常。 是否有可能是 Rails 本身(或者更确切地说是它的一颗 gem )是原因?
最佳答案
我有一个非常相似的问题,我将其归结为我的着色。
我的 IRBRC 中有以下内容:
class String
def _colorize(color_code)
"\e[#{color_code}m#{self}\e[0m"
end
def red
_colorize(31)
end
def yellow
_colorize(33)
end
end
IRB.conf[:PROMPT][:MY_PROMPT] = {
:AUTO_INDENT => true, # enables auto-indent mode
:PROMPT_I => "[ME]".red + " > ".yellow, # normal prompt
:PROMPT_S => "[ME]".red + " ".yellow, # prompt for continuated strings
:PROMPT_C => "[ME]".red + " * ".yellow, # prompt for continuated statement
:RETURN => "[ME]".red + "=> ".yellow + "%s\n".red # format to return value
}
IRB.conf[:PROMPT_MODE] = :MY_PROMPT
当我删除 .red
和 .yellow
时,一切都很好。
我认为这是因为像 \e[31m
这样的着色字符被算作长度为 5 个字符而不是 0 个字符。
我的解决办法是暂时去掉我的颜色。希望有人会想出比这更好的解决方案。
关于ruby-on-rails - 修改时 Rails 控制台输出中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51211572/