You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rails控制台的Pry中无法粘贴多行代码的问题求助

Pry中粘贴多行代码时逐行执行报错的解决方法

问题概述

在Pry中粘贴多行代码时,Pry会逐行执行内容,导致换行后的方法调用(如.map(&:to_sym))被当作独立系统命令执行,进而触发语法错误。本人偏好使用Rubocop默认的EnforcedStyle: leading(方法调用换行在前),不接受修改代码风格的建议。

预期行为

粘贴多行代码后,Pry能识别为完整表达式并正确执行:

[1] pry(main)> %w[a b c]
.map(&:to_sym)
=> [:a, :b, :c]
[2] pry(main)>

实际行为

粘贴后代码被逐行执行,第二行触发报错:

[1] pry(main)> %w[a b c]
=> ["a", "b", "c"]
[2] pry(main)> .map(&:to_sym)
sh: -c: line 0: syntax error near unexpected token `&'
sh: -c: line 0: `map(&:to_sym)'
Error: there was a problem executing system command: map(&:to_sym)
[3] pry(main)>

环境信息

  • iTerm2 Build 3.5.2(Mac自带Terminal应用中问题相同)
  • asdf版本管理器
  • Rails 7.0.2.3(单独使用全局Pry时问题依旧)
  • Pry 0.14.1(无自定义配置文件)
  • pry-rails 0.3.9(单独使用全局Pry时问题依旧)
  • 从旧MacBook Air M1迁移到新MacBook Pro M2,未使用Migration Assistant,旧设备可正常实现预期行为,新设备~/.zshrc仅asdf安装方式有差异

解决方案

1. 配置Ruby的Readline依赖

Pry的多行输入依赖readline库,新设备可能缺少正确的配置:

  • 安装rb-readline gem:
    gem install rb-readline
    
  • 在~/.pryrc中添加以下内容,确保Pry启动时加载该库:
    require 'rb-readline'
    

2. 启用Zsh的括号粘贴模式

Zsh默认粘贴行为可能拆分多行输入,需启用bracketed-paste:

  • 在~/.zshrc中添加:
    autoload -Uz bracketed-paste-magic
    zle -N bracketed-paste bracketed-paste-magic
    
  • 重新加载配置:
    source ~/.zshrc
    

3. 修复asdf Ruby环境的readline依赖

由于新旧设备asdf安装方式有差异,需确保Ruby编译时绑定正确的readline:

  • 先安装brew版readline(未安装则执行):
    brew install readline
    
  • 重新安装Ruby并指定readline路径:
    RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)" asdf install ruby <你的Ruby版本号>
    

4. 临时 workaround:使用Pry多行输入模式

粘贴前输入multiline或按Ctrl+V进入多行模式,粘贴完成后按Ctrl+D执行:

[1] pry(main)> multiline
Entering multi-line mode. Press Ctrl+D to execute.
[1] pry(main)* %w[a b c]
[1] pry(main)* .map(&:to_sym)
[1] pry(main)* 
=> [:a, :b, :c]
[2] pry(main)>

内容的提问来源于stack exchange,提问作者Alexey Zalyotov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:49:51