Мы можем использовать стрелки вверх и вниз для навигации по истории команд.
В некоторых IDE, таких как Matlab, если мы что-то вводим, а затем нажимаем клавиши со стрелками, мы прокручиваем только те команды истории, которые начинаются с того, что мы ввели. Это действительно удобно, но в терминале оболочки это не работает.
Есть ли способ получить подобную функцию в терминале оболочки? И какие еще советы по повышению эффективности использования терминала?
bash
shell
command-history
подветренный
источник
источник
fish
;)\e[5~
и\e[6~
, использования\e[A
,\e[B
.Ответы:
То, что вы ищете, это CtrlR.
Введите, CtrlRа затем введите часть команды, которую вы хотите. Bash отобразит первую соответствующую команду. Продолжайте печатать, CtrlRи bash будет циклически повторять предыдущие соответствующие команды.
Чтобы выполнить поиск в истории, введите CtrlSвместо этого. (Если у вас CtrlSэто не работает, это, вероятно, означает, что вам нужно отключить управление потоком XON / XOFF: для этого запустите
stty -ixon
.)Это задокументировано в разделе «Поиск» в
man bash
.источник
Ctrl-Q
выйти из замороженного состояния, если вы уже нажали,Ctrl-S
не отключив сначала управление потоком, и заморозили свой терминал.Разместите их в своем
~/.inputrc
:Они делают Page Upи Page Downведут себя, как вы хотите. (В некоторых дистрибутивах он уже настроен для вас.) Лично я нахожу эти способы более удобными, чем Ctrl+ Rили
history
.источник
~/.inputrc
или/etc/inputrc
или файл, на который ссылается переменная среды,$INPUTRC
является файлом конфигурации редактирования строки всего приложения, использующего readline, включая bash (вашу оболочку). Он имеет определенные встроенные возможности редактирования строк, включая эти два: в справочной странице bash найдите одно из этих ключевых слов, чтобы узнать больше.\e[5~
/\e[6~
- escape-последовательности, генерируемые клавишами Page Up / Down в большинстве эмуляторов терминала; чтобы увидеть его, запуститеcat
команду и затем нажмите эти клавиши (управляющий байт представлен в терминале как^[
, в inputrc как\e
).echo $INPUTRC
это пусто. Я использую Ubuntu 14.04"\e[A": history-search-backward
и"\e[B": history-search-forward
Помимо истории ^ r / ^ s i-search:
alt.вставляет последнее «слово» предыдущей команды в курсор. Повторите это, чтобы получить последнее слово от старых команд. (Но обратите внимание, что конечный текст
&
считается последним словом для фоновых команд).Это супер удобно для
mkdir foo
,cd
alt-dot. Даже быстрее , чем стрелка вверх, ^ а, альт-D (удаление вперед слово)cd
.Чтобы получить второе-последнее слово, используйте
esc
-
2
alt+.
(т. Е. Используйте числовой аргумент в стиле emacs дляalt+.
. Отрицательный счет с конца, положительный счет от начала.) Но обычно это больше проблем, чем стоит; в какой-то момент быстрее добраться до мыши и скопировать / вставить, или стрелку вверх и ^ w / ^ y ее часть (см. ниже).Если ваш терминал настроен правильно / правильно, ctrl-left и ctrl-right будут идти вперед / назад по словам. Если нет, то, по крайней мере, alt-b и alt-f сделают то же самое.
Ctrl- / это отмена. Вы можете использовать автоповтор для более эффективного удаления слов, если вы можете отменить, когда вы немного отклонитесь от нормы.
Более мощное смешивание / сопоставление команд происходит благодаря использованию kill-ring, который работает так же, как в Emacs. Ctrl-Y, чтобы вставить последний Ctrl-W / Ctrl-U / Ctrl-Backspace / Alt-D. alt-y для циклического перебора старого убитого текста.
Множество ctrl-w или что-то подряд делает запись в kill-ring. Используйте стрелку влево и вправо или что-то, чтобы разбить запись, если вы хотите удалить две вещи и вставить только одну позже.
Объединяя все это вместе, вы можете
alt+r
восстановить его до того, как вы удалили его часть.>
- перейти в конец истории (т. е. всю стрелку вниз), чтобы вернуться к команде, в которой вы находились.Другие интерактивные советы по использованию:
Включить
shopt -s globstar
, так что вы можете сделать**/*.c
(рекурсивный, включая текущий каталог). Иногда удобно для интерактивного использования, но обычноfind -name '*.c' -exec foo {} +
лучше.Если вы будете писать скрипты bash, вам будет удобно
shopt -s extglob
включить их и в интерактивных оболочках. Вы иногда находите применение для таких вещей , как ,*.!(c|h)
чтобы соответствовать файлам , которые не заканчиваются на .c или .h.Найти псевдонимы вы любите для
ls -l
,less
и все , что вы делаете много. (cp -i
,mv -i
иrm -I
это хорошо. Не имейте привычки зависеть от них, чтобы сделать выборочный rm. GNU rm's -I спрашивает один раз для всех аргументов.)Мне нравится
alias m=less
(м для «больше»). Яless
установил ,и .привязал к предыдущему / следующему файлу (lesskey
). По умолчанию используется последовательность нажатий нескольких клавиш, которую нельзя использовать с автоповторением.Мне нравится делать все внутри экрана GNU. Я считаю, что легче отслеживать пронумерованные окна, чем множество вкладок в Konsole (или любом другом эмуляторе терминала, который я пробовал). Если вы еще не знаете
screen
, изучите tmux, потому что он более новый и менее хитрый.Чтобы получить что-то похожее на функциональность открытия новой оболочки с тем же cwd, что и у другой оболочки, я использую пользовательский хук для cd / pushd / popd, который позволяет мне делать
cds 8
cd на любой каталог, который использует моя оболочка в экранном окне 8. Это работает даже для оболочек вне сеанса экрана, если только один сеанс экрана.источник
gnome-terminal
в Ubuntu 14.04, прежде чем я переключился на KDE. Соответствующая опция находится в настройках вашего терминала, esc-prefix vs high-bit и, возможно, некоторых других настройках. Некоторые из них не работают идеально для меня через SSH. (например, ctrl влево / вправо изменяет управляющий код для клавиши со стрелкой, и я5D
буквально появляюсь)Добавьте следующие строки в ваш
~/.inputrc
Это похоже на ответ egmont, но вместо использования Page Up и Page Down он использует escape-последовательности для Arrow Up и Arrow Down. Этот способ намного удобнее использовать на Mac.
источник
Я всегда склонен конфигурировать свои машины с большим значением HISTSIZE, чтобы он содержал более длинный список истории, а также HISTTIMEFORMAT со значением метки времени, чтобы я мог видеть, когда была выполнена команда.
источник
Средства, которые я обычно использую, - это объединить
history
команду сgrep
IE:
Это отобразит нумерованную историю команд, которые вы ввели, которые содержат эту команду, затем вы можете использовать:
повторить эту команду.
IE:
history | grep history
с последующим:
!571
повторю
history | grep history
источник
!
замена истории менее безопасна.Я ежедневно использовал 4 подсказки (и некоторые другие) в своем терминале bash:
Выполнить последнюю команду:
!!
Выполнить команду N из истории:
!N
Вывести последнюю команду, начиная с префикса из истории:
!prefix:p
Выполнить последнюю команду, начиная с префикса из истории:
!prefix
источник
Если вы можете использовать
zsh
вместоbash
вас cona, используйте для этого oh-my-zsh .Он содержит стрелку вверх вниз по истории вашей команды. Это позволяет также ту же навигацию, когда вы уже набрали текст (как Mathlab).
редактировать: он также содержит другие ориентированные на разработчиков вещи, такие как псевдонимы и темы. Эти дополнения делают дистрибутив больше и сложнее в использовании.
https://github.com/robbyrussell/oh-my-zsh
источник
oh-my-zsh
содержит тонны вещей. Вы могли бы также сказать: эта точная функция включена в этот дистрибутив, когда все, что вам нужно, это конкретный параметр или приложение.Добавьте следующий псевдоним в ~ / .bashrc
Использование:
h fire
получите список команд, содержащих огонь . илиh ^fire
получите список команд, начинающихся с огня .Это полезно, когда я хочу просматривать серию команд одновременно.
Кстати,
'"'"'
некрасиво, но я не смог найти других способов избежать одиночных кавычек в одинарных кавычках.источник
h="history | awk '{\$1=\"\"; print}'
должно работать. альтернативно создайте функцию и вызовите ее.