Как перезагрузить .inputrc?

98

Фон

Я слышал, что модуль readline читает ~/.inputrcи именно так он меняет поведение нажатий клавиш в таких программах, как bash.

Вопрос

Как я могу перезагрузить это после редактирования, чтобы увидеть измененное поведение без перезапуска моей терминальной программы?

Капитан лептон
источник
8
Фон (не ошибаюсь) .
Деннис Уильямсон
3
Я пришел сюда в поисках, как загрузить .inputrc с помощью команды. superuser.com/q/419670/56544
13
1
@CaptainLepton Я видел это. Терминал не совпадает с оболочкой. Выполнение exec bashв сеансе Bash заменит текущий сеанс оболочки новым сеансом Bash. xtermэто терминал.
Кусалананда
1
@Kusalananda Спасибо за разъяснения. Это хорошая идея. Не могли бы вы описать запуск> exec bash как запуск новой оболочки в текущем терминале, а не перезапуск bash, когда вы заменяете свой предыдущий исполняемый файл?
Капитан Лептон
1
Да, нет способа «перезапустить» текущий сеанс оболочки. Это один из способов сделать это. Использование решения, которое дал @maxelost, другое.
Кусалананда

Ответы:

82

По умолчанию C-x C-rпривязано к re-read-init-file.

См. Справочное руководство Bash для объяснения.

maxelost
источник
4
Это не работает для меня. Я попробовал другое сопоставление в файле .inputrc, и тоже не повезло: "\ eX \ eR": re-read-init-file Есть предложения?
Капитан Лептон
6
@Captain На самом деле, он делает, за исключением того, что не очищает нажатия клавиш, которые были удалены в то же время. Например, если вы добавите их, они будут загружены. Ваше единственное решение для этого - новая bash -l(оболочка, которая ведет себя как оболочка входа в систему), которая недавно инициализируется.
Даниэль Бек
Я редактировал, /etc/inputrcно у меня был почти пустой, ~/.inputrcкоторый мешал использовать один в /etc/. Удаление ~/.inputrcзаставило это прочитать /etc/inputrcи сделать мои изменения активными.
Malvineous
1
@ Malvineous Я был пойман этим раньше ... если вы добавите $include /etc/inputrcв начало ~/.inputrc, это позволит избежать этой проблемы.
mwfearnley
53

Вы также можете перезагрузить новые записи из командной строки, используя bind -f ~/.inputrc. Это загрузит записи в .inputrc. Обратите внимание, что он просто выполняет загрузку, а не «перезагрузку» - поэтому он не сбрасывает строки, которые вы удалили из .inputrc.

Чтобы быстро протестировать с чистого листа, просто запустите, а bashзатем поработайте внутри этой новой вложенной оболочки (или запустите новый терминал).

studgeek
источник
Я вижу, поправьте меня, если я ошибаюсь, это bind -fдействительно принимает только имя файла, а не файл, поэтому что-то вроде bind -f <(echo 'one line with ~/.inputrc syntax')(или, тривиально, bind -f <(cat ~/.inputrc)) не будет работать. Это немного раздражает. Вы знаете, что я мог сделать в этом отношении?
Энрико Мария Де Анжелис
10

В .inputrc сначала выберите привязку, а после привязки re-read-init-fileфункцию:

set editing-mode vi
"\C-x\C-r": re-read-init-file

Нажмите CTRLи x, отпустите оба, нажмите CTRLи r.

Антонио Бардацци
источник