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


24

Для тех из вас, кто не занимается программированием на Python в Ubuntu, ipython - это оболочка Python на стероидах, но у него есть удивительная особенность, заключающаяся в том, что он не только выполняет автозаполнение на основе известных имен (то есть, как Bash делает, когда вы нажимаете Tab), но если вы начнете набирать команду и нажмете вверх, она прокручивает не всю историю (например, 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

И не забывайте фантастические ярлыки расширения истории в bash. 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 написано

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

Итак, это «похоже». Любое из этого может сломаться cshили tcsh. Или какой потомок csh вы не используете из-за того, что он не так прекрасен, как bash.


0

Существует альтернатива, аналогичная той, что упоминалась выше @ ak2 , но вам не нужно создавать новый файл .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.