GitHub - eagletmt/ghcmod-vim: Happy Haskell programming on Vim, powered by ghc-m...
source link: https://github.com/eagletmt/ghcmod-vim
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
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
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.
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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK