Использование ctrl + c вместо esc для выхода из режима вставки нарушает что-либо в vi?

15

При использовании vi вы можете выйти из режима вставки с помощью Ctrl+ Cвместо более традиционного Esc. Существуют ли ситуации, когда было бы нежелательно использовать первое вместо второго? Это нарушает что-то кроме лучшей практики?

MDMarra
источник
Нежелательно бить первого случайно, что приводит к ошибкам Type :quit<Enter> to exit Vimи заставляет меня искать ответ. Нажатие iвозвращает вас обратно в режим вставки.
Ноумен

Ответы:

9

Ctrl-Cи Escне совпадают в vi/ vimв большинстве режимов, включая режим вставки. Разница в том, что Escтриггеры сокращений пока Ctrl-cнет. Имеет ли это значение для вас, зависит от того, используете ли вы или какие-либо плагины, которые вы используете, сокращения.


Обратите внимание , что безопаснее предположить , Escи Ctrl-Cделать не означает то же самое в vim. Другой пример с этого же сайта - выход из режима вставки блока (не в vi).

jw013
источник
Полезно знать, но мой вопрос был о выходе из режима вставки.
MDMarra
@MDMarra Doh, неправильно прочитал твой вопрос. Режим вставки по-прежнему другой: см. Обновленный ответ.
jw013
1
Вот самое важное отличие, с которым мне пришлось столкнуться: многострочная вставка в режиме визуального блока работает с Esc, а не с Cc.
восхищение
4

Я думаю, что вы имеете в виду vim, нет vi.

Это действительно работает vim, хотя я бы не использовал его, если бы не был уверен на 100%, что никогда не коснусь операционной системы, отличной от Linux. Причина в том, что другие ОС могут иметь свои собственные реализации vi, которые не реализуют это, и вы можете обнаружить, что при работе viна этих платформах Ctrl-C имеет свое традиционное поведение: прерывать процесс и оставлять ваш терминал в странном состоянии. ,

Майкл Хэмптон
источник
3
Можете ли вы указать на любую viреализацию, которая все еще существует сегодня, которая не обрабатывает Ctrl-C? Смотрите мой ответ для реальной разницы.
jw013
2

Если вы имеете в виду vim, есть небольшая разница. CTRL-Cне проверяет наличие сокращений и не вызывает InsertLeaveсобытие. Таким образом, вы или плагины определили любые autocmdоператоры, которые зависят от того InsertLeave, будут ли они срабатывать.

Из официальной документации http://vimhelp.appspot.com/insert.txt.html :

<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode.  Finish
                abbreviation.

CTRL-C          Quit insert mode, go back to Normal mode.  Do not check for
                abbreviations.  Does not trigger the InsertLeave autocommand
                event.

Вы можете задать отображение для CTRL-Cк <esc>, то это вызовет InsertLeave.

wisbucky
источник