Introduction
fortran ide for vim. It is intended to make the coding with fortran easier and
faster in vim.
Features
- 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-endifetc. - Popup menu for standard and user defined modules and subroutines
- Support for menu mode
- Support for gnu-autotools (configure, make)
Install
The easiest way of installation is to use a vim plugin manager.
Plugin 'rudrab/vimf90'
Plug 'rudrab/vimf90'
Dependencies
- 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.)
Options
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.2is preferred). Option 2 will installfprettifyandfortls.-1will disable linting.3will stop asking about installingfprettifyandfortlsfortran_completer: Completing do, if etc. Default is<F3>.fprettify_options: Works only withfortran_linter=2. Checkfprettify --helpfor 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 \.
Features
Default leader key used here is `. You can change this by using:
let fortran_leader = "your chosen key"
in your .vimrc.
Completions
There are two ways to do the completions. One is Inbuilt Completions and Completions using snippets
Inbuilt (completed using fortran_leader)
This is deprecated.
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
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.
Subprograms (completed using fortran_completor)
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>
available constructs
| type: | get: |
|---|---|
| `prg | program header |
| `mod | module header |
| `sub | subroutine header |
| `fun | function header |
Snippets
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).
This is tested for Ultisnips. snipmates comes with fortran snippets.
| 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.
Linting (Controlled by fortran_linter)
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 installfortlstoo. Modify fprettify options withfprettify_optios.3: Stop asking you about installingfprettifyandfortls.-1: Disable Linting.
Compile and Autotool Support
Some build and GNU autotool features are added. You can configure the options to your tastes.
Available compilation options
variables
fortran_compiler: Set fortran compiler. Default isgfortranfortran_exeExt: Executable Extension. Default is''. So, the executable offoo.f90isfoofortran_fcflags: Compiler options. Default is-Wall -O0 -cfortran_flflags: Compiler options. Default is-Wall -O0Keyboard shortcuts (Your current options are visible in
menu)fortran_compile: Compile current buffer. Default is<leader>ccfortran_exe: Create the executable, without running it. Default in<leader>cefortran_run: Compile and run current buffer. Default is<leader>crfortran_cla: Command Line Arguments for compile and run current buffer. Default is<leader>clfortran_dbg: Debug current buffer. Default is<leader>cdfortran_make: Make if makefile exists. Default is<leader>mkfortran_makeProp: CLA to make. Default is<leader>mpfortran_genProj: Creates a gnu style project structure. Default is<leader>gp
Menu
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).
Language Server Protocol
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/'],
\ }
}
Contact
The preferred way to contact me is through github issues.
My other apps
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