Як змінити завершення історії bash, щоб завершити те, що вже є на лінії?


133

Кілька місяців тому я знайшов команду, яка зробила мою історію башів автоматичною завершенням того, що вже є в рядку, коли натискати стрілку вгору:

$ vim fi

Натисніть

$ vim file.py

Я хотів би встановити це на своєму новому комп’ютері, оскільки це економить багато часу при збереженні великої історії. Проблема полягає в тому, що я не можу за все життя пам'ятати, де це було згадано, і читання нескінченних посилань та підручників, на жаль, теж не допомогло.

Хтось знає команду?

Відповіді:


223

Напевно, щось подібне

# ~ / .inputrc
"\ e [A": історія-пошук-назад
"\ e [B": історія-пошук вперед

або рівнозначно,

# ~ / .bashrc
якщо [[$ - == * i *]]
тоді
    прив’язати "" \ e [A ": історія-пошук-назад"
    прив’язати "" \ e [B ": історія-пошук-вперед"
фі

(оператор if перевіряє інтерактивний режим)

Зазвичай вгору та вниз пов'язані функції Readline previous-historyта next-historyвідповідно. Я віддаю перевагу прив’язувати PgUp / PgDn до цих функцій, а не витісняти нормальну роботу вгору / вниз.

# ~ / .inputrc
"\ e [5 ~": історія-пошук-назад
"\ e [6 ~": історія-пошук вперед

Після зміни ~/.inputrcперезапустіть оболонку або скористайтеся Ctrl+ X, Ctrl+, Rщоб повідомити її, щоб перечитати ~/.inputrc.


До речі, якщо ви шукаєте відповідну документацію:

Bash використовує бібліотеку Readline GNU для запиту оболонки та історії.


Дякую за вашу відповідь. Це здається знайомим, але, на жаль, не працює для мене. Поміщення його у .inputrc нічого не змінює, а введення .bashrc зупиняє стрілки робити щось. Будь-які ідеї?
blokkie

Не звертай уваги. історія-повна- * не існує; існують лише функції історії пошуку- *. Дякую!
blokkie

Ага, я чітко помилково вписав перші два приклади… Хоча останній був правильним. Я це виправлю.
ефеміент

@ user1037114: це питання в самому собі, вам слід задати його на власному дописі.
kamaradclimber

Це виправляло для мене стрілки вгору / вниз, використовуючи режим vi в bash. Зверніть увагу, я повинен натиснути "Esc" (командний режим), щоб він працював.
Кріс

5

Оновіть .inputrc за допомогою наступного:

"\C-[OA": history-search-backward
"\C-[[A": history-search-backward

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward

4
Що це за ключі?
Кріс

Я не знаю, що конкретно ці ключі, але ця відповідь зафіксувала цю функціональність для мене, коли клавіші вгору та вниз не здійснювали пошук історії під час використання tmux та st-терміналу на X11.
razzintown

1
@razzintown прп ви , ймовірно, set enable-keypad onдля delключа для правильної роботи ( чаво ). Коли клавіатура знаходиться на клавішах зі стрілками, є "\C-[OA"і "\C-[OB""\C-[OC"і "\C-[OD"). Я пояснив відповідь нижче, щоб уточнити це.
MauricioRobayo

@Chris Це клавіші зі стрілками вгору та вниз, а в режимі ANSI - стрілки вгору та вниз. Дивіться мою відповідь нижче.
MauricioRobayo

3

Якщо set enable-keypad onу вас, ~/.inputrcяк можуть бути, деякі користувачі st ( без простого терміналу ), майте на увазі, що клавіші зі стрілками знаходяться в режимі клавіатури. Ubuntu поставляється з цим корисним /usr/share/doc/bash/inputrc.arrows:

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

Тож я не впевнений, чи потрібні вам всі, але це може не зашкодити мати у вашому ~/.inputrc:

# Arrow keys in keypad mode
"\C-[OA": history-search-backward
"\C-[OB": history-search-forward
"\C-[OC": forward-char
"\C-[OD": backward-char

# Arrow keys in ANSI mode
"\C-[[A": history-search-backward
"\C-[[B": history-search-forward
"\C-[[C": forward-char
"\C-[[D": backward-char

Це також на тій же темі: Мої клавіші курсору не працюють, а також цей xterm: спеціальні клавіші


1

Використовуйте це у своєму .zshrc :

bindkey '^[OA' history-search-backward
bindkey '^[OB' history-search-forward

Щоб перезавантажити source ~/.zshrcабо перезапустити термінал.

Джерело: https://superuser.com/a/418299/71680


Що для мене спрацювало на zsh, це параметр, вказаний у вихідному посиланні: bindkey '\ e [A' історія-пошук-назад bindkey '\ e [B' історія-пошук вперед
Майкл Мейсі

-3

Можливо, вам буде потрібно ввімкнути bash.

Перевірка

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

щоб побачити, чи є джерело будь-якого з вищезазначених файлів /etc/bash_completion. тобто

. / etc / bash_completion

Якщо /etc/bash___completionжоден з перерахованих вище файлів не надається, вам потрібно буде додати його до одного з них.

Якщо ви хочете, щоб всі користувачі bash на вашій машині мали завершення bash, джерело /etc/bash_completionз /etc/bash.bashrc.

Якщо ви просто бажаєте завершити баш, джерело /etc/bash_completionвід вашого ~/.bashrc.


2
Завершення вкладки є приємним, але не таким, як нагадування історії, про що просив оригінальний плакат.
ефеміент
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.