Збіг швидкості на <Esc> O (Вставити до Нормального до Вставити новий рядок над курсором)


16

Часто, коли я перебуваю в режимі "Вставка", я натискаю, Escщоб потрапити в звичайний режим, а потім негайно натисніть, Oщоб почати новий рядок над курсором і перейти в режим Вставка там.

Але коли я це роблю, після того, як я натиснув на Oпопереднє, з’явиться затримка на 1 секунду . Крім того , якщо я починаю вводити новий текст в протягом цього 1-секундної затримки, якщо новий текст починається з якою - або з певного набору символів (наприклад j, k, m, n, o), я в кінцевому підсумку в середині якої - або іншої операції я не зробив Маю намір, часто роблячи безлад, і в цей момент я повинен зупинитися і метушитися навколо, а потім повторно переконуюсь, поки не буду впевнений, що скасував шкоду

Щоб уникнути цієї неприємності, я звик робити паузу на одну секунду після кожного введення O. Але це уповільнює мене і заважає мені бути демоном швидкості, яким я був би.

Що це викликає? Чи є виправлення чи вирішення?

Відповіді:


15

Це відбувається лише в терміналі, але не в GVIM, правда? Причина полягає в тому, що Vim не може розрізняти клавіші окремих типів і послідовність ANSI Escape, починаючи з тих же клавіш (тобто ^[O..., <Esc>за якими слід Oу вашому випадку).

Про всі основні складності ви можете прочитати за адресою :help 'timeout'(та наступними параметрами). Там же ви знайдете запропоновану конфігурацію, яка усуває проблему:

:set timeout timeoutlen=1000 ttimeoutlen=100

3
Ви також можете використовувати set noesckeys; це має побічний ефект від відключення клавіш зі стрілками (а може бути, і деяких інших клавіш?) в режимі Вставка, тому може бути не для всіх.
Мартін Турнойж

2
@Carpetsmoker Щодо "встановити noesckeys" ... це працює, але лише в режимі "Вставка". Я знаю, що я сказав, що я починаю з режиму Вставка; однак я також часто роблю <Esc> O, починаючи з нормального режиму (головним чином, коли я не на 100% впевнений, починаю я в режимі "Вставити" або "Нормальний"), тому мені б хотілося, щоб щось працювало і в цьому випадку.
Дон Хетч

1
@DonHatch Ви можете використовувати :nnoremap ^[O O, де ^[вводиться натисканням <C-v><Esc>(може також відображатися як <1b>).
Мартін Турнойж

5

Як вирішення, замість ESCO, використовуйте Control+ OO. В Control+ Oпоміщає Вас в звичайному режимі для однієї команди, а потім повертає вас в режимі вставки , коли це робиться.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.