Ответы:
Я не верю, что есть какой-либо способ визуально определить, в каком режиме вы находитесь, но если вы немного измените свое поведение, это не будет иметь значения.
Если вы хотите быть в командном режиме, нажмите ESC, прежде чем вводить команду.
Если вы хотите быть в режиме вставки, нажмите ESC и i, прежде чем вводить содержимое.
В конечном итоге вы будете часто нажимать ESC, но каждый пользователь vi, которого я когда-либо встречал, все равно делает это.
Я просмотрел документацию и должен был сказать, что не смог найти способ обнаружить и отобразить текущий режим vi. Я надеюсь, что у вас есть приятный сюрприз, и кто-то придумывает решение, но я, конечно, не могу найти способ сделать то, что вы просите.
Я думаю, что есть способ сделать это, но это огромное излишество для крошечного раздражения, и я не думаю, что это то, что вы имели в виду, когда задали этот вопрос. Если это правда, прекратите читать сейчас и наслаждайтесь жизнью.
OTOH, если это действительно ваша любимая мозоль, и это сводит вас с ума, и вы действительно отчаянно хотите решить эту проблему, вот моя идея, как это сделать:
Вкратце, Unix реализует терминальный ввод-вывод в виде полнодуплексного потока ввода-вывода между драйвером устройства и пользовательским процессом, в который могут быть вставлены модули. Он организован в виде стека, поэтому вы можете наложить столько потоков, сколько хотите. Сумма введенных потоков создает ваше поведение терминала ввода / вывода.
Когда вводится символ, первый модуль проверяет его и передает его (если хочет). Когда ответ приходит в противоположном направлении, он снова получает возможность проверить и передать его. Вот как Ctrl-C обрабатывается на более высоком уровне, чем обычная символьная клавиша.
Вы можете создать двоичный файл, реализующий потоковый модуль, который при вызове работает бесшумно на переднем плане, проверяя и передавая все нажатия клавиш, выполняя предпочитаемое действие над нажатиями клавиш, которые вас интересуют. В любом случае, это будет выглядеть так, как будто вы работаете над оболочкой. Оооо. Вы можете вызвать этот двоичный файл в последней (или первой, или любой) строке вашего .tcshrc, и вы даже не узнаете, что он там есть.
Там хороший праймер здесь , но я не мог найти много на эту тему, наверное , потому , что мимо его премьер.
На этой странице есть довольно подробный скрипт, который устанавливает то, что вы хотите (и даже больше) в zsh . Возможно, его можно адаптировать для работы с tcsh (я не очень знаком с этой оболочкой).
Для тех, кто имеет эту точную проблему (как я): я нашел решение в stackoverflow . Очевидно, в readline есть встроенная поддержка для этого, так что вы можете просто добавить следующее к вашему ~/.inputrc
:
set show-mode-in-prompt on
И чтобы настроить фактическое использование символов:
set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"
Редактирование командной строки с помощью tcsh
Существует два основных режима редактирования командной строки,
основанные на двух наиболее часто используемых текстовых редакторах, Emacs и vi.При использовании привязок vi вы должны переключаться между режимами вставки и командования ;
разные команды полезны в каждом режиме.В режиме vi есть два подрежима:режим вставки и командный режим.
- Режим по умолчанию - вставка .
- Вы можете переключаться между режимами нажатием
Esc
.- Кроме того, в командном режиме
ввод «a» (добавление) или «i» (вставка) вернет вас в режим вставки .
Другие заметки на странице tcsh
настройки уже связаны выше.
У меня была точно такая же проблема, и я случайно нашел решение. Хотя эта ветка старая, я не смог найти какой-либо другой веб-сайт, предлагающий решение, поэтому я предполагаю, что публикация в этой ветке в порядке.
Просто сбросьте настройки вашей терминальной программы или оболочки. В настоящее время я использую PuTTY, и я просто удалил свои сохраненные настройки для своего сохраненного соединения и заново создал сохраненный сеанс. Работал как шарм.
Надеюсь это поможет!