Як перезавантажити .inputrc?


98

Фон

Я чув, що модуль readline читає ~/.inputrcі саме так він змінює поведінку натискань клавіш у таких програмах, як bash.

Питання

Як я можу завантажити це після редагування, щоб побачити змінену поведінку, не перезавантажуючи свою термінальну програму?


8
Фон (не так) .
Денніс Вільямсон

3
Я прийшов сюди шукати, як завантажити .inputrc командою. superuser.com/q/419670/56544
dfrankow

1
@CaptainLepton Я це бачив. Термінал не такий, як оболонка. Виконання exec bashсеансу Bash замінить поточний сеанс оболонки новим сеансом Bash. xtermє терміналом.
Кусалаланда

1
@Kusalananda Дякую за роз’яснення. Це гарна ідея. Чи можете ви описати run> exec bash як запуск нової оболонки в поточному терміналі, а не перезапуск bash, як ви замінюєте попередній виконуваний файл?
Капітан Лептон

1
Так, немає можливості "перезапустити" поточний сеанс оболонки. Це один із способів зробити це. Використання рішення, яке дав @maxelost, - це інше.
Кусалаланда

Відповіді:


82

За замовчуванням C-x C-rприв’язаний до re-read-init-file.

Дивіться Bash Reference Manual для пояснення.


4
Це не працює для мене. Я спробував інше відображення у файлі .inputrc і також не пощастило: "\ eX \ eR": перечитати-init-файл Будь-які пропозиції?
Капітан Лептон

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і працюйте всередині цієї нової вкладеної оболонки (або запустіть новий термінал).


Я бачу, виправте мене, якщо я помиляюся, що 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.

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