【问题标题】:pry: artifacts on ctrl-arrow (ubuntu)撬:ctrl-arrow(ubuntu)上的工件
【发布时间】:2012-12-30 00:55:02
【问题描述】:
我使用 rvm 安装了 ruby,并在 RoR 项目中使用它。问题是,当我在该项目中启动pry 时,我无法使用 ctrl-arrows 快捷方式>它不会打印左/右单词,而是打印工件,例如;5D 或;5C。当我在该项目之外致电pry 时,一切正常。 ctrl-arrows 也适用于常规控制台。我已经尝试使用 readline 支持重新安装 readline 和 ruby。我还能做些什么?
【问题讨论】:
标签:
ruby-on-rails
ruby
readline
pry
【解决方案1】:
我发现了问题。我的Gemfile 中有rb-readline 依赖项。一旦我删除它,问题就消失了。
【解决方案2】:
解决此问题的一种方法是在您的主目录中创建一个.inputrc,其中包含以下内容:
"\033[1;5C": forward-word
"\033[1;5D": backward-word
我在使用 bash 和 pry 时都遇到了这个问题,上面为我解决了这个问题。
请注意,"\033[1;5C" 似乎因您的操作系统或您使用的终端软件而异。在 OSX 上,您可以通过转到 Terminal.app 的设置对话框、选择配置文件并单击“键盘”选项卡来查看按 ctrl-right 时实际生成的指令:
- 在 Snow Leopard 上,默认值为
\033[5D
- 在 Mavericks 上,默认值为
\033[1;5C
出现此问题是因为您的 shell 无法识别您的终端发送的指令(?请耐心等待 - 以下主要是基于我的谷歌搜索的猜测)
以下是这些代码的分解方式:
\033 是 ASCII Escape character 的八进制表示。它的意思是“将以下内容解释为操作终端的说明——而不是文本”。它还可以根据上下文以其他方式表示,包括:
- 十六进制为
^[(例如^[[1;5D)
- 在 bash 中为
\e(例如 \e[5D 或 \e\e[D)
我认为1 只是意味着'在与光标相同的行上执行此操作,而5D 旨在被解释为'向前跳过一个单词'。 ; 只是将两条指令分开。
我的猜测是,这个问题来自一些 shell 或实用程序,要么本身不理解 5D 应该表示“跳过一个单词”,要么不支持使用 ; 编写指令。添加.inputrc 可以填补空白并使一切正常:)