【问题标题】:Can Vim do Fortran completion of subroutine argumentsVim 可以对子例程参数进行 Fortran 补全吗
【发布时间】:2010-10-23 19:38:12
【问题描述】:

我不知道这是否可能,但仍然......问一下没有什么坏处。

我正在使用 Vim 编辑新旧 fortran 文件(.for 和 .f90)。我正在尝试完成,类似于 Visual Studio,因此当我在文件中定义了多个子例程时:

subroutine init ( ibc, nquad, ul, ur, xl, xr )
subroutine output ( f, ibc, indx, nsub, nu, ul, ur, xn )
subroutine phi ( il, x, phii, phiix, xleft, xrite )

我在某个地方给他们打电话:

call init(<cursor is here>

我得到了参数列表,所以我不必记住它们。如果我理解正确,VS 将其称为“智能感知”。

在 Vim (GVim72) 中是否有类似的东西,如果有,如何让它工作? 任何提示表示赞赏。


ldigas 编辑:如果我能得到声明行,我也会很满意,也就是说,当我输入时:

call init(<cursor is here>

然后按完成键,Vim 会打入整行,例如

call init( ibc, nquad, ul, ur, xl, xr )

ldigas edit2: 2 个回答到目前为止被撤回......很有趣。


【问题讨论】:

    标签: vim autocomplete intellisense fortran


    【解决方案1】:

    最近的应该是vim intellisense。不幸的是,它还不支持 Fortran...

    【讨论】:

    • 是的,我在谷歌搜索时看到了。不幸的是,正如你所说,它没有帮助。我还发现人们在这里和那里提到了一些其他(更像 vim)的替代方案,但与 fortran 无关。希望其他人会知道更多...
    【解决方案2】:

    部分答案:

    好吧,我拿到了第一部分:

    Vim 的整行补全被调用

    <Ctrl-X, Ctrl-L>
    

    (如果它在同一个文件中,顺便说一句,通常不是)

    不幸的是,如果子例程声明看起来像

    call assemble ( adiag, aleft, arite, f, h, indx, nl, node, nu, nquad, &
    nsub, ul, ur, xn, xquad )
    

    (其中“&”是续号)这种方式是行不通的。有没有人(来吧,脚本 vimers)知道避免这种行为的方法吗?

    【讨论】:

      【解决方案3】:

      我认为您可能能够获得的最接近的是 vim 功能,其工作方式类似于 intellisense,但让我们使用语法突出显示文件作为基础。以我的 .vimrc 文件为例。基本上它为每个列出的类型设置自动完成:如果文件类型受omnisense支持,则使用它,否则使用语法高亮文件。

      syntax on
      colorscheme elflord
      set tabstop=4
      set shiftwidth=4
      set nu!
      set et!
      filetype on
      filetype plugin on
      autocmd FileType python set omnifunc=pythoncomplete#Complete
      autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
      autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
      autocmd FileType css set omnifunc=csscomplete#CompleteCSS
      autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
      autocmd FileType php set omnifunc=phpcomplete#CompletePHP
      autocmd FileType sql set omnifunc=sqlcomplete#Complete
      autocmd FileType c set omnifunc=ccomplete#Complete
      if has("autocmd") && exists("+omnifunc")
          autocmd Filetype *
              \   if &omnifunc == "" |
              \       setlocal omnifunc=syntaxcomplete#Complete |
              \   endif
      endif 
      

      另一种可能性是查看 vim.org 网站。例如,我在那里找到了以下内容(即使它不完全是您要查找的内容,这只是一个示例)

      fortran_codecomplete.vim : Complete fortran constructs with

      希望对你有帮助

      【讨论】:

      • 不幸的是,onmnifunc 似乎不能很好地与 fortran 一起工作。至少不是我需要的方式。至于第二部分,我知道 Michael Goerz 的插件,但这不是我需要的。他所做的是制作一个插件,一种 sn-ps 插件。周围有很多,snipmate,xptemplate ...仅举几例。长话短说,这里没有运气。不过,我仍然感谢您的努力。
      【解决方案4】:

      又快又脏:Exuberant CTAGS

      VIM 非常了解标签。不幸的是,这并不是您想要的那种巧妙的行为:您最终会在窗口之间弹跳,但我认为这很棒,因为我没有别的东西。

      可能有用的是Photran,但我从未使用过它。但是,由于它是开源且可配置的,您可能会发现有人已经走上了您的道路,例如,似乎有一个VIM plugin。 YMMV。

      【讨论】:

      • 我目前也使用 ctags,它运行良好,但确实在窗口之间弹跳很烦人。像 OP 建议的自动完成非常好,但我只发现 c++。
      猜你喜欢
      • 2016-04-28
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      相关资源
      最近更新 更多