#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 .