Rails 7 IRB 控制台插入转义键而不是执行删除命令

问题描述 投票:0回答:2

我使用的是 Mac 操作系统,自从最新的 Rails 版本以来,删除键不再起作用。

❯ rails -v
Rails 7.0.4
❯ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]

当我点击

delete
而不是删除字符和当前光标位置时,它会插入
^[[3~

我不知道如何解决这个问题。之前的rails版本没有这个问题。

ruby-on-rails irb terminfo
2个回答
2
投票

好吧,这是 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

0
投票

事实证明这有帮助:

nano ~/.irbrc
IRB.conf[:USE_READLINE] = true

但是,作为副作用,输入行的语法突出显示被关闭。我接受这一点,因为我的删除键更重要。

© www.soinside.com 2019 - 2024. All rights reserved.