修改

时间:2018-07-06 13:31:19

标签: ruby-on-rails ruby terminal irb pry

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

预期的行为:

  • 修改输入而没有副作用。

实际发生的情况:

  • 经常在修改输入时变得一团糟。
  • 如果发生这种情况,每次按键都会复制并插入当前输入内容以及按下的字符。

重要笔记:

  • 在终端中将编码设置为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”
  • 应该看到它破了
  • 反复按随机键,可以看到更多破损。

图片:

  • 好的输入

enter image description here

  • 现在,我将首先导航至where语句,以将“ som”更改为大写的“ SOM”

  • 我基本上导航了光标,然后按了SHIFT + S,SHIFT + O,SHIFT + M

enter image description here

希望很清楚:-) 谢谢!


编辑1:

  • 尝试使用zsh代替bash,但没有帮助

  • 禁用了春季宝石,没有帮助

编辑2:

关于reddit的建议我应该检查是否有任何Ruby readline警告。 “未安装Readline”。它们都没有出现在任何地方。还重新安装了ruby 2.4.1,看来这不是我的问题。

编辑3:

我无法在其他Rails项目中重现该问题。 问题出现在Rails 5.1.1 上,同时 5.0.3 正常运行。 可能是Rails本身(或更确切地说是它的瑰宝之一)?

1 个答案:

答案 0 :(得分: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

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

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

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