首页 > 解决方案 > 如何在vimscript中替换选定的文本

问题描述

我有一些带有未格式化 xml 代码的文件的特定部分。我需要编写一个 vimscript 函数来选择文本并在其上调用 xmllint。

我知道我可以在命令行上做到这一点:'<,'>!xmllint --format -

但我真的需要在 vimscript 函数中做同样的事情,而且我不知道如何制作类似normal!call for visual 的东西。

我试过了,但它不能正常工作:

function! MyFormat()
    ... stuff done here
    let startl = line("'<")
    let endl = line("'>")
    let line = getline(startl, endl)
    let r = system('echo "' . join(line, "") . '" | xmllint --format -')

    call setline('.', r)
endfunction

标签: vim

解决方案


Vim 脚本中的每一行都是一个 Ex 命令。由于您已经有一个有效的 Ex 命令,您不妨使用它。

function! MyFormat()
    " ... stuff done here
    '<,'>!xmllint --format -
    " ... more stuff done here
endfunction

但是,再一次,数据丢失了,所以这可能会起作用……或不,足够……或不,等等。


推荐阅读