Для тех из вас, кто не занимается программированием на Python в Ubuntu, ipython - это оболочка Python на стероидах, но у него есть удивительная особенность, заключающаяся в том, что он не только выполняет автозаполнение на основе известных имен (то есть, как Bash делает, когда вы нажимаете tab), но если вы начнете вводить команду и нажмете вверх, она прокручивает не всю историю (например, bash), а только последние команды, которые начинались с одной и той же строки символов.
Итак, если вы выполнили какую-то длинную команду, например scp -r -P 8000 -l user server.com:~/dir/to/copy ./
, а затем несколько других команд. Если вы начнете печатать scp
и нажмете, bash отобразит команду, показанную ранее, а не просто прокрутит всю историю.
Есть ли такое расширение для bash? или есть какая-нибудь оболочка, которая предлагает такую функцию?
Bash действительно имеет ту функцию также, но это не включено по умолчанию. Можно связать его с курсором/вниз путем засовывания этого в ~/.inputrc
:
"\e[A": history-search-backward
"\e[B": history-search-forward
Я предпочитаю связывать его с Ctrl+up/down вместо этого:
"\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 kbd> + R kbd> и ввести несколько букв. Он работает и в обратном порядке.
И не забывайте фантастические ярлыки расширения истории в bash. 1 sup>
Я публикую некоторые выдержки из справочной страницы, если вы не сделали татуировку на руке (или не запомнили ее).
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 sup> ..., которые были взяты из csh , Чтобы уменьшить масштабы кражи функций bash, на странице руководства bash написано
The shell supports a history expansion feature that is similar to the
history expansion in csh.
Итак, это «похоже». Все это может нарушиться в csh
или tcsh
. Или какой потомок csh вы не используете из-за того, что он не так прекрасен, как bash
.
Существует альтернатива, подобная тому, что @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 энергия), и новый терминальный сеанс будет иметь функцию поиска истории (для всех пользователей).