fortran
ide
for vim
. It is intended to make the coding with fortran
easier and
faster in vim.
if-endif
etc.The easiest way of installation is to use a vim plugin manager.
Plugin 'rudrab/vimf90'
Plug 'rudrab/vimf90'
8+
. Vim must be build with python3+
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 use 2
). Default is 1
. 2
is preferred).
Option 2 will install fprettify
and fortls
. -1
will disable linting. 3
will stop asking
about installing fprettify
and fortls
fortran_completer
: Completing do, if etc. Default is <F3>
.fprettify_options
: Works only with fortran_linter=2
. Check fprettify --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
fortran_leader
)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.
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>
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.
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 install
fprettify
. This will automatically install fortls
too. Modify fprettify options with
fprettify_optios
.3
: Stop asking you about installing fprettify
and fortls
.-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 is gfortran
fortran_exeExt
: Executable Extension. Default is ''
. So, the executable of foo.f90
is foo
fortran_fcflags
: Compiler options. Default is -Wall -O0 -c
fortran_flflags
: Compiler options. Default is -Wall -O0
menu
)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