2016-01-13 58 views
1

Pry将领导.的命令解释为系统命令并将其传递到shell。然而,这阻止了我执行代码块的代码行数超过.,这在我的代码中非常频繁。在pry中执行包含前导句点的语句

在IRB类似下面工作正常:

2.2.3 :001 > begin 
2.2.3 :002 >  "hello world" 
2.2.3 :003?>  .split(" ") 
2.2.3 :004?>  .map(&:upcase) 
2.2.3 :005?> end 
=> ["HELLO", "WORLD"] 

在撬但是:

[6] pry(#<MailFetcherService>)> begin 
[6] pry(#<MailFetcherService>)* "hello world" 
[6] pry(#<MailFetcherService>)* .split(" ") 
sh: -c: line 0: syntax error near unexpected token `" "' 
sh: -c: line 0: `split(" ")' 
Error: there was a problem executing system command: split(" ") 

是否有办法来解决此问题?我可以使用以下任何一种方式:

  • 只有当系统命​​令前面没有前导空格时,才会将.解释为系统命令。
  • 更改为其他模糊分隔符而不是.用于系统命令
  • 最后的方法:系统命令完全禁用 - 这不是我经常使用的功能。

回答

0

Pry's internal wiki概述,你有两个选择:

  1. 您可以用分号前缀你的命令所以撬忽略它(凌乱,在我看来)。
  2. 您可以更改config.command_prefix属性(默认情况下为空字符串""),这将使您无论何时想要使用系统命令都需要添加新的command_prefix

的#2示例:

pry(main)> Pry.config.command_prefix = "%" 
=> "%" 
pry(main)> ls -l 
NameError: undefined local variable or method `l' for main:Object 
from (pry):2:in `<main>' 
pry(main)> %ls 
locals: _ _ex_ _pry_ _in_ _out_ _file_ _dir_ 
pry(main)> 
+0

我的主要问题是从我的代码为基础的REPL尝试的代码块。如果我必须编辑单行,我不妨改成点的位置。 – lorefnon

+1

设置command_prefix并不能解决我的问题。你能否在我的问题中尝试一下这个例子 - 如果它起作用,你正在使用的是什么版本的pry。我已经将它添加到我的'.pryrc'中。直接在REPL中执行也不起作用。 – lorefnon

+0

是的,这对于以句点开始的行不起作用,这就是问题所在。 –