代码之家  ›  专栏  ›  技术社区  ›  mmcdole

如何在VI中整理HTML文件的缩进?

  •  113
  • mmcdole  · 技术社区  · 16 年前

    我试了通常的方法 "gg=G command

    :filetype = xml

    10 回复  |  直到 5 年前
        1
  •  198
  •   tylerl    12 年前

    有几件事都需要做好。只需在一个位置对它们进行总结:

    :filetype indent on
    :set filetype=html           # abbrev -  :set ft=html
    :set smartindent             # abbrev -  :set si
    

    然后,将光标移动到文件顶部并缩进到结尾: gg =G
    或者选择要缩进和点击的所需文本 =

        2
  •  96
  •   Rory O'Kane Erce    10 年前

    具有 filetype indent on 在我的内心 .vimrc ,Vim非常好地缩进HTML文件。

    一个简单的例子 shiftwidth 第2部分:

    <html>
      <body>
        <p>
        text
        </p>
      </body>
    </html>
    
        3
  •  71
  •   the Tin Man    5 年前

    使用智能缩进的主要问题是,如果XML(或HTML)位于一行上,那么它可能最终从一个curl请求返回 gg=G 我不会这么做的。相反,我刚刚体验了一个很好的缩进,使用tidy直接从VI调用:

    :!tidy -mi -xml -wrap 0 %
    

    这基本上告诉VI调用tidy来清理XML文件,而不是包装这些行,以使它们适合默认的68个字符宽的行。我处理了一个29MB的XML文件,花了5到6秒钟。我想对于HTML文件,命令应该是:

    :!tidy -mi -html -wrap 0 %
    

    如评论中所述, tidy 是一种基本工具,可以在许多基本Linux/MacOS系统上找到。这是projet的页面,以防您希望拥有它但没有: HTML Tidy

        4
  •  49
  •   the Tin Man    5 年前

    正如tylerl在上面解释的,设置以下内容:

    :filetype indent on
    :set filetype=html
    :set smartindent
    

    但是,请注意,在vim 7.4中,HTML标记 html , head , body

    :let g:html_indent_inctags = "html,body,head,tbody" 
    

    见“ HTML indenting not working in compiled Vim 7.4, any ideas? alternative html indent script “了解更多信息。

        5
  •  12
  •   the Tin Man    5 年前

    这是我的解决方案,可以很好地以很好的间隔打开“丑陋”的HTML:

    vim fileIn.html -c "set sw=2 | %s/>/>\r/ | execute 'normal gg=G' | set nohlsearch | g/^\\s*\$/d"
    
    • sw 命令是因为我的默认值是4,这对于HTML来说太高了。
    • 下一部分在每个元素后面添加一个换行符(Vim认为这是回车,叹气)( >
    • 然后使用 = .
    • > (因为我有 set hlsearch 在我的vimrc中)。
    • Vim delete blank lines

    你甚至可以加上 | wq! fileOut.html 最后,如果您根本不想输入Vim,只需清理文件即可。

        6
  •  7
  •   SimonW    11 年前

    https://github.com/maksimr/vim-jsbeautify

    在上面的链接中,您拥有所有信息:

    1. 配置(从第一个示例复制)
    2. :call HtmlBeautify()

    干得漂亮!

        7
  •  6
  •   Tomas Giro    4 年前

    >< 具有相同的字符,但中间有断线。

    :%s/></>\r</g
    

    然后命令

    gg=G
    

        8
  •  4
  •   JaredPar    16 年前

    您是否尝试过在Vim站点上使用HTML缩进脚本?

        9
  •  4
  •   Lemur    12 年前

    这里有一个很重的解决方案,可以让你缩进,再加上所有你在编辑时不必关心的HTML漂亮打印。

    首先,下载 Tidy

    overview ,以及 all the options . 这是我的配置文件:

    bare: yes
    break-before-br: no
    clean: yes
    drop-proprietary-attributes: yes
    fix-uri: yes
    indent-spaces: 4
    indent: yes
    logical-emphasis: yes
    markup: yes
    output-xhtml: yes
    quiet: yes
    quote-marks: yes
    replace-color: yes
    tab-size: 4
    uppercase-tags: no
    vertical-space: yes
    word-2000: yes
    wrap: 0
    

    另存为 tidyrc_html.txt ftplugin

    html.vim ,也在

    map <leader>tidy :%! tidy -config ~/vimfiles/ftplugin/tidyrc_html.txt <CR>
    

    要使用它,只需打开一个HTML文件,然后键入 /tidy . (那 / <leader> 钥匙。)

        10
  •  2
  •   chtenb    3 年前

    您可以将两者结合起来 tidy html-beautify 自动安装插件 vim-autoformat . 之后,您可以通过一次击键来执行安装的任何格式化程序。

        11
  •  0
  •   wisbucky Ishan    6 年前

    gg=G 似乎“断开”(如每行左缩进),很可能缩进插件未启用/加载。它应该给出一条错误消息,而不是仅仅做不好的缩进,否则用户只会认为自动格式化/缩进功能很糟糕,而实际上它很好。

    要检查缩进插件是否已启用/加载,请运行 :scriptnames .../indent/html.vim 在名单上。如果没有,则表示插件未加载。在这种情况下,将此行添加到 ~/.vimrc :

    filetype plugin indent on
    

    现在,如果打开文件并运行 :脚本名 …/indent/html.vim . 然后跑 gg=G ,现在应该执行正确的自动格式化/缩进。(虽然它不会添加换行符,所以如果所有html代码都在一行上,它不会缩进)。

    注意:如果您正在跑步 :filetype plugin indent on 在vim命令行上,而不是 ~/.vimrc :e

    而且,你不需要担心 autoindent smartindent 设置,它们与此无关。