Выполнение операторов с начальными точками в pry

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(" ")

Есть ли способ обойти это? Я согласен с любым из нижеперечисленных:

  • Интерпретируйте . как системную команду, только если перед ней нет начальных пробелов.
  • Изменение на какой-то другой неясный разделитель вместо . для системной команды
  • В крайнем случае: системные команды полностью отключены — я нечасто использую эту функцию.

person lorefnon    schedule 13.01.2016    source источник


Ответы (1)


Как указано в внутренней вики Pry, у вас есть два варианта:

  1. Вы можете либо поставить перед своей командой точку с запятой, чтобы Pry ее проигнорировал (на мой взгляд, беспорядочно).
  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)>
person mech    schedule 13.01.2016
comment
Моя основная проблема связана с опробованием блоков кода из моей кодовой базы в REPL. Если мне нужно отредактировать отдельные строки, я могу изменить положение точек. - person lorefnon; 13.01.2016
comment
Установка command_prefix не решает проблему для меня. Можете ли вы попробовать пример в моем вопросе - если он работает, какую версию pry вы используете. Я добавил его в свой .pryrc .. выполнение напрямую в REPL тоже не работает. - person lorefnon; 13.01.2016
comment
Да, это не работает для строк, начинающихся с точек, о чем и идет речь. - person Ryan Taylor; 27.05.2016