Файл TypeScript рассматривается как XML при отступе - PullRequest
0 голосов
/ 28 февраля 2019

В двух словах:

В моем .vimrc у меня есть следующая строка, чтобы правильно иметь файлы vim indent xml:

autocmd FileType xml set equalprg=xmllint\ --format\ -

странная вещьчто теперь vim пытается использовать xmllint при попытке сделать отступ для файлов TypeScript, и я не понимаю, почему ...

Подробнее

Когда я открываюtest.ts в vim я вижу, что 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, тогда отступ работает как положено
  • , если я изменяю расширение файла на anything else (скажем test.dummy), тогда отступ работает как положено

Еще больше деталей

  • Я использую плагин TypeScript https://github.com/leafgarland/typescript-vim.Если я удалю этот плагин, set filetype? обнаружит .ts файлов как xml (не уверен, откуда это совпадение ...)
  • :scriptnames возвращает / etc / vimrc
    /usr/share/vim/vim81/defaults.vim
    /usr/share/vim/vim81/syntax/syntax.vim
    /usr/share/vim/vim81/syntax/synload.vim
    /usr / share / vim / vim81 / syntax / syncolor.vim
    /usr/share/vim/vim81/filetype.vim
    ~ / .vim / ftdetect / typescript.vim
    / usr / share / vim/vim81/ftplugin.vim
    /usr/share/vim/vim81/indent.vim
    ~ / .vimrc
    /usr/share/vim/vim81/syntax/nosyntax.vim
    / usr/share/vim/vim81/plugin/getscriptPlugin.vim /usr/share/vim/vim81/plugin/gzip.vim
    /usr/share/vim/vim81/plugin/logiPat.vim
    / usr / share/vim/vim81/plugin/manpager.vim
    /usr/share/vim/vim81/plugin/matchparen.vim
    /usr/share/vim/vim81/plugin/netrwPlugin.vim
    / usr /share / vim / vim81 / plugin / rrhelper.vim
    /usr/share/vim/vim81/plugin/spellfile.vim
    /usr/share/vim/vim81/plugin/tarPlugin.vim
    / usr/ доля / ВИМ / VIm81 / plugin / tohtml.vim
    /usr/share/vim/vim81/plugin/vimballPlugin.vim
    /usr/share/vim/vim81/plugin/zipPlugin.vim
    / usr / share / vim/vim81/ftplugin/xml.vim
    /usr/share/vim/vim81/indent/xml.vim
    /usr/share/vim/vim81/syntax/xml.vim
    / usr / share /vim / vim81 / syntax / dtd.vim
    ~ / .vim / ftplugin / typescript.vim
    ~ / .vim / compiler / typescript.vim
    ~ / .vim / indent / typescript.vim
    ~ / .vim / syntax / typescript.vim

  • Кроме того, я не уверен, что это полезная информация, но я использую ViM 8.1 для Windows 10 (устанавливается вместе с git-bash)

1 Ответ

0 голосов
/ 28 февраля 2019

Я не уверен, почему ваш 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; использование каталога после позволяет вам переопределить любые настройки типа файла по умолчанию, сделанные $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<'

При этом 'equalprg' все равно будет кратко установлендо тех пор, пока тип файла - XML, но он будет отменен командой, определенной в b:undo_ftplugin, которую Vim выполняет автоматически, когда тип файла меняется на typescript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...