inoremap: переменная timeoutlen - PullRequest
       46

inoremap: переменная timeoutlen

4 голосов
/ 19 февраля 2020

В моем .vimr c есть два отображения для режима вставки:

inoremap jk <ESC>
inoremap {<CR> {<CR>}

У первого отображения должно быть короткое значение timeoutlen, тогда как у последнего вообще не должно быть тайм-аута. Причина: мне нужен тайм-аут для первого переназначения, поскольку jk может использоваться как обычные символы. Последнее, с другой стороны, - это завершение кода, когда тайм-аут не имеет смысла.

Можно ли назначить разные timeoutlen для разных повторов? Спасибо & BR

1 Ответ

2 голосов
/ 19 февраля 2020

Один из способов продления времени ожидания вашего второго отображения - на самом деле только сопоставить <CR>, а затем использовать выражение для проверки того, что оно набирается после символа {.

Поведение несколько иное из двухсимвольного сопоставления, в котором сопоставление также будет работать, если вы наберете <CR> после {, который уже был там, что может быть приемлемо для вас (или даже может быть именно тем, что вы хотели.)

Поскольку вы используете выражение для выполнения проверок, вы можете выполнять дополнительные проверки, такие как только применение сопоставления, если вы набираете <CR> в конце строки (поэтому избегайте его, если мы используем его для разделения существующей длинной строки.)

Возможная реализация этого будет выглядеть так:

inoremap <expr> <CR>
    \ col('.') ==# col('$')
    \ && getline('.')[col('.')-2] ==# '{'
    \ ? "\<CR>}\<C-O>O"
    \ : "\<CR>"

Мы используем здесь троичный оператор для получения другого вывода на основе состояние держит или нет. Если это не так, мы просто отображаем обратно на само нажатие клавиши, поэтому оно продолжает работать, как обычно во всех других контекстах.

Для части, которая вставляет закрывающую фигурную скобку, я также добавил CTRL-O O до конца, поэтому после вставки фигурной скобки она добавит новую строку перед ней и оставит курсор в столбце с отступом внутри блока. Я надеюсь, что вы найдете это полезным, но не стесняйтесь игнорировать эту часть, если это не совсем то, что вы имели в виду.

...