2016-07-17 15 views
2

我编写了一个Vim脚本,用于Fortran程序单元的自动填充,类型定义等,从vim-latex插件获取提示。作为构造名称使用的占位符正确缩进

此刻,如果我打<F5>当光标上的字program,我得到以下

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+> 

这就是为什么我认为soultion必须存在,并没有那么复杂。

+3

考虑一个现有的片段解决方案可能是一个更好的主意,例如[UltiSnips](https://github.com/SirVer/ultisnips)。 [vim-snippets](https://github.com/honza/vim-snippets)片段集合可以与它一起使用,并且它有一个用于Fortran的片段。 –

+0

我想我正确安装了UltiSnips,因为':help UltiSnips'能够工作,但是我没有设法安装vim-snippets。 –

+0

你为什么觉得你没有设法安装'vim-snippets'?与其他插件不同,'vim-snippets'只是它不能“做”任何事情的数据。 –

回答

0

我决定用“肮脏”的方式解决问题,即在产生IF...THEN...ELSE...END IFDO...END DO构造的命令序列中插入适当位置的空格。这不是一个优雅的解决方案,但我认为这没有太多的缺点。唯一需要改变的是根据shiftwidth手动添加到命令序列的空间数量。

作为@SatoKatsura在评论中建议,放弃这条道路并使用现有的片段解决方案会更好。

相关问题