Затримка перед тим, як "O" відкриє новий рядок?


82

Я помічав, що іноді, коли я використовую O(велике "o") для створення нового рядка та переходу в режим вставки, перед тим, як щось трапиться, виникає невелика затримка.

Це поширене? Чи є спосіб його змінити?

І те, :map Oі :imap Oінше показують "Немає відображення знайдено", тому я не думаю, що це дивне відображення.


Погодьтеся з superuser.com: можливо, це пов’язано з підсвічуванням синтаксису, перерахуванням форматування?
monojohnny

4
Будь ласка, не використовуйте теги типу "належить суперкористувачеві" Теги не призначені як засіб для вираження своєї думки - див. Meta.stackexchange.com/questions/36819/… . Якщо ви вважаєте, що він належить до SU, голосуйте, щоб перенести його туди.

Мене виправили. Я більше не буду використовувати ці теги. Я все ще вважаю, що це дуже гарне запитання - це питання, яке належить SU, і я сподіваюся знайти його там.
jjclarkson

Так, вибачте - ви маєте рацію. Це має бути на SU. Чи є швидка та проста кнопка, яку я можу використати для її перенесення (та відповіді?)
Девід Волевер,

Відповіді:


92

Це тому, що 'esckeys'опція ввімкнена (наслідок того nocompatible, що я щойно виявив). Коли ви натискаєте ^[O, виникає невелика затримка, оскільки з’ясовується, чи використовуєте ви стрілку / функціональну клавішу, чи ви просто мали на увазі ці дві клавіші послідовно.

Одним із рішень є вимкнення цієї опції та відмова від клавіш зі стрілками в режимі вставки.
Інший - встановити значення 'timeoutlen'на менше ніж 1000, може 100 (але будьте обережні при повільних з’єднаннях).
Іншим є використання, ^Cа ^[не вихід із режиму вставки.


Класно, дякую! Крім того, для всіх, хто може читати це: перед вимкненням перевірте сторінку довідки 'esckeys'- це те, що дозволяє вам використовувати, наприклад, клавіші зі стрілками в режимі вставки. Налаштування 'timeoutlen'добре працювало для мене.
Девід Волевер,

3
Також ttimeoutlenможна встановити час очікування лише для кодів клавіш. Дивіться vim's:help ttimeoutlen
k107

1
У мене все ще є затримка навіть після :set noesckeysабо :set timeout timeoutlen=1000 ttimeoutlen=100... Будь-які ідеї? (Cygwin, VIM зібрано з джерела)
Yichuan Wang

1
Для мене добре працювало з: set timeout timeoutlen = 3000 ttimeoutlen = 100 (як зазначено у vim help). Просто чисто встановити тайм-аут на невелике значення було поганою ідеєю - деякі зіставлення перестали працювати.
jkff

Я не розумію. Коли 'esckeys'ввімкнено, чому я не можу ввести послідовність <esc>[Aу режимі вставки, щоб перемістити курсор вгору?
Цянь

3

Це трапляється, якщо натиснути "O" відразу після клавіші Escape, так? Я завжди припускав, що це тому, що драйвер терміналу трохи зачекав, чи не збираєтеся ви виконати послідовність евакуації.


0

Я підозрюю, що це коли вам потрібно записати файл підкачки на диск. Переконайтеся, що ви використовуєте vim на комп’ютері з швидким доступом до диска; якщо вам потрібно використовувати спільну файлову систему, ви можете спробувати перемістити файл підкачки за допомогою

:set directory=/path/to/local/dir

Я повторюю це - на роботі наші домашні каталоги змонтовані NFS, і я бачу подібну затримку багато.
Cascabel

... звичайно, якщо це лише для O, а не o, це, безумовно, річ послідовності клавіш Escape, як каже jleedev!
Cascabel

1
Ну, хоча ця відповідь безпосередньо не стосується ОП, я вважаю, що вона все ще актуальна. Не можу погодитися з людиною, яка проголосувала проти.
Джеффрі Хосе

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