fortran
ide
for vim
. It is intended to make the coding with fortran
easier and
faster in vim.
- An ide like environment for fortran 90+
- Supports LSP
- Increases development speed considerably.
- Easy to add new subprograms
- Auto completion of program blocks, like
if-endif
etc. - Popup menu for standard and user defined modules and subroutines
- Support for menu mode
- Support for gnu-autotools (configure, make)
The easiest way of installation is to use a vim plugin manager.
Plugin 'rudrab/vimf90'
Plug 'rudrab/vimf90'
- Modern vim, tested and developed with
8+
. Vim must be build withpython3+
- Ultisnips: (Essential) Snippets.
- language server protocol aka fortls: Highly recommended.
- coc-nvim: Recommended to use fortls.
- fprettify.
fortls
and fprettify
will be installed automatically if you enable the feature (see below.)
There are several options to configure how VimF90
will work.
fortran_leader
: Set your leader. Default is "`"fortran_linter
: Rudimentary linting (unless you use2
). Default is1
.2
is preferred). Option 2 will installfprettify
andfortls
.-1
will disable linting.3
will stop asking about installingfprettify
andfortls
fortran_completer
: Completing do, if etc. Default is<F3>
.fprettify_options
: Works only withfortran_linter=2
. Checkfprettify --help
for available options. Default is--silent
.
N.B fortran_leader
is different from <Leader>
. <Leader>
is a universal key for vim.
Check your leader
using :echo mapleader
and :h Leader
. By default, it's \
.
Default leader
key used here is `. You can change this by using:
let fortran_leader = "your chosen key"
in your .vimrc
.
There are two ways to do the completions. One is Inbuilt Completions and Completions using snippets
Full completions will be handed over to snips step by step. This also means, inbuilt completions related bugs will no more be fixed; rather snippets will be created.
if
,do
,select
etc statements, that are closed by a corresponding end
is defined here. after typing the first line, pressing <F3>
will
complete the construct. for example:
you type:
trial: do i=1,10<F3>
you will get:
trial: do i=1,10
<cursor here>
end do trial
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
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.
These key-combinations makes program and subprograms header. It supports program(`prg),
module(`mod), subroutine(`sub) and function(`fun). The initiator ` can be changed using
fortran_leader
(See Options for more). 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>
type: | get: |
---|---|
`prg | program header |
`mod | module header |
`sub | subroutine header |
`fun | function header |
Completions can also be achieved using snippets (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.)
NB: Kindly consider submitting your snippets
as pull request. This will help me enhance my
snippets.
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 python's pep8-like
whitespace rule in fortran.
You can enable/disable linting behaviour using
let fortran_linter =0/1/2/3/-1
where
0
: linting as you write. But this will check every keystroke. Use cautiously. Mostly for testing purpose.1
: Default. Lint only when you save a buffer2
: Strongly recommended. Other options are there because I don't want to force you to installfprettify
. This will automatically installfortls
too. Modify fprettify options withfprettify_optios
.3
: Stop asking you about installingfprettify
andfortls
.-1
: Disable Linting.
Some build and GNU autotool features are added. You can configure the options to your tastes.
fortran_compiler
: Set fortran compiler. Default isgfortran
fortran_exeExt
: Executable Extension. Default is''
. So, the executable offoo.f90
isfoo
fortran_fcflags
: Compiler options. Default is-Wall -O0 -c
fortran_flflags
: Compiler options. Default is-Wall -O0
fortran_compile
: Compile current buffer. Default is<leader>cc
fortran_exe
: Create the executable, without running it. Default in<leader>ce
fortran_run
: Compile and run current buffer. Default is<leader>cr
fortran_cla
: Command Line Arguments for compile and run current buffer. Default is<leader>cl
fortran_dbg
: Debug current buffer. Default is<leader>cd
fortran_make
: Make if makefile exists. Default is<leader>mk
fortran_makeProp
: CLA to make. Default is<leader>mp
fortran_genProj
: Creates a gnu style project structure. Default is<leader>gp
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).
To enable language server, we need coc-nvim and language
server protocol aka fortls. coc-nvim is a vim
plugin, use your favourite plugin manager to install it. fortls
is automatically installed if
fortran_linter=2
).
An example vimrc
for fortls
using coc-nvim
is shown here
let g:coc_start_at_startup = 0
augroup coc
autocmd!
autocmd VimEnter * :silent CocStart
augroup end
let g:coc_user_config = {
\ 'languageserver': {
\ 'fortran': {
\ 'command': '${HOME}/.local/bin/fortls',
\ 'args': ['--lowercase_intrinsics'],
\ 'filetypes': ['fortran'],
\ 'rootPatterns': ['.fortls', '.git/'],
\ }
}
The preferred way to contact me is through github issues.
Other apps I have developed:
-
MkBiB: BibTeX maker.
-
Periodic Table: Modern Periodic Table based on Gtk-3
-
Shadow: Icon theme for Linux desktop
-
Dual : Icon theme for Linux desktop
-
Vimf90: Fortran Plugin for vim