pry:ctrl-arrow上的工件(ubuntu)

时间:2012-12-30 00:55:03

标签: ruby-on-rails ruby readline pry

我使用rvm安装了ruby,我在RoR项目中使用它。问题是,当我在该项目中启动pry时,我无法使用ctrl-arrows快捷键>它不是左/右单词,而是打印工件,如;5D;5C。当我在该项目之外调用pry时,一切正常。 ctrl-arrows也可以在常规控制台中使用。我已经尝试使用readline支持重新安装readline和ruby。我还能做些什么?

2 个答案:

答案 0 :(得分:6)

我发现了问题。我的rb-readline中有Gemfile依赖项。一旦我删除它,问题就消失了。

答案 1 :(得分:4)

解决此问题的一种方法是在主目录中使用以下内容创建.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
  • On Mavericks默认为\033[1;5C

发生此问题的原因是您的终端发送的指令无法被您的shell识别(?请耐心等待 - 以下内容主要是基于我的Google搜索猜测)

以下是这些代码的分解方式:

\033是ASCII Escape character的八进制表示。它意味着“将以下内容解释为操纵终端的指令 - 而不是文本”。它也可以根据具体情况以其他方式表示,包括:

  • 以十六进制为^[(例如^[[1;5D
  • bash中的
  • \e(例如\e[5D\e\e[D

我认为1只是意味着'在与光标相同的行上执行此操作,而5D旨在被解释为'向前跳过一个单词'。 ;只是将两条指令分开。

我的猜测是,问题来自某些shell或实用程序,要么本身不理解5D应该表示'跳过一个单词',要么不支持使用;编写指令。添加.inputrc填充空白并使一切正常工作:)