iPython як історія команд для оболонки


24

Для тих із вас, хто не займається програмуванням python на ubuntu, ipython є оболонкою python на стероїдах, але він має таку дивовижну особливість, що він не лише автоматично завершується на основі відомих імен (тобто так само, як баш робить, коли ви натискаєте вкладку), але якщо ви почнете вводити команду і натиснути вгору, вона прокручується не через усю історію (як bash), а лише через останні команди, що починалися з тієї ж строки летерів.

Тож якщо ви виконали якусь довгу команду, на кшталт якої scp -r -P 8000 -l user server.com:~/dir/to/copy ./слід кілька інших команд. Якщо ви почали набирати текст scpі натискати вгору, bash відображатиме команду, показану раніше, а не просто прокручувати всю історію.

Чи є таке розширення для bash? чи є якась оболонка, яка пропонує такий тип функції?

Відповіді:


26

У Bash є і ця функція, але вона не включена за замовчуванням. Ви можете прив'язати його до курсору вгору / вниз, вставивши це в ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Я вважаю за краще прив’язати його до Ctrl+ вгору / вниз замість:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

редагувати: Щоб зберегти ctrl+leftі ctrl+rightрухатись цілими словами назад або вперед, також додайте ці рядки у ~/.inputrcфайл:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Використовуючи цю пораду, тепер я не можу використовувати Ctrl + вліво / вправо в терміналі, щоб перейти до наступного / попереднього слова, що руйнує для мене цілі. Може, є вирішення?
зета

@zetah Я змінив відповідь на своє рішення щодо перенесення слів
Wim

1
Щоб зберегти всі параметри за замовчуванням, ви також можете додати $include /etc/inputrc, бажано, у першому рядку.
Туліо Касагранде

9

Спробуйте натиснути Ctrl+ Rта ввести кілька літер. Він працює і в зворотному порядку.


6

І не забувайте про фантастичні ярлики розширення історії в баші. 1

Я розміщую кілька уривків із сторінки сторінки, якщо ви їх не татуювали на руці (або запам'ятали).

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

Я часто використовую можливість посилатися на останнє 'слово' попередньої команди. Наприклад,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

В обох випадках тут !$сірники /foo/shmoo/adir.horribilus.foo.


1 ... які були взяті з csh. Щоб пом'якшити обсяг крадіжок функції bash, йдеться на сторінці bash man

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

Отже, це "схоже". Будь-яке з цього може зламатись cshабо tcsh. Або який би csh нащадок ви не використовували через те, що це не так чудово, як bash.


0

Існує альтернатива схожа на те , що @ АК2 згадувалося вище , але вам не потрібно створювати новий файл .inputrc.

Натомість, якщо у вас є дозволи sudo, ви можете ввімкнути це у файлі / etc / inputrc. У цьому файлі є різні налаштування клавіатури, включаючи функцію пошуку історії (принаймні для 18.04). Витяг з / etc / inputrc:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

Просто скаментуйте два нижні рядки за допомогою редактора файлів sudo (наприклад, $ sudo vim), і новий термінальний сеанс матиме функцію пошуку історії (для всіх користувачів).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.