Быстрое решение, которое я бы использовал в этом случае, состоит в том, чтобы вставить несколько нажатий клавиш в сокращение:
iabbrev <? <?=?><Left><Left>
Поместит курсор на две позиции влево, после =
.
Таким образом, вы можете использовать различные клавиши перемещения, такие как <End>
, <Home>
, или даже вернуться в нормальный режим с помощью <Esc>
и задавать обычные команды обычного режима.Примером будет
iabbrev <? <?=?><Esc>hha
, и он будет таким же, как и в первом примере.Если вы расширите аббревиатуру пробелом, у нее будет один лишний пробел., от которого вы можете избавиться, используя <BS>
(backspace) в сокращении. Или разверните его с помощью <C-]>
, который не оставит пробелов.
Исправление: так как сокращение является первымразвернуто, и после этого вставлено место, вам нужна небольшая функция, найденная в справке (map.txt):
func Eatchar(pat)
let c = nr2char(getchar(0))
return (c =~ a:pat) ? '' : c
endfunc
Лучше всего поставить .vimrc
.Теперь следующая аббревиатура будет работать полностью так, как и было задумано:
:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR>
Это немного грязно, но имеет внешний вызов функции, который удаляет пробелы, и он должен работать хорошо.