ruby 是否禁用IRB键盘快捷键?这些可以重新启用吗?我弄坏了什么?

voase2hg  于 2023-10-18  发布在  Ruby
关注(0)|答案(1)|浏览(98)

预期行为:使用readline快捷键的键盘快捷键,如this answer
实际上发生了什么:按Ctrl+l清除屏幕

irb
2023-08-08 20:31:17 -0600
Loaded Profile methods
irb.main{
irb.m${ ^Ltyping stuff^E^A

ruby版本:ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
我想我的~/.irbrc可能无意中破坏了快捷方式。我已经重命名了它,所以它不是源代码,但行为保持不变,irb将“^#{letter_I_pressed}”写入屏幕,而不是readline行为。
我注意到<esc>使Ctrl-l能够清除和 * 一些 * 类似vi的行为(0移动到行的开头,Shift-c不做任何事情)。所以,也许将我的bash模式设置为vi会破坏这个?在我的/etc/profile中:

set -o vi
set editing-mode vi
set keymap vi
set show-mode-in-prompt on

所以我尝试了:set -o emacs ; set editing-mode emacs ; set keymap emacs ; irb
奇怪的是,这并没有启用emacs的readline行为,也没有改变我上面描述的内容。

zpjtge22

zpjtge221#

可能出现的问题及Wrapper解决方案

您的Ruby可能在没有readline支持的情况下编译。这通常是由于Ruby或pkgconfig中的最新更改,其中各种编译标志没有得到正确处理,因为pkgconfig无法找到正确的库。
请确保已安装系统必备组件并在编译期间启用功能标志。在我遇到这个问题的一些平台或特定版本上,我还发现除了readline之外安装rlwrap也很有用,这是一个readline Package 器,为缺少它的应用程序提供GNU readline和BSD libedit支持。举例来说:

brew install rlwrap
rlwrap irb

已经为我解决了当readline或libedit没有正确编译成irb或icr时的问题,后者是Crystal的REPL,我最近发现readline和libedit支持因为这个问题而被击中或错过。

GNU Readline编译环境变量

或者,您可以尝试设置以下环境值并尝试重新编译:

export LDFLAGS="-L/opt/homebrew/opt/readline/lib"
export CPPFLAGS="-I/opt/homebrew/opt/readline/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/readline/lib/pkgconfig"

与OpenSSL相关的类似问题也有报道,因此您可能也需要在那里做一些类似的事情。

相关问题