Положение курсора в сокращении VIM

RFC для HTTP (как указано выше) диктует, что заголовки не чувствительны к регистру, однако вы обнаружите, что с определенными браузерами (я смотрю на вас, IE), что капитализация каждого из слов имеет тенденцию быть лучшим:

Location: http://stackoverflow.com

Content-Type: text/plain

vs

location: http://stackoverflow.com

content-type: text/plain

Это не стандарт «HTTP», а только один из особенностей браузера, о которых мы как разработчики должны думать.

11
задан ivan73 23 July 2010 в 16:20
поделиться

3 ответа

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

iabbrev <? <?=?><Left><Left>

Поместите курсор на два места влево, после =.

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

iabbrev <? <?=?><Esc>hha

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

Поправка: поскольку аббревиатура сначала расширяется, а затем вставляется пробел, вам нужна небольшая функция, найденная в справке (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>

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

10
ответ дан 3 December 2019 в 08:02
поделиться

Что вам нужно, так это фрагменты. Я использую для этого snipmate.

5
ответ дан 3 December 2019 в 08:02
поделиться

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

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

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

0
ответ дан 3 December 2019 в 08:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: