Функция VIM для создания тега, как центрировать положение курсора после вывода

#vim

#vim

Вопрос:

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

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

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

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

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

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

Ответ №1:

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

 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, я бы посоветовал вам взглянуть на следующие плагины:

Они сэкономят вам много времени на вводе текста.

Ответ №2:

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

 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>
  

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

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