3

这里完全缺乏直觉。首先我以为我只在从编辑器复制和粘贴代码时发生。不幸的是,它更常见。我唯一要做的就是尝试在当前输入中间的某个地方插入更多代码或修改它。

预期行为:

  • 修改输入没有副作用。

实际发生的情况:

  • 修改输入时经常会搞砸。
  • 如果发生这种情况,每次按键都会复制并插入当前输入以及按下的字符。

重要提示:

  • 终端中的编码设置为 UTF-8

  • 问题在不同的模拟器上仍然存在(终结者,gnome-terminal)

  • 使用不同的 Ruby 运行时控制台(IRB、Pry)时问题仍然存在

  • 问题似乎与 Ruby 运行时有关,而不是 Linux shell(我猜......)

问题出现的原因是:

  • 自系统安装。没有出现在我的 MacBook Air 上

系统:

  • ArchLinux,尽管同事报告说他的 MacBook Pro 上发生了同样的事情。

如何重现(对我有用):

  • 开放式导轨控制台
  • 键入示例代码: 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,没有帮助

  • 禁用弹簧宝石,没有帮助

编辑2:

reddit 上的人们建议我应该检查是否有任何 Ruby readline 警告,例如。“未安装 Readline”。它们都没有出现在任何地方。还重新安装了 ruby​​ 2.4.1,在我的情况下似乎不是问题。

编辑 3:

我无法在不同的 Rails 项目中重现该问题。问题出现在 Rails 5.1.1上,同时5.0.3完美运行。Rails 本身(或者更确切地说是它的宝石之一)是否可能是原因?

4

1 回答 1

0

我有一个非常相似的问题,我把它归结为我的颜色。

我的 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

当我删除.redand时.yellow,一切都很好。

我认为这是因为我的着色字符\e[31m被计为长度为 5 个字符而不是 0 个字符。

我的解决方案是暂时去掉我的颜色。希望有人会提出比这更好的解决方案。

于 2019-09-16T19:36:10.473 回答