我是Fortran程序员,使用自由格式和固定格式。由于我必须混合使用它们,通常我会在自由格式和固定格式之间以通用形式编写代码,因此我可以告诉vim我的所有文件都是自由格式。
Vim非常适合做自动注册,但是我想输入并让vim自动包装我的代码,然后放置Fortran延续字符&在第73栏(或更高),以及在新行的第6栏。它是否可能,或者它是否存在插件?
目前我在fortran文件中使用textwidth = 72来硬包装线。
提前致谢。
答案 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
,但这里有一些评论。
需要使用适当的enable
和autogroup
语句启用语法支持,例如
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,即使它看起来与其标题无关。