首页 > 解决方案 > 让 Vim 在缩进时忽略行中的第一个字符

问题描述

每当我必须编辑 Perl Mason 文件时,由于 Perl 代码以%. 例如:

<div>
    <div>
%       if( !$something ) {
            <strong><% $title %></strong>
%       }
    </div>
</div>

知道如何告诉 Vim 忽略%行首的 并像它不存在一样缩进吗?

我正在使用https://github.com/aming/vim-mason来支持混合 Perl/HTLM 语法,但我认为它不会改变任何东西。

标签: perlvimindentationmason

解决方案


这是嵌入在 HTML 中的 Perl 代码,因此缩进来自$VIMRUNTIME/indent/html.vim. 这定义了一个'indentexpr',由 实现HtmlIndent()

您需要修改该实现以%在第一列中忽略;每当它访问缓冲区 ( getline(), prevnonblank(), shiftwidth()) 时,您需要拦截,找到确实具有此类符号的上一行%,然后返回该值。(如果这些特殊行也可以包含 HTML 标记,您可能必须从 Perl 代码中提取这些标记并仅返回这些标记。)这样就可以得到您想要的缩进。

不幸的是,这不是微不足道的,您必须分叉原始实现。但是,如果您设法实现一个干净的解决方案,您可以建议向indent/html.vim. 如果除了 Mason 之外还有其他语言在 HTML 之上使用这些前缀,那将是添加此类支持的额外参数(甚至可能是您的包装函数)。


推荐阅读