Как перезапустить серию операторов в одном и том же порядке в оболочке? - PullRequest
2 голосов
/ 15 октября 2011

Бьюсь об заклад, вы столкнулись с той же проблемой, что и я.Я часто использую shell (s).Для python, ruby (irb), mongo ... Я использую какой-нибудь ярлык, например, crt+a, чтобы идти в начале, crt+e в конце, crt+k, чтобы очистить до конца.

Но я скучаю по одной вещи.Когда вы определяете многострочный блок в оболочке ruby ​​или python, и вы что-то переписываете в одном утверждении, вам приходится переписывать почти все, и история, приносимая up arrow, становится беспорядочной, когда у вас более 3 строк.

Какие-нибудь советы, чтобы сделать это менее болезненным?

Ответы [ 4 ]

3 голосов
/ 16 октября 2011

Pry (Ruby REPL) был разработан, чтобы сделать подобные вещи менее болезненными. Есть несколько вариантов решения этой ситуации:

(1) Используйте поправочную линию , чтобы исправить линию.

enter image description here

(2) Сброс текущего буфера ввода в редактор с помощью команды edit , изменения, внесенные в редакторе, затем возвращаются в сеанс Pry после сохранения / выхода.

(3) Используйте hist --replay , чтобы воспроизвести и затем исправить строки в тексте REPL.strong

Из этих опций я обычно использую amend-line, если это простая ошибка, и edit, если она более сложная.

Веселитесь !!

1 голос
/ 15 октября 2011

Для ruby ​​посмотрите, работает ли pry для вас: http://pry.github.com

pry является альтернативой irb и имеет довольно гибкую команду исторических для извлечения и воспроизведения истории.Это дает гораздо больший контроль над изменением многострочных операторов.Посмотрите эту суть, чтобы понять, что вы можете сделать с pry: https://gist.github.com/972057

1 голос
/ 15 октября 2011

Найдите текстовый редактор, который может отправлять регионы кода в сеанс Python, Ruby или Mongo. Emacs может сделать это; Я уверен, что vim и другие редакторы тоже могут это сделать.

Таким образом, вы можете редактировать и сохранять свою работу, но при этом использовать интерактивную оболочку.

Ниже приведен пример, где random_pick определяется в текстовом файле, регион выбирается и отправляется на IPython нажатием Ctrl-c Ctrl-.. Он отображается в IPython на строке, которая начинается с In [5]:. Следующая строка показывает, что IPython теперь знает о random_pick.

enter image description here


Для IPython (в отличие от оболочки Python по умолчанию) также существует %cpaste, который позволяет вырезать и вставлять многострочные блоки кода в оболочку:

In [54]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:def random_pick(choices,probs):
    cutoffs=np.cumsum(probs)
    idx=cutoffs.searchsorted(random.uniform(0,cutoffs[-1]))
    return choices[idx]
--
:::::::::

В [55]:

0 голосов
/ 15 октября 2011

Для Python просто используйте IDLE, который поставляется вместе с ним.Если вы поместите курсор в многострочном операторе в окне терминала и нажмете Enter, весь оператор копируется в строку ввода для редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...