Introduction

This is a fortran ide for vim. It is intended to make the coding with fortran easier and faster in vim.

Features

Install

The easiest way of installation is to use a vim plugin manager.

 Plugin 'rudrab/vimf90' 
 Plug 'rudrab/vimf90' 

Dependencies

  1. Ultisnips: (Essential) Snippetes

Features

Default leader key used here is `. You can change this by using:

let g:VimF90Leader = "your chosen key"

in your .vimrc.

Completions

There are two ways to do the completions. One is Inbuilt Completions and Completions using Ultisnips

Inbuilt

if,do,select etc statements, that are closed by a corresponding end is defined here. after typing the first line, pressing <f7> will complete the construct. for example: you type:

trial: do i=1,10<f7>        

you will get:

trial: do i=1,10
  &#9014;
end do trial
Subprograms

These key-combinations makes program and subprograms header. it supports program(`prg), module(`mod), subroutine(`sub) and function(`fun). For example,

`prg

will yeild:

!this is file : <your file name>
! author= <users login name>
! started at: <current time>
! 
program  <filename>
implicit none
  <++start typing++>
end program  <filename>
available constructs
type: get:
`prg program header
`mod module header
`sub subroutine header
`fun function header
Constructs:
type: get
[name:]do[iterator]<f7> do construct
[name:]if(condition)then<f7> if construct
selectcase<f7> select construct
forall<f7> forall construct
type::name<f7> type construct

NB: this part is shamelessly copied from fortran-codecomplete

Statements

Some statements is included here for less typing. these are mostly one-liner or part of the line:

you type: you get
`wr write(⌶,*)<++>
`rd read(⌶,*)<++>
`re real(⌶)::<++>
`int integer(⌶)::<++>
`ch character(len=⌶)::<++>
`par parameter
`sre selected_real_kind(⌶)
`sie selected_integer_kind(⌶)

The <++> is a nice option, a <c-j> will put your cursor in that position. Use

 inoremap <c-j> <Esc>/<++><CR><Esc><cf>

in your .vimrc for this feature.

Ultisnips

Completions can also be achieved using Ultisnips (Few snippets are supplied with this code, as ultisnips does not provide fortran snippets. More snippets are welcome!). if, do, do while etc is inbuilt. You should define your ultisnips trigger in your vimrc(<c-b> here).

Type Get
do<c-b> do construct
if<c-b> if construct

and so on. Please check vimf90/Ultisnips/fortran.snippets in your .vim/ for complete list. (Too lazy to type all.)

Fortran subprogram complete

vimf90 now supports subprogram completions. <leader>use and <leader>call will popup a list of modules and subroutine inside present working dirs and fortran’s standard module and subroutines.

Update: Moving completions completely to coc-nvim and LSP implemented there. See dependencies section.

Linting

Basic linting is enabled. So, when a operator is typed preceded by a space, e.g. A =B⌶, a space is automatically inserted, yielding A = B⌶. This basically enables pep8’s whitespace rule in fortran. You can enable/disable linting behaviour using

let g:VimF90Linter =0/1/-1

where

For more, use dedicated linting packages like ALE.

Menu is added for gui-help. it helps building project using gnu-autotool. Every fortran file will open with fortran90 element in the menubar. it currently has the option of compile(make, make clean, build current file), automake( a rudimentary configure.ac and makefile.am file generator) and programing blocks (as given in Subprograms).

Other Suggested Plugins

  1. coc-nvim: (Highly Recommended) Autocompletion and language server protocol.
  2. ALE: (Recommended) Dedicated plugin for Linting and syntax checking.

Contact

The preferred way of contacting me is via github project page.

My other apps

Other apps I have developed: