vim自动硬包装为fortran与续线

时间:2016-03-16 17:18:59

标签: vim fortran

我是Fortran程序员,使用自由格式和固定格式。由于我必须混合使用它们,通常我会在自由格式和固定格式之间以通用形式编写代码,因此我可以告诉vim我的所有文件都是自由格式。

Vim非常适合做自动注册,但是我想输入并让vim自动包装我的代码,然后放置Fortran延续字符&在第73栏(或更高),以及在新行的第6栏。它是否可能,或者它是否存在插件?

目前我在fortran文件中使用textwidth = 72来硬包装线。

提前致谢。

1 个答案:

答案 0 :(得分:4)

在转到新线时,vim插入文字的一种方法是使用formatexpr。设置它以捕获该行并在其位于/超出给定列时使用&和附加的新行替换它自己。在这种情况下,您正在处理换行符,textwidth不适用。我还没有为它测试一些简单的代码,但这里是related example

另一种方法是编写通用代码,以便在给定列中插入&<CR>

然而,任何这样的方法都要尊重Fortran特定的排除(评论,一件事)会使它更复杂。最好的解决方案是为Fortran找到合适的现有选项,但到目前为止我还没有。

这是对缩进的评论。它应该允许您直接为新行设置所需的规则。这是一组标准文件,它们设置了许多缩进规则和功能。

通常的入口点是vim script,这需要另一组标准文件。该页面上为其他文件提供的链接已被破坏,因此可以在此处找到它们:解压缩this zip file(在this page)上找到,直到您的~/.vim/目录。它将创建子目录indent/syntax/ftpplugin/,或者如果文件存在则将文件放入其中,所以如果你已经有了东西,请小心。

然后,您可以将上面链接的第一个脚本放入.vim/after/indent/。在此文件中,有一些特定的计算方法可以在输入新行时放置光标。找到正确的位置并更改为您想要的缩进,或者最好在另一个文件中设置一个片段(以免更改此文件)。在这种情况下,您还需要进行设置,以便覆盖第一个文件中的设置。

有用的资源是indentexpr(或:help indentexpr)。 这也是tutorial

这些是对语法的评论,最初发布。它们包含与您想要的相关的帮助项目,并且通常应该是有用的,但可能没有太多关于添加&的说法。

有fortran的插件。这是the syntax file,需要调整很多内容。

这可能已经存在于您的系统上。 (它在我的身上。)因此,我会选择要添加到.vimrc的内容。以下是几个直接相关的选项

syn match fortranContinueMark display "&"
syn sync linecont "&" minlines=20

这些似乎与我相关的段落

if (b:fortran_fixed_source == 1)
  if !exists("fortran_have_tabs")
    "Flag items beyond column 72
    syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72
    "Flag left margin errors
    syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab
    syn match fortranLabelError "^.\{4}\d\S"
  endif
  syn match fortranComment excludenl "^[!c*].*$" contains=@fortranCommentGroup
  syn match fortranLeftMargin       transparent "^ \{5}"
  syn match fortranContinueMark     display "^.\{5}\S"lc=5
else
  syn match fortranContinueMark     display "&"
endif

if b:fortran_dialect != "f77"
  syn match fortranComment  excludenl "!.*$" contains=@fortranCommentGroup,@spell
endif

然后,syn match语句的块跟随常见的类似cpp的设置,然后

"Synchronising limits assume that comment and continuation lines are not mixed
if exists("fortran_fold") || exists("fortran_more_precise")
  syn sync fromstart
elseif (b:fortran_fixed_source == 0)
  syn sync linecont "&" minlines=20
else
  syn sync minlines=20
endif

根据您的问题,您似乎知道如何设置.vimrc,但这里有一些评论。

需要使用适当的enableautogroup语句启用语法支持,例如

syntax enable
" au BufRead,BufNewFile *.f90 FileType=fortran
au FileType fortran setlocal ...

以下是我为fortran提供的一些常见格式选项

autocmd FileType fortran setlocal formatoptions=croql comments=:/!/

对于t

,选项中还可以有textwidth个选项

以下是我所拥有的一些特定设置,我在此语法文件中看到了更为复杂的设置

let fortran_free_source=1 
" Said to need fortran.vim and/or fortran support packages (they work)
let fortran_do_enddo=1
let fortran_more_precise=1

标准vim帮助当然是广泛的,但请尝试:help fortran - 它预先有许多有用的设置,而且根本不是压倒性的。另请参阅帮助中的ft-fortran-syntax

如果操作不正确,请参阅this post并进行一些故障排除。这是另一个useful post,即使它看起来与其标题无关。