2009-02-24 1 views
3

Метод обратного i-поиска в bash полезен, но он не похож на большинство других команд bash, поскольку он, похоже, связан с привязкой клавиш (Ctrl + R). Как пользователь может инициировать это средство, используя вместо него псевдоним или команду ввода?альтернативный способ запуска обратного i-поиска без нажатия ctrl + r в bash

+0

Это интерактивная команда, поэтому она должна быть связана чем-то. Вы ищете расширение/замену истории? –

+0

В основном я ищу идентичное поведение Ctrl-R, но с возможностью ввода его вместо того, чтобы запускать его с помощью этой точной комбинации клавиш. Ничего необычного, просто эргономика. – dreftymac

ответ

4

Функция обратного i-поиска фактически является функцией readline (reverse-search-history), а не встроенной функцией bash (man builtin или см. builtin commands in the bash reference manual). Насколько я знаю, нет способа вызвать функцию readline вне привязки к ключу.

Вы можете увидеть все привязки клавиш readline к этой функции с помощью «bind -l -p». Список bindable readline commands можно найти в справочном руководстве.

Вы всегда можете использовать команду history, чтобы получить список истории и использовать grep, чтобы найти то, что вы ищете. Сам я считаю, что это будет полезно:

alias hists="history | grep -v '^ *[0-9]* *hists' | grep [email protected]" 

Когда я бегу hists something получить список всех команд, матчи something. Все, что мне нужно сделать, это сделать! #, Чтобы запустить команду. Например:

bash-3.2$ hists emacs 
    30 emacs 
    128 emacs 
    129 emacs 
    204 emacs 
    310 emacs .bash_history 
    324 emacs Documents/todo.txt 
bash-3.2$ !324 

Это не совсем то, что вы ищете, но так близко, как я могу это сделать.

+0

История grepping - это именно то, что я начал использовать Ctrl-R, чтобы уйти .... хороший ответ в любом случае, хотя – dreftymac

4

Если вы смотрите на страницы руководства для bash или истории (3readline) в разделе «Расширение истории»> «Обозначения событий», вы видите команды для выполнения этого типа вещей.

!?prof? 

будет отображать самую последнюю команду, содержащую «prof», и выполнить ее немедленно. Если вы хотите напечатать команду без его выполнения, вы можете добавить «: р»

!?prof?:p 

Чтобы изменить команду в командной строке, используя приведенный выше пример, тип:

!?prof 

(не нажимайте кнопку ввода) и нажмите M-^

Они используют расширительную установку bash. Они получают самый последний матч.

Если вы хотите писать сценарии или псевдонимы, посмотрите на странице man bash во встроенных командах «fc» и «history» (-p или -s). Также «shopt -s histreedit».

Вот пример псевдоним:

alias dothis='`history -p "!?jpg?"`' 

(те обратные кавычки только внутри одиночных кавычек).

С некоторыми из этих команд вы можете сделать несколько «старых/новых» и других вещей.

Смежные вопросы