2016-07-17 7 views
2

vim-latexプラグインからキューを取って、Fortranプログラム単位、型定義などの自動補完用のVimスクリプトを書きました。構造体名として使用されるプレースホルダが正しい字下げを妥協する

瞬間にカーソルが単語program上にある間、私は<F5>を打つ場合、私は視覚的に選択モードで選択し、Vimの最初<+program_name+>と、次の

PROGRAM <+program_name+>   

    USE <+used_module_name+> 

    IMPLICIT NONE 

    <++> 

END PROGRAM <+program_name+> 

を取得します。そして、これは私にとって完璧です。

このようなプレースホルダーをIF構成のラベルとして使用すると問題が発生します。私はifを展開すると私は2番目の行が原因事実にインデントされていない

<+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がある場合、2番目の行だけが間違っている)。

これもDO構築物について起こる、しかし、不思議なこと、SELECT CASE構築物については発生しません:

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

そして、私はsoultionが存在し、非常に複雑であってはならないことだと思う理由です。

+3

[UltiSnips](https://github.com/SirVer/ultisnips)などの既存のスニペットソリューションの1つを検討することをお勧めします。 [vim-snippets](https://github.com/honza/vim-snippets)コレクションのスニペットを使用することができ、Fortran用のスニペットがあります。 –

+0

':help UltiSnips'が動作するので、私は正しくUltiSnipsをインストールしたと思いますが、vim-snippetsをインストールすることはできませんでした。 –

+0

なぜ 'vim-snippets'をインストールできなかったのですか?他のプラグインとは異なり、 'vim-snippets'はデータだけで、何もしません。 –

答えて

0

私は、「汚い」方法で、つまりIF...THEN...ELSE...END IFDO...END DO構造を生成するコマンドシーケンスの適切な位置に問題を解決することに決めました。これは洗練された解決策ではありませんが、それには多くの欠点があるとは思われません。変更する唯一のことは、手動でコマンドシーケンスに追加するスペースの数がshiftwidthになることです。

@SatoKatsuraがコメントで示唆したように、この道を捨てて既存のスニペットソリューションを使用する方がよいでしょう。

関連する問題