vim缩进:文件中的多种语言

时间:2014-06-24 19:42:28

标签: vim

假设我有以下文件:temp.html正确缩进,它看起来像这样:

<html>
    <head>
    </head>
    <body>
        <script type="text/javascript>
            function blahblahblah(...) {
                doSomething();
            }
            function something else() {
                etc...;
            }
        </script>
    </body>
</html>

然而,当我输入gg = G时,我会得到这样的结果:

<html>
    <head>
    </head>
    <body>
        <script type="text/javascript>
            function blahblahblah(...) {
            doSomething();
            }
            function something else() {
            etc...;
            }
        </script>
    </body>
</html>

因为,我的javascript缩进搞砸了。我的.vimrc中有filetype plugin indent on,它似乎适用于我的HTML。但是,我的代码的javascript部分没有正确缩进。如何使用vim正确缩进包含多种语言代码的文件?

1 个答案:

答案 0 :(得分:1)

缩进混合文件类型永远不会在Vim中正常工作,除非您使用更适合该任务的(通常是语言特定的)外部程序。

我建议js-beautify可以在HTML中格式化JavaScript。

这是我用来格式化纯JS的命令(把它放在~/.vim/after/ftplugin/javascript.vim中):

command! -buffer -range=% Format let b:winview = winsaveview() |
  \ execute <line1> . "," . <line2> . "!js-beautify -f - -j -B -s " . &shiftwidth |
  \ call winrestview(b:winview)

这是我用于格式化HTML的命令,可选择嵌入式JS(将其放在~/.vim/after/ftplugin/html.vim中):

command! -buffer -range=% Format let b:winview = winsaveview() |
  \ execute <line1> . "," . <line2> . "!html-beautify -f - -I -s " . &shiftwidth |
  \ call winrestview(b:winview)

这些命令的工作方式相同:

:Format      " formats the whole buffer
:5,23Format  " formats lines 5 to 23
:'<,'>Format " formats the visually selected lines