简单地说,:
在我的.vimrc中,我有下面的行来正确地使用vim缩进xml文件:
autocmd FileType xml set equalprg=xmllint\ --format\ -奇怪的是,现在当我试图缩进xmllint文件时,vim试图使用TypeScript,而我不明白为什么.
详细信息
在vim中打开test.ts时,可以看到vim正确地检测类型(即:set filetype?返回filetype=typescript)。
但当我试图缩进这段代码时
for(var i=0 ; i < 1 ; i++){
console.log(i);
}通过将光标放在一个卷曲的括号上并按下=%,然后将这个块替换为
Exception : System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
[... eluded for brievity ...]
at xmllint.Program.Main(String[] args)(这意味着vim启动了xmllint命令,而该命令失败了(由于它不是xml ),因此该失败是预料中的。但vim不应该首先推出xmllint ))。
其他两项可能有用的意见是:
.vimrc中删除这一行时,缩进就会像预期的那样工作。test.dummy),那么缩进就会像预期的那样工作。更多细节
set filetype?就会将.ts文件检测为xml (不确定这种匹配来自.):scriptnames返回/etc/vimrc
/usr/share/vim/vim 81/defaults.vim
/usr/share/vim/vim 81/语法/syntax.vim
/usr/share/vim/vim 81/语法/synload.vim
/usr/share/vim/vim 81/语法/syncol.vim
/usr/share/vim/vim 81/filetype.vim
~/..vim/ftdetect/.vim escript.vim
/usr/share/vim/vim 81/ftplugin.vim
/usr/share/vim/vim 81/indent.vim
~/..vimrc
/usr/share/vim/vim 81/语法/nosyntax.vim
/usr/share/vim/vim81/plugin/getscriptPlugin.vim /usr/share/vim/vim 81/plugin/gzip.vim
/usr/share/vim/vim 81/plugin/logiPat.vim
/usr/share/vim/vim 81/plugin/manpager.vim
/usr/share/vim/vim 81/plugin/medi圆括号.vim
/usr/share/vim/vim 81/plugin/netrwPlugin.vim
/usr/share/vim/vim 81/plugin/rrhelper.vim
/usr/share/vim/vim 81/plugin/spellfile.vim
/usr/share/vim/vim 81/plugin/tarPlugin.vim
/usr/share/vim/vim 81/plugin/tohtml.vim
/usr/share/vim/vim 81/plugin/vim Plugin.vim
/usr/share/vim/vim 81/plugin/zipPlugin.vim
/usr/share/vim/vim 81/ftplugin/xml.vim
/usr/share/vim/vim 81/缩进/xml.vim
/usr/share/vim/vim 81/语法/xml.vim
/usr/share/vim/vim 81/语法/dtd.vim
~/..vim/ftplugin/.vim escript.vim
~/..vim/编译器/.vim escript.vim
~/..vim/缩进/类型
~/..vim/语法/.vim escript.vim发布于 2019-02-28 17:57:48
我不知道为什么您的TypeScript首先被检测为XML (也许其他一些答案可以深入到这一点上),但可能发生的情况是,首先检测到通用(默认的、内置的)文件类型,然后通过更具体的检测(例如,通过TypeScript插件)对其进行修改。您所遇到的问题是,'equalprg'会留下一个插件,因为您使用的是快捷方式:autocmd,而不是正确的文件类型插件。
autocmd FileType xml set equalprg=xmllint\ --format\ -如果您只想为某些文件类型启用一个选项,请使用:setlocal option=value (使用:set将使从该缓冲区打开的新缓冲区继承该设置,这是错误的),并将相应的:setlocal命令放入~/.vim/after/ftplugin/{filetype}.vim,其中{filetype}是实际的文件类型(例如,此处的xml )。(这要求您拥有:filetype plugin on;使用after目录可以覆盖任何由$VIMRUNTIME/ftplugin/{filetype}.vim完成的默认文件类型设置。)适当的插件也可以通过:help undo_ftplugin机制撤销任何设置。
因此,在您的情况下,正确的配置将将:autocmd替换为~/.vim/after/ftplugin/xml.vim。
setlocal equalprg=xmllint\ --format\ -
let b:undo_ftplugin = (exists('b:undo_ftplugin') ? b:undo_ftplugin . '|' : '') . 'setlocal equalprg<'这样,只要文件类型是XML,'equalprg'仍然会被简短地设置,但是它将由b:undo_ftplugin中定义的命令撤消,当文件类型更改为typescript时,typescript会自动执行。
https://stackoverflow.com/questions/54930677
复制相似问题