2016-07-17 6 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-фрагменты. –

+0

Почему, по-вашему, вам не удалось установить 'vim-snippets'? В отличие от других плагинов, 'vim-snippets' - это только данные, которые он« ничего не делает ». –

ответ

0

Я решил решить проблему «грязным» способом, то есть вставив пробелы в правильное положение в командную последовательность, генерируя конструкциии DO...END DO. Это не изящное решение, но я не думаю, что у него так много недостатков. Единственное, что нужно изменить, это количество пробелов, добавляемых вручную в последовательности команд в соответствии с shiftwidth.

Как пояснил @SatoKatsura в комментарии, было бы лучше отказаться от этой дороги и использовать существующие варианты отрывков.

 Смежные вопросы

  • Нет связанных вопросов^_^