Шукайте попередню команду з тим самим префіксом, коли я натискаю вгору під запитом оболонки


19

Виходячи зі світу FreeBSD, я хочу змусити термінал Linux вести себе як FreeBSD, особливо версію 9.1, в основному, коли ви набираєте cdтермінал і натискаєте стрілку «вгору», ви можете переглядати всі команди в історії, починаючи з cdчого змушує вас здобувати багато часу.

Я не знаю, як увімкнути цю функцію в Linux Debian або CentOS, які змушують мене набрати ціле, будь-хто, будь ласка, допоможе.


7
Це функція оболонки, а не терміналу. Яку оболонку ви використовуєте у FreeBSD? Можливо, ви зможете отримати ту саму (або подібну) оболонку для Linux.
1313

Я використовую оболонку tcsh.
Абделіла Бенау

2
Я використовую tcsh в OS X і не мав такої зручної поведінки ... Після деяких пошуків я виявив, що можу це ввімкнути, ввівши bindkey -k (up|down) history-search-(back|for)wardмою, .tcshrc як описано тут . Класно!
Гаррет Олбрайт

Відповіді:


34

Додати до наступного ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

Пояснення

~/.inputrc- це файл конфігурації для лінії GNU . Багато оболонок, включаючи bashта tcshвикористовують readline для редагування командного рядка. Два вище рядки підкажуть читати лінію, щоб викликати функцію пошуку історії, коли зустрічаються послідовності виходу для клавіші зі стрілкою вгору ( \e[A) та клавіші зі стрілкою вниз ( \e[B).


Мені подобається додати F12, щоб поставити останнє слово останнього рядка в кінець поточної команди. Last wordчасто це шлях, який я хочу спробувати у різних затхлих кліше. І Shift F12, щоб повернути мене до редагування останнього рядка з самого початку. ~/.inputrcє зручним інструментом.
jalanb

Для Shift F12 потрібен режим vi .
jalanb

6

Що відбувається - FreeBSD та Linux використовують різні оболонки за замовчуванням. FreeBSD за замовчуванням tcsh , який мав кращі інтерактивні функції, ніж bash в минулому (але bash наздогнав), але помітно гірші функції сценарію .

Найпростішим способом отримати середовище, до якого ви звикли, було б переключити оболонку на tcsh в Linux. Якщо tcsh встановлено загальносистемно (якщо це не так, попросіть системного адміністратора встановити його), запустіть, chsh -s tcshщоб змінити стандартну оболонку.

Крім того, ви можете налаштувати bash для цієї команди, до якої ви звикли. За замовчуванням стрілки Upта Downстрілки переміщуються між усіма командами історії, а не лише тими, які починаються з введеного префікса. Щоб змінити це на поведінку, до якої ви звикли, .bashrcвведіть наступні рядки у файл ініціалізації bash, який знаходиться у вашому домашньому каталозі. Або запускайте . ~/.bashrcабо запускайте нову оболонку, щоб перечитати файл ініціалізації.

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

Послідовності евакуації - це те, що ваш термінал надсилає оболонці при натисканні клавіші зі стрілкою. Upможе бути \eOA(втеча, O, A) або в \e[Aзалежності від вашого терміналу, а так само для Down.

За замовчуванням bash пропонує різні прив'язки клавіш для пошуку історії команд. Ви можете натиснути Ctrl+ R, а потім ввести деякі символи для пошуку команди, що містить цю підрядку в будь-якому місці рядка. Натисніть Ctrl+, Sщоб перейти вперед замість назад. Пошук поступовий (тобто за вашим типом); Alt+ Pі Alt+ Nнадають вам некроковий пошук.

Замість bash та tcsh ви можете перейти на zsh, який має деякі акуратні риси, які не зустрічаються в інших оболонках . Zsh за замовчуванням має Ctrl+ Rі Ctrl+ S, як bash. Щоб отримати Upі Downподобатися вам у tcsh, поставте наступні рядки ~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

Якщо ви хочете використовувати одну і ту ж оболонку скрізь, ви також можете використовувати bash або zsh на FreeBSD за умови встановлення порту (знову ж таки, запитайте свого системного адміністратора).


1

tcshдоступний для більшості дистрибутивів Linux. Спробуйте встановити tcshпакет, а потім запустіть, chsh -s /bin/tcshщоб зробити його оболонкою за замовчуванням.


1
Або ви можете розглянути можливість переходу на bash (я це зробив).
Кіт Томпсон

1

Інші відповіді стосуються цього, але якщо ви хочете більше, подивіться на https://github.com/zsh-users/zsh-history-substring-search

Prezto ( https://github.com/sorin-ionescu/prezto ) також сповнений zsh смакоти.


Дякую за вашу відповідь, до речі, я досі не бачу, які переваги мають zsh над bash чи tcsh?
Абделіла Беноу

1
Гум, ти можеш робити майже всі основні речі у всіх цих оболонках. Я використовую zsh через досить добре підтримуваний пакет презто (можливо, велика зміна гри), правильне підказка (що є ексклюзивною функцією) і тому, що він відчуває себе більш відполірованим, ніж баш (конфігурація та інше).
Фуад Сауд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.