加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Vim中缩进Fortran代码

发布时间:2020-12-16 01:06:44 所属栏目:安全 来源:网络整理
导读:我有一个看起来像这样的fortran代码: open(2,file=filenm(i),status='unknown') do j=1,num_lines do k=1,dime read(2,*) z(k) enddo if( j .ge. 1000 ) then do k=1,dime sumz(k)=sumz(k)+z(k) enddo nsteps=nsteps+1.0 endif enddo close(2) 你可以看到压
我有一个看起来像这样的fortran代码:

open(2,file=filenm(i),status='unknown')
         do j=1,num_lines
            do k=1,dime
                     read(2,*) z(k)
            enddo
               if( j .ge. 1000 ) then
                     do k=1,dime
                              sumz(k)=sumz(k)+z(k)
                     enddo
                     nsteps=nsteps+1.0
               endif
         enddo
   close(2)

你可以看到压痕不均匀,我想要一些东西
像这样:

open(2,status='unknown')
          do j=1,num_lines
                 do k=1,dime
                        read(2,*) z(k)
                 enddo
                 if( j .ge. 1000 ) then
                        do k=1,dime
                               sumz(k)=sumz(k)+z(k)
                        enddo
                        nsteps=nsteps+1.0
                 endif
          enddo
   close(2)

我可以逐行修复缩进,但代码有点大.
我感谢任何评论.

解决方法

我经历了一个非常类似的尝试让Fortran缩进到vim工作的过程.我仍然没有很好,但我已经取得了一些进展. arutaku发布的脚本( http://www.vim.org/scripts/script.php?script_id=2299)是我开始的地方,但您需要确保文件类型插件缩进在您的vimrc中.

我还需要一个脚本来确定我是使用固定格式还是自由格式语法,因为在我的环境中我使用两者.这在文档(http://vimdoc.sourceforge.net/htmldoc/syntax.html#ft-fortran-syntax)中是推荐的.正如它所指定的那样,我把这个脚本放在?/ .vim / ftplugin / fortran.vim中:

let s:extfname = expand("%:e")
if s:extfname ==? "f90"
  let fortran_free_source=1
  unlet! fortran_fixed_source
else
  let fortran_fixed_source=1
  unlet! fortran_free_source
endif

我还使用一个脚本,以便我可以按F7自动完成某些构造:http://www.vim.org/scripts/script.php?script_id=2487.我也把它放在?/ .vim / ftplugin /中.

我也在我的vimrc中有这些以尝试进一步改进:

let fortran_do_enddo=1
let fortran_more_precise=1
let fortran_have_tabs=1

我相信那些应该与第一个脚本相互作用来控制它的行为,但我不相信它们都适合我.我知道第一个应该正确缩进do / enddo块.问题在于,由于旧式Fortran允许没有匹配的enddo,脚本无法正确缩进它们,除非您可以保证不会使用不匹配的’do’语句. let fortran_do_enddo = 1应该是那个保证,但它似乎对我不起作用.最后一个应该允许使用选项卡字符,旧的Fortran认为它不好,因此它可以防止它们被标记为错误.那个似乎对我有用.说实话,我不记得中间人应该做什么,也不记得它对我有用.

编辑:

我发现我的vim安装目录(/usr/share / vim / vim70 / indent /在我的情况下)中有第一个脚本的旧版本,我没有访问权限.您可能拥有这些权利,如果它导致您出现问题,请覆盖或删除它.如果像我一样,你无法编辑它,你可以在$HOME中获取版本来覆盖第一个中的函数.我通过做两件事来做到这一点.首先,我必须删除检查以查看函数是否已经存在(如果存在的语句(“* FortranGetFixedIndent”))然后我必须更改所有函数声明以强制覆盖使用!性格,即功能! SebuFortranGetFreeIndent().据我所知,一切现在大致如我所料!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读