用作构造名称的占位符会损害正确的缩进



我编写了一个 Vim 脚本,用于自动完成 Fortran 程序单元、类型定义等,从 vim-latex 插件中得到启发。

目前,如果我在光标位于单词program上时按<F5>,我会得到以下内容

PROGRAM <+program_name+>           
    USE <+used_module_name+>
    IMPLICIT NONE
    <++>
END PROGRAM <+program_name+>

第一个<+program_name+>视觉选择,Vim 处于选择模式。这对我来说是完美的。

当我使用这样的占位符作为IF构造的标签时,就会出现问题。当我展开if时,我得到

    <+name+>: IF (<+logical expression+>) THEN
    <++> ! this line is not indented => in turn the following are negative indented
ELSE IF (<+logical expression+>) THEN
    <++>
ELSE
    <++>
END IF <+name+>

其中第二行没有缩进,因为(至少我想!)字符串<+name+>不是有效名称。结果,以下行向后移动(显然,当 if 在第一列中时,第二行是唯一错误的行)。

DO 构造也会发生这种情况,但奇怪的是,SELECT CASE 构造不会发生这种情况:

<+name+>: SELECT CASE (<+case expression+>)
CASE (<+case selector+>)
    <++>   
CASE DEFAULT
    <++>   
END SELECT <+name+>

这就是为什么我认为灵魂必须存在并且没有那么复杂。

我决定以"肮脏"的方式解决问题,即通过在生成IF...THEN...ELSE...END IFDO...END DO结构的命令序列中的适当位置插入空格。这不是一个优雅的解决方案,但我认为它没有那么多缺点。唯一要更改的是要根据shiftwidth手动添加到命令序列中的空格数。

正如@SatoKatsura在评论中建议的那样,最好放弃这条路并使用现有的代码段解决方案。

相关内容

  • 没有找到相关文章

最新更新