And*_*Gil 5 vim perl indentation mason
每当我必须编辑Perl Mason文件时,由于Perl代码的开头,我总是会出现缩进行的问题%.例如:
<div>
<div>
% if( !$something ) {
<strong><% $title %></strong>
% }
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能告诉Vim忽略%线的开头和缩进,就像它不存在?
我正在使用https://github.com/aming/vim-mason来支持混合的Perl/HTLM语法,但我认为它不会改变任何东西.
这是嵌入 HTML 中的 Perl 代码,因此缩进来自$VIMRUNTIME/indent/html.vim. 这定义了一个'indentexpr',由 实现HtmlIndent()。
您需要修改该实现以%在第一列中忽略;每当它访问缓冲区(getline()、prevnonblank()、shiftwidth())时,您都需要拦截,找到具有此类%标志的上一行,然后返回该值。(如果这些特殊行还可以包含 HTML 标记,您可能必须从 Perl 代码中提取这些标记并仅返回这些标记。)这将获得您想要的缩进。
不幸的是,这并不是一件小事,你必须分叉原始的实现。但是,如果您设法实现一个干净的解决方案,您可以建议向indent/html.vim. 如果除了 Mason 之外还有其他语言在 HTML 之上使用这些前缀,那么这将是添加此类支持的额外参数(甚至可能是您的包装函数)。