Положение курсора в сокращении VIM - PullRequest
11 голосов
/ 23 июля 2010

есть ли какой-нибудь способ сказать VIM поместить курсор в какую-то позицию после расширения аббревиатуры?Скажем, у вас есть что-то вроде этого в .gvimrc

iabberv <? <?=|?> 

, и вы хотите поместить курсор туда, где символ трубы автоматически.

Ответы [ 3 ]

10 голосов
/ 23 июля 2010

Быстрое решение, которое я бы использовал в этом случае, состоит в том, чтобы вставить несколько нажатий клавиш в сокращение:

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>

Это немного грязно, но имеет внешний вызов функции, который удаляет пробелы, и он должен работать хорошо.

5 голосов
/ 23 июля 2010

То, что вы хотите, это фрагменты.Для этого я использую snipmate.

0 голосов
/ 23 июля 2010

Это можно сделать с помощью lh-map-tools :

"
" in {rtp}/ftpluvin/vim/vim_snippets.vim
inoreab  <buffer> <silent> if    
      \ <C-R>=InsertSeq('if', 'if!cursorhere!\nendif!mark!')<CR>

Другие плагины предлагают аналогичную функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...