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 нет, он просто вставляет другой)
болов
1
@bolov это разочаровывает. Возможно, вы сможете извлечь код, который делает это из автопар . Я понятия не имею, будут ли конфликтовать плагины. Другой вариант - использовать <C-O>lдля выхода в нормальный режим для 1 команды нормального режима.
FDinoff

Ответы:

5

Карта, )чтобы пропустить существующий, )если это закрывающая скобка

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

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


Старый ответ

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

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

В качестве альтернативы некоторые плагины кронштейнов позволяют просто ввести закрывающий кронштейн, )и они заменят существующий.

Бретт Y
источник
1
это не работает, если )последний символ в строке (и это часто случается, когда вы пишете код). CTRL-O aОднако работает. Итак, я думаю, мы сохранили один ключ. :)
болов
True del )состоит только из двух символов и всегда ставит вас после закрывающей скобки.
Бретт Y
пропуск через ')' работает как обаяние, спасибо
bolov
1

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

:help insert-index

Ctrl-b не используется, но вы можете пожертвовать другим ключом.

imap <c-b> <right>

Это работает, чтобы переместить курсор вправо на один символ. Или нанесите на карту какой-нибудь двойной символ.

imap jj <right>
broomdodger
источник