让Vim在缩进时忽略行首第一个字符

5
每当我需要编辑Perl Mason文件时,我总是在缩进代码行时遇到问题,因为Perl代码以开始。例如:
<div>
    <div>
%       if( !$something ) {
            <strong><% $title %></strong>
%       }
    </div>
</div>

有什么办法可以告诉Vim忽略行首的%,并且像它不存在一样缩进吗?
我正在使用https://github.com/aming/vim-mason 来支持混合Perl / HTML语法,但我不认为这会改变任何东西。
1个回答

3
这是嵌入在HTML中的Perl代码,因此缩进来自于 $VIMRUNTIME/indent/html.vim。这定义了一个'indentexpr',由HtmlIndent()实现。
您需要修改该实现以忽略第一列中的%;每当它访问缓冲区(getline()prevnonblank()shiftwidth())时,您需要拦截,找到上一个具有这样的%符号的行,并返回该值。(如果这些特殊行也可以包含HTML标记,则可能需要从Perl代码中提取这些标记并仅返回这些标记。)这将为您提供所需的缩进。
不幸的是,这并不是微不足道的工作,您必须分叉原始实现。但是,如果您成功实现了一个简洁的解决方案,您可以建议向indent/html.vim的作者添加集成点。如果除了Mason之外还有其他使用这些前缀的语言,那么这将是支持添加这种支持(甚至是您的包装函数)的额外论据。

3
请勿在不留言的情况下给出负面评分。如果您不喜欢提出的解决方案(因为需要付出很多努力),我能理解,但请不要攻击传递信息的人! - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接