2016-07-17 18 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在評論中建議,放棄這條道路並使用現有的片段解決方案會更好。

相關問題