我使用的是 Mac 操作系统,自从最新的 Rails 版本以来,删除键不再起作用。
❯ rails -v
Rails 7.0.4
❯ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]
当我点击
delete
而不是删除字符和当前光标位置时,它会插入 ^[[3~
。
我不知道如何解决这个问题。之前的rails版本没有这个问题。
好吧,这是 irb(或更确切地说是 Reline)中的一个错误,尚未修复。即使存在 2 个 PR。
https://github.com/ruby/reline/issues/435
要猴子补丁,请将此片段添加到您的
.irbrc
class Reline::ANSI
def self.set_default_key_bindings(config)
set_default_key_bindings_comprehensive_list(config)
if Reline::Terminfo.enabled?
set_default_key_bindings_terminfo(config)
end
{
# extended entries of terminfo
[27, 91, 49, 59, 53, 67] => :em_next_word, # Ctrl+→, extended entry
[27, 91, 49, 59, 53, 68] => :ed_prev_word, # Ctrl+←, extended entry
[27, 91, 49, 59, 51, 67] => :em_next_word, # Meta+→, extended entry
[27, 91, 49, 59, 51, 68] => :ed_prev_word, # Meta+←, extended entry
}.each_pair do |key, func|
config.add_default_key_binding_by_keymap(:emacs, key, func)
config.add_default_key_binding_by_keymap(:vi_insert, key, func)
config.add_default_key_binding_by_keymap(:vi_command, key, func)
end
{
[27, 91, 90] => :completion_journey_up, # S-Tab
}.each_pair do |key, func|
config.add_default_key_binding_by_keymap(:emacs, key, func)
config.add_default_key_binding_by_keymap(:vi_insert, key, func)
end
{
# default bindings
[27, 32] => :em_set_mark, # M-<space>
[24, 24] => :em_exchange_mark, # C-x C-x
}.each_pair do |key, func|
config.add_default_key_binding_by_keymap(:emacs, key, func)
end
end
end
事实证明这有帮助:
nano ~/.irbrc
IRB.conf[:USE_READLINE] = true
但是,作为副作用,输入行的语法突出显示被关闭。我接受这一点,因为我的删除键更重要。