Я просмотрел документацию и должен сказать, что не смог найти способ обнаружить и отобразить текущий режим vi. Я надеюсь, что у вас есть приятный сюрприз, и кто-то придумает решение, но я, конечно, не могу найти способ сделать то, что вы просите.
Я думаю, что есть способ сделать это, но это огромное излишество для крошечного раздражения, и я не думаю, что это то, что вы имели в виду, когда задали этот вопрос. Если это правда, прекратите читать сейчас и наслаждайтесь жизнью.
OTOH, если это действительно ваша любимая мозоль, и она сводит вас с ума, и вы действительно отчаянно хотите решить эту проблему, вот моя идея, как это сделать:
- Получите копию расширенного программирования в среде UNIX® от Ричарда Стивенса.
- Прочитайте главы о потоках и терминале ввода / вывода.
- Загрузите исходный код в вышеупомянутую книгу, которая включает в себя пример потока, который может быть наслоен на терминал.
- Реализуйте свою обработку для комбинации клавиш Esc (или обоих сочетаний клавиш изменения режима), и укажите это через звонок или фоновые манипуляции текущей строки.
Вкратце, Unix реализует терминальный ввод-вывод в виде полнодуплексного потока ввода-вывода между драйвером устройства и пользовательским процессом, в который могут быть вставлены модули. Он организован в виде стека, поэтому вы можете наложить столько потоков, сколько захотите. Сумма введенных потоков создает ваше поведение терминала ввода / вывода.
Когда вводится символ, первый модуль проверяет его и передает его (если хочет). Когда ответ приходит в противоположном направлении, он снова получает возможность проверить и передать его. Вот как Ctrl-C обрабатывается на более высоком уровне, чем обычная символьная клавиша.
Вы можете создать двоичный файл, реализующий потоковый модуль, который при вызове работает бесшумно на переднем плане, проверяя и передавая все нажатия клавиш, выполняя желаемое действие над нажатиями клавиш, которые вам нужны. В любом случае, это будет выглядеть так, как будто вы работаете над оболочкой. Оооо. Вы можете вызвать этот двоичный файл в последней (или первой, или любой) строке вашего .tcshrc, и вы даже не узнаете, что он там есть.
Там хороший праймер здесь, но я не мог найти много на эту тему, наверное , потому , что мимо его премьер.