Для возврата из режима вставки я привык <Esc>
. Теперь я ищу переобучиться <C-[>
вместо <Esc>
. Для этого мне нужно отключить, <Esc>
чтобы помочь с переподготовкой.
Проблемы в
:inoremap <Esc> <Nop>
также отключает <C-[>
. Для vim они кажутся одинаковыми.
Есть ли способ отключить одно без другого?
key-bindings
mxlian
источник
источник
Esc
илиC-[
, так что вам не повезло, но вы можете сделать что-то с версией графического интерфейса Vim или перенастроить свой терминал.Ответы:
Сначала немного истории. В старые времена, когда вы набирали текст на терминале , каждая клавиша отправляла символ в приложение. По мере того, как машины, к которым был подключен терминал, становились все более мощными, терминалы стандартизировались с помощью клавиши управления , которая отправляла некоторые специальные символы, которые не были напечатаны, но выполняли какую-то функцию. В конечном итоге победившим набором символов стал ASCII , в котором 128 символов, из которых 32 являются управляющими символами. При нажатии Ctrlвместе с буквой или другим символом, написанным 10xxxxx₂ (двоичная запись), отправляется управляющий символ, код которого равен 00xxxxx₂, например, Ctrl+ [отправляет номер символа 27₁₀ = 0011011₂, поскольку
[
91 is = 1011011₂.Несколько функциональных клавиш на терминалах отправляют управляющие символы:
Ctrl-H
(BS = BackSpace) ¹Ctrl-I
(HT = Горизонтальная вкладка)Ctrl-J
(LF = перевод строки) (этот ключ был у немногих терминалов)Ctrl-M
(CR = возврат каретки)Ctrl-[
(ESC = Escape)Когда у терминалов было больше функциональных клавиш, не хватало управляющих символов, чтобы представлять их все. Таким образом , они послали последовательность характера, а универсальная конвенция является то , что эти последовательности символов начинаются с экранирующим символом,
Ctrl-[
.Со временем аппаратные терминалы становились все реже и реже; В настоящее время существует много уровней перевода между клавиатурой и приложением . Ограничение количества доступных символов и жестко закодированных соответствий между определенными комбинациями клавиш и определенными управляющими символами больше не имеет значения. Однако приложения оставались совместимыми с существующими терминалами, а терминалы оставались совместимыми с существующими приложениями, что затрудняло изменение чего-либо.
Таким образом, даже сегодня в Unix-подобных системах приложения, работающие в эмуляторе терминала, получают символ,
Ctrl-I
когда пользователь нажимает Tabклавишу, символ,Ctrl-[
когда пользователь нажимает Esc, и т. Д. Если Vim работает в терминале Unix, он не может различить<Esc>
и<Ctrl-[>
потому что терминал отправляет ту же информацию.Vim, работающий в других средах, не имеет этого ограничения, поэтому в принципе они могут посылать различную информацию. Учитывая, что Vim использует
Ctrl-[
персонажа для представления<Esc>
во многих местах, изменение было бы нецелесообразным; вместо Ctrl+ [можно сделать, чтобы отправить другое событие ввода.Я не знаю ни версии самого Vim , который различает между Escи Ctrl+ [(но это не так, как я когда - либо использовать любой). Gvim, со своей стороны, похоже, имитирует садовый терминал .
По иронии судьбы, лучшим вариантом может быть запуск Vim в эмуляторе терминала. Некоторые эмуляторы терминала позволяют настраивать escape-последовательности, посылаемые ключами и цепочками ключей. Таким образом, вы можете организовать Ctrl+, [чтобы отправлять не символ ␛ (
Ctrl-[
), а некоторую escape-последовательность. Xterm, «эталонный» эмулятор терминала для Unix-подобных систем, поддерживает две такие схемы. Например:␛
и Tabотправляет␉
во всех конфигурациях.?.VT100.modifyOtherKeys: 0
(по умолчанию) или?.VT100.modifyOtherKeys: 1
, Ctrl+ [отправляет␛
и Ctrl+ Iотправляет␉
.?.VT100.modifyOtherKeys: 1
влияет только на мета-комбинации и управляющие комбинации, в которых отсутствует символ ASCII.?.VT100.modifyOtherKeys: 2
и?.VT100.formatOtherKeys: 0
(по умолчанию) Ctrl+ [отправляет␛[27;5;91~
и Ctrl+ Iотправляет␛[27;5;105~
.?.VT100.modifyOtherKeys: 2
и?.VT100.formatOtherKeys: 1
, Ctrl+ [посылает␛[91;5u
и Ctrl+ Iпосылает␛[105;5u
.Поддержка может быть включена путем установки
modifyOtherKeys
ресурса при запуске xterm (иformatOtherKeys
выбора между двумя схемами), или его может динамически включать и выключать приложение.У Vim нет встроенной поддержки, о которой я знаю. Вы можете написать свои собственные привязки для этих escape-последовательностей. Может быть возможно заставить Vim автоматически установить терминал в
modifyOtherKeys
режиме, передав ему модифицированное определение терминала, но это выходит за рамки этого ответа.Neovim имеет встроенную поддержку для одного из вариантов . Насколько я понимаю, он не включает поддержку, если терминал его поддерживает, это должен сделать пользователь.
¹ все чаще и чаще в наше время Backspaceотправляет персонажа 127.
источник