Vim переміщує курсор одним символом у режимі вставки без клавіш зі стрілками


9

Це може здатися занадто заборгованим, але я перейшов на vim, і зараз так радий робочому процесу. Я намагаюся дисциплінувати себе не використовувати клавіші зі стрілками, так як тримати руки на клавішах альфа весь час - це така велика річ при написанні. Тому коли мені потрібно перейти, я виходжу з режиму вставки, переходжу в звичайний режим і повертаюся в режим вставки.

Є виняток, коли це насправді більше руйнує: я використовую clang completeфрагменти, і super tabце чудово. За винятком кожного разу, коли я отримую функцію автоматичного завершення після заповнення параметрів, які я залишаю курсором до )цього, щоб продовжити, я повинен переміщувати курсор на один символ праворуч. Як ви можете уявити, це трапляється дуже часто .

Єдині у мене варіанти (наскільки я знаю): Esclaабо , і я не радий жодному з них. Перший змушує мене натиснути 3 клавіші за просто просування курсору з 1 символом, другий змушує мене рухати рукою до клавіш зі стрілками. Третім варіантом буде картування CTRL-Lабо розміщення .

То який найкращий спосіб зробити це?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| позначає положення курсору


З подібною проблемою я закінчив злом скрипту завершення, щоб він просто не відлунювався, )якщо в функції є хоча б один аргумент. Тому я набираю це вручну. Набагато корисніше зараз.
Дмитро Френк

Що трапляється, коли ви вводите )ставку, це пропускає з фактично вставленим. (Я не використовую цей плагін)
FDinoff

@FDinoff ні, він просто вставляє інше)
bolov

1
@bolov це невтішно. Можливо, ви зможете витягнути код, який робить це з автоматичних пар . Я поняття не маю, чи плагіни будуть конфліктувати, можливо. Інший варіант - використовувати <C-O>lдля виходу в звичайний режим для 1 команди звичайного режиму.
FDinoff

Відповіді:


5

Карта, )щоб пропустити існуючу, )якщо це дужка, що закривається

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Взято з: http://vim.wikia.com/wiki/Automatically_append_closing_characters


Стара відповідь

:h i_CTRL-O виконати одну команду, повернутися в режим Вставка.

Ctrl-ol перемістить вас одним символом праворуч, а потім поверне вас у режим вставки.

Крім того, деякі із плагінів дужок дозволяють просто набрати закриває дужку, )і вони замістять існуючий.


1
це не працює, якщо )є останнім символом у рядку (і це трапляється часто, коли ви пишете код). CTRL-O aпроте працює. Тож я гадаю, що ми зберегли один ключ. :)
bolov

Правда del )лише два символи і завжди поставлять вас після дужки, що закривається.
Бретт Y

пропуск через ')' працює як шарм, дякую
bolov

1

Введіть наступне, щоб знайти клавіші управління, які використовуються у режимі вставки.

:help insert-index

ctrl-b не використовується, але ви, можливо, захочете принести в жертву якийсь інший ключ.

imap <c-b> <right>

Це працює для переміщення курсору праворуч на одну таблицю. Або нанесіть подвійний знак.

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