2016-01-13 23 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

是的,這對於以句點開始的行不起作用,這就是問題所在。 –