Я переглянув документацію, і я повинен би сказати, що не міг знайти способу виявлення та відображення поточного режиму vi-mode. Я сподіваюся, що у вас приємний сюрприз і хтось придумає рішення, але я точно не можу знайти спосіб зробити те, що ви просите.
Я думаю, що є спосіб це зробити, але це надмірна надмірність для крихітного роздратування, і я не думаю, що це ви мали на увазі, коли ставили це питання. Якщо це правда, перестаньте читати зараз і насолоджуйтесь своїм життям.
ОТО, якщо це справді ваш вихованець, і це зводить вас з розуму, і ви насправді абсолютно відчайдушно хочете зіткнути цю проблему, ось моя ідея, як це зробити:
- Отримайте копію розширеного програмування в середовищі UNIX (R) від W. Richard Stevens.
- Прочитайте глави про потоки та введення / виведення терміналу.
- Завантажте вихідний код у вищезгадану книгу, яка містить приклад потоку, який може бути нанесений на термінал.
- Реалізуйте комбінацію клавіш Esc (або обидва режими зміни клавіш) та вкажіть це за допомогою дзвоника або фонової маніпуляції поточного рядка.
Якщо коротко, Unix реалізує термінал вводу / виводу як повнодуплексний потік вводу / виводу між драйвером пристрою та користувацьким процесом, в який можна вставити модулі. Він організований у вигляді стека, тому ви можете прошаркувати стільки потоків, скільки захочете. Сума введених потоків створює вашу термінальну поведінку вводу / виводу.
Коли символ введений, перший модуль отримує його для огляду та передачі (якщо він хоче). Коли відповідь надходить у зворотному напрямку, вона знову отримує шанс перевірити та передати її. Ось так Ctrl-C отримує обробку на більш високому рівні до звичайної символьної клавіші.
Ви можете створити двійковий модуль, що реалізує модуль потоку, який при виклику працює безшумно на передньому плані, перевіряючи та передаючи всі натискання клавіш, виконуючи бажану дію на важливих вам натисканнях клавіш. Для всіх намірів і цілей це виглядатиме так, ніби ви працюєте над оболонкою. Ооо. Ви можете викликати цей двійковий файл в останньому (або першому чи будь-якому) рядку .tcshrc, і ви навіть не знаєте, що він є.
Там хороший праймер тут , але я не міг знайти багато на цю тему, напевно , тому , що повз його прем'єр.