Улучшенная функциональность автозаполнения терминала (аналогично Matlab)

Если кто-то из вас когда-либо использовал Matlab, вы могли заметить функциональность командного окна в этой программе. Интересно, можно ли включить те же функции в Mac Terminal.

Это работает следующим образом: предположим, вы использовали две команды ранее в этом сеансе терминала. Сначала вы использовали a, cd ~а затем a ls -la.

В каждом терминале * nix, включая Mac, если вы нажмете Up Arrow, сначала отобразится ls -laкоманда, а если вы нажмете ее дважды, cd ~команда. Отлично. Но в Matlab, если вы сначала наберете букву , cа затем нажмете Up Arrow, она не покажет вам ls, а вместо этого перейдет непосредственно к cd ~. Это экономит много времени, когда у вас есть большие команды и длинный список ранее использовавшихся команд.

Является ли это возможным?

Ответы (6)

В оболочке Bash вы можете нажать Control+ R, чтобы выполнить обратный интеллектуальный поиск в истории. Начните вводить команду, и оболочка автоматически дополнит ранее введенные команды.

Затем вы можете либо нажать Enter, чтобы выполнить команду еще раз, либо использовать клавишу со стрелкой влево или вправо, чтобы отредактировать команду, либо продолжать нажимать Control+ R, чтобы просмотреть другие возможные варианты завершения.

Обратный интеллектуальный поиск

Сохраните это как ~/.inputrc:

# make the up and down arrows cycle through commands that match the start of a line
"\e[A": history-search-backward
"\e[B": history-search-forward

Опция-up будет \e\e[Aи control-p \C-p. Вы можете увидеть управляющие последовательности других комбинаций клавиш, нажав control-v.

Для пользователей, у которых еще нет ~/.inputrc, просто создайте его.
"\e[A": команда не найдена

Еще одна вещь, которую вы можете сделать, это ввести, !а затем первую букву, и она найдет самую последнюю. IE: cd ~можно получить доступ с помощью!c

Это особенность оболочки. Control-R сделает то, что вы описываете, но переход на более современную оболочку даст вам гораздо больше. Взгляните на Z-shell (zsh), он требует некоторого обучения, но он очень мощный.

Я думаю, вы имеете в виду Control-R.

zsh будет выполнять команды точно так же, как в вашем примере. Вам даже не нужно ничего делать, кроме как использовать его для своей оболочки.

Добавьте их в свой .cshrc (если вы используете tcsh) --

  bindkey -k up history-search-backward
  bindkey -k down history-search-forward

Затем выполните source ~/.cshrc, чтобы получить именно ту функциональность, которую вы описываете.

Я не знаю, есть ли эквивалент .profile.