Функция VIM для генерации тега, как центрировать позицию курсора после вывода - PullRequest
4 голосов
/ 02 ноября 2011

Я пытался использовать простую функцию для отображения тегов XML:

func! SayTag()
    let tagName = input("Tag: ")
    return "<" . tagName . ">" . "<" . tagName . ">"
endfunc

И привязать к:

imap \tag <C-R>=SayTag()<CR>

Но после вывода курсор был после тегов, например, < TAG > < /TAG > _CURSOR_

Как я могу установить положение курсора, динамически?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

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

function! GetTag()
    let tag = input("Tag: ")
    execute "normal! i<".tag."></".tag.">"
    execute "normal! " . repeat('h', strlen(tag)+2)
endfunction

inoremap \tag <C-o>:call GetTag()<enter>

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

Редактировать: удалены ненужные для цикла.

2 голосов
/ 02 ноября 2011

Мне не очень нравится следующее решение, но я немного изучал вашу проблему, потому что не мог придумать простого решения:

func! GetTag()
  call inputsave()
  let g:tagName = input("Tag: ")
  call inputrestore()
endfunc

imap \t <esc>:call GetTag()<CR>:exe "normal! i<".tagName."></".tagName.">"<CR>bba

Это должно работать нормально, вы можете прочитать документы здесь (см. Последний пример). Кстати, если вы планируете писать много XML или HTML, я бы посоветовал вам взглянуть на следующие плагины:

Они сэкономят вам много печатания.

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