GitHub - eagletmt/ghcmod-vim: Happy Haskell programming on Vim, powered by ghc-mod (original) (raw)
ghcmod.vim
Happy Haskell programming on Vim, powered by ghc-mod
- http://www.vim.org/scripts/script.php?script_id=4473
- https://github.com/eagletmt/ghcmod-vim/releases
Features
- Displaying the type of sub-expressions (
ghc-mod type
) - Displaying error/warning messages and their locations (
ghc-mod check
andghc-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
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.
Since ghc-mod 1.10.8, not only sub-expressions but name bindings and sub-patterns are supported.
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.
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 $']
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.
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