格式化XML并返回到Vim中的同一行

时间:2011-10-28 17:58:04

标签: vim

我想映射 F5 以使用xmllint --format格式化当前缓冲区并返回到同一行。只做格式化很容易。

autocmd FileType xml map <F5> :w<CR>:silent %!xmllint --format -<CR>

我回到同一条线上玩了一会儿,从下面剪断它应该很明显我不知道我在做什么(根本不起作用)。

fun! XmlFormat()
  let @`\" = line(".")
  w<CR>
  silent %!xmllint --format -<CR>
  normal! g`\"
endfun
autocmd FileType xml map <F5> :call XmlFormat()<CR>

我是否需要将当前行存储在缓冲区中,还是可以使用变量?如何在函数中执行外部命令?最后,跳转到存储在变量中的行号的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以使用以下映射:

nnoremap <f5> mmgg=G`m

它使用mark动作和=过滤器命令。您可以使用xmllint设置equalprg选项。如果你想要更详细的描述,我写了一篇关于这个映射的文章here