我尝试使用一个简单的函数来回显XML标记:
func! SayTag()
let tagName = input("Tag: ")
return "<" . tagName . ">" . "<" . tagName . ">"
endfunc
并绑定到:
imap \tag <C-R>=SayTag()<CR>
但输出后,光标位于标记之后,例如< TAG > < /TAG > _CURSOR_
如何动态设置光标位置?
答案 0 :(得分:2)
我不太喜欢以下解决方案,但我正在探讨你的问题,因为我无法想到一个简单的解决方案:
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
它应该可以正常工作,你可以阅读文档here(参见最新的例子)。顺便说一句,如果您打算编写大量XML或HTML,我建议您查看以下插件:
他们会为你节省很多打字。
答案 1 :(得分: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>
但是,我非常同意您使用专为这类事情设计的插件可以节省大量时间。
编辑:删除了不必要的循环。