You are currently viewing Сочетания клавиш в оболочке IPython

Сочетания клавиш в оболочке IPython

Если вы проводите какое-то время за компьютером, вы, вероятно, нашли применение сочетаниям клавиш в своем рабочем процессе. Наиболее известными, возможно, являются Cmd-C и Cmd-V (или Ctrl-C и Ctrl-V) для копирования и вставки в самые разнообразные программы и системы. Опытные пользователи, как правило, идут еще дальше: популярные текстовые редакторы, такие как Emacs, Vim и другие, предоставляют пользователям невероятный спектр операций с помощью сложных комбинаций нажатий клавиш.

Оболочка IPython не заходит так далеко, но предоставляет ряд сочетаний клавиш для быстрой навигации при вводе команд. На самом деле эти ярлыки предоставляются не самим IPython, а благодаря его зависимости от библиотеки GNU Readline: как таковые, некоторые из следующих ярлыков могут отличаться в зависимости от конфигурации вашей системы. Кроме того, хотя некоторые из этих ярлыков работают в ноутбуке на основе браузера, этот раздел в основном посвящен ярлыкам в оболочке IPython.

Как только вы привыкнете к ним, они могут быть очень полезны для быстрого выполнения определенных команд, не перемещая руки с «домашней» позиции клавиатуры. Если вы являетесь пользователем Emacs или у вас есть опыт работы с оболочками в стиле Linux, следующее будет вам очень знакомо. Мы сгруппируем эти ярлыки в несколько категорий: ярлыки навигации, ярлыкиввода текста, ярлыки истории команди другие ярлыки.

В то время как использование клавиш со стрелками влево и вправо для перемещения вперед и назад по линии вполне очевидно, существуют и другие варианты, которые не требуют перемещения рук из положения «дома» на клавиатуре:

Нажатие КлавишиЭкшен
Ctrl-aПереместите курсор в начало строки
Ctrl-eПереместите курсор в конец строки
Ctrl-b или клавиша со стрелкой влевоПереместите курсор на один символ назад
Ctrl-f или клавиша со стрелкой вправоПереместите курсор на один символ вперед

Ярлыки для ввода текста

В то время как все знакомы с использованием клавиши Backspace для удаления предыдущего символа, для достижения клавиши часто требуется небольшая гимнастика для пальцев, и она удаляет только один символ за раз. В IPython есть несколько ярлыков для удаления некоторой части текста, который вы вводите. Наиболее полезными из них являются команды для удаления целых строк текста. Вы поймете, что они стали второй натурой, если обнаружите, что используете комбинацию клавиш Ctrl-b и Ctrl-d вместо того, чтобы нажимать на пробел, чтобы удалить предыдущий символ!

Нажатие КлавишиЭкшен
Клавиша BackspaceУдалите предыдущий символ в строке
Ctrl-dУдалите следующий символ в строке
Ctrl-kВырезать текст от курсора до конца строки
Ctrl-uВырезать текст от начала строки до курсора
Ctrl-yВыдерните (т. е. вставьте) текст, который был ранее вырезан
Ctrl-tТранспонируйте (т. е. переключите) два предыдущих символа

Ярлыки истории команд

Возможно, наиболее эффективные ярлыки, обсуждаемые здесь, — это те, которые IPython предоставляет для навигации по истории команд. Эта история команд выходит за рамки вашего текущего сеанса IPython: вся ваша история команд хранится в базе данных SQLite в каталоге профиля IPython. Самый простой способ получить к ним доступ-это использовать клавиши со стрелками вверх и вниз для пошагового просмотра истории, но существуют и другие варианты:

Нажатие КлавишиЭкшен
Ctrl-p (или клавиша со стрелкой вверх)Доступ к предыдущей команде в истории
Ctrl-n (или клавиша со стрелкой вниз)Доступ к следующей команде в истории
Ctrl-rОбратный поиск по истории команд

Обратный поиск может быть особенно полезен. Напомним, что в предыдущем разделе мы определили вызываемую функцию square. Давайте перевернем нашу историю Python из новой оболочки IPython и снова найдем это определение. Когда вы нажмете Ctrl-r в терминале IPython, вы увидите следующее приглашение:

In [1]: 
(reverse-i-search)`':

Если вы начнете вводить символы в этом приглашении, IPython автоматически заполнит самую последнюю команду, если таковая имеется, которая соответствует этим символам:

In [1]:  
(reverse-i-search)`sqa': square??

В любой момент вы можете добавить дополнительные символы для уточнения поиска или снова нажать Ctrl-r, чтобы продолжить поиск другой команды, соответствующей запросу. Если вы следовали в предыдущем разделе, нажатие Ctrl-r еще два раза даст:

In [1]: 
(reverse-i-search)`sqa': def square(a):
    """Return the square of a"""
    return a ** 2

Как только вы найдете нужную команду, нажмите кнопку «Вернуться», и поиск завершится. Затем мы можем использовать полученную команду и продолжить наш сеанс:

In [1]: def square(a):
    """Return the square of a"""
    return a ** 2

In [2]: square(2)
Out[2]: 4

Обратите внимание, что Ctrl-p/Ctrl-n или клавиши со стрелками вверх/вниз также можно использовать для поиска в истории, но только путем сопоставления символов в начале строки. То есть, если вы наберете defи затем нажмете Ctrl-p, он найдет самую последнюю команду (если таковая имеется) в вашей истории, которая начинается с символов def.

Разные ярлыки

Наконец, есть несколько различных ярлыков, которые не вписываются ни в одну из предыдущих категорий, но тем не менее полезно знать:

Нажатие КлавишиЭкшен
Ctrl-lОчистить экран терминала
Ctrl-cПрервать текущую команду Python
Ctrl-dВыход из сеанса IPython

В частности, Ctrl-c может быть полезен, когда вы случайно запускаете очень длительную работу.

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