在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-readlinegem: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
相关产品推荐
相关产品推荐

