首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缩进时,TypeScript文件被视为xml。

缩进时,TypeScript文件被视为xml。
EN

Stack Overflow用户
提问于 2019-02-28 16:57:10
回答 1查看 498关注 0票数 2

简单地说,

在我的.vimrc中,我有下面的行来正确地使用vim缩进xml文件:

代码语言:javascript
复制
autocmd FileType xml set equalprg=xmllint\ --format\ -

奇怪的是,现在当我试图缩进xmllint文件时,vim试图使用TypeScript,而我不明白为什么.

详细信息

在vim中打开test.ts时,可以看到vim正确地检测类型(即:set filetype?返回filetype=typescript)。

但当我试图缩进这段代码时

代码语言:javascript
复制
for(var i=0 ; i < 1 ; i++){
console.log(i);
}

通过将光标放在一个卷曲的括号上并按下=%,然后将这个块替换为

代码语言:javascript
复制
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),那么缩进就会像预期的那样工作。

更多细节

  • 我正在使用TypeScript插件https://github.com/leafgarland/typescript-vim。如果我删除这个插件,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
  • 而且,不确定它是否有用,但我在windows 10上使用ViM 8.1 (与git-bash一起安装)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-28 17:57:48

我不知道为什么您的TypeScript首先被检测为XML (也许其他一些答案可以深入到这一点上),但可能发生的情况是,首先检测到通用(默认的、内置的)文件类型,然后通过更具体的检测(例如,通过TypeScript插件)对其进行修改。您所遇到的问题是,'equalprg'会留下一个插件,因为您使用的是快捷方式:autocmd,而不是正确的文件类型插件。

代码语言:javascript
复制
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

代码语言:javascript
复制
setlocal equalprg=xmllint\ --format\ -
let b:undo_ftplugin = (exists('b:undo_ftplugin') ? b:undo_ftplugin . '|' : '') . 'setlocal equalprg<'

这样,只要文件类型是XML,'equalprg'仍然会被简短地设置,但是它将由b:undo_ftplugin中定义的命令撤消,当文件类型更改为typescript时,typescript会自动执行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54930677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档