Need help with ghcmod-vim?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

eagletmt
434 Stars 59 Forks 219 Commits 42 Opened issues

Description

Happy Haskell programming on Vim, powered by ghc-mod

Services available

!
?

Need anything else?

Contributors list

ghcmod.vim

Build Status Gitter chat

Happy Haskell programming on Vim, powered by ghc-mod

Features

  • Displaying the type of sub-expressions (
    ghc-mod type
    )
  • Displaying error/warning messages and their locations (
    ghc-mod check
    and
    ghc-mod lint
    )
  • Displaying the expansion of splices (
    ghc-mod expand
    )
  • Insert split function cases (
    ghc-mod split
    )

Completions are supported by another plugin. See neco-ghc .

Requirements

Vim

ghcmod.vim contains ftplugin. Please make sure that filetype plugin is enabled. To check it, type

:filetype
and you would see something like this:
filetype detection:ON  plugin:ON  indent:ON
. You can enable it by
:filetype plugin on
. I highly recommend adding
filetype plugin indent on
to your vimrc. See
:help :filetype-overview
for more details.

vimproc

https://github.com/Shougo/vimproc

ghc-mod >= 5.0.0

cabal install ghc-mod

Details

If you'd like to give GHC options, set

g:ghcmod_ghc_options
.
let g:ghcmod_ghc_options = ['-idir1', '-idir2']

Also, there's buffer-local version

b:ghcmod_ghc_options
.
autocmd BufRead,BufNewFile ~/.xmonad/* call s:add_xmonad_path()
function! s:add_xmonad_path()
  if !exists('b:ghcmod_ghc_options')
    let b:ghcmod_ghc_options = []
  endif
  call add(b:ghcmod_ghc_options, '-i' . expand('~/.xmonad/lib'))
endfunction

:GhcModType, :GhcModTypeClear

Type

:GhcModType
on a expression, then the sub-expression is highlighted and its type is echoed. If you type
:GhcModType
multiple times, the sub-expression changes.
  1. type1
  2. type2
  3. type3
  4. type4
  5. type5

Since ghc-mod 1.10.8, not only sub-expressions but name bindings and sub-patterns are supported.

  • type-bind
  • type-pat

Type

:GhcModTypeClear
to clear sub-expression's highlight.

Sub-expressions are highlighted as

Search
by default. You can customize it by setting
g:ghcmod_type_highlight
.
hi ghcmodType ctermbg=yellow
let g:ghcmod_type_highlight = 'ghcmodType'

:GhcModCheck, :GhcModLint

You can get compiler errors/warnings by

:GhcModCheck
and they are available in quickfix window.

check

Similarly, type

:GhcModLint
to get suggestions by
ghc-mod lint
.

If you'd like to pass options to hlint, set

g:ghcmod_hlint_options
.
let g:ghcmod_hlint_options = ['--ignore=Redundant $']

lint

If you'd like to open in another way the quickfix, set

g:ghcmod_open_quickfix_function
.
let g:ghcmod_open_quickfix_function = 'GhcModQuickFix'
function! GhcModQuickFix()
  " for unite.vim and unite-quickfix
  :Unite -no-empty quickfix

" for ctrlp ":CtrlPQuickfix

" for FuzzyFinder ":FufQuickfix endfunction

:GhcModCheckAsync, :GhcModLintAsync, :GhcModCheckAndLintAsync

You can run check and/or lint asynchronously.

This would be useful when you'd like to run check and/or lint automatically (especially on

BufWritePost
). See Customize wiki page for more detail.

:GhcModExpand

You can see the expansion of splices by

:GhcModExpand
and they are available in quickfix window.

expand

This feature was introduced since ghc-mod 1.10.10.

GhcModSplitFunCase

Split the function case by examining a type's constructors.

f :: [a] -> a
f x = _body

When you type

:GhcModSplitFunCase
at the
x
position, ghcmod-vim will replace it with:
f :: [a] -> a
f [] = _body
f (x:xs) = _body

GhcModSigCodegen

Insert initial code from the given signature.

func :: [a] -> Maybe b -> (a -> b) -> (a,b)

ghcmod-vim will insert initial code using typed holes.

func x y z f = _func_body

Instance declarations are also supported.

newtype D = D (Int,String)

class C a where cInt :: a -> Int cString :: a -> String

instance C D where

ghcmod-vim will insert:

    cInt x = _cInt_body
    cString x = _cString_body

Customize

See wiki page Customize.

License

BSD3 License, the same license as ghc-mod.

Copyright (c) 2012-2013, eagletmt

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.