https://github.com/eagletmt/ghcmod-vim
Happy Haskell programming on Vim, powered by ghc-mod
https://github.com/eagletmt/ghcmod-vim
Last synced: over 1 year ago
JSON representation
Happy Haskell programming on Vim, powered by ghc-mod
- Host: GitHub
- URL: https://github.com/eagletmt/ghcmod-vim
- Owner: eagletmt
- Created: 2012-02-16T05:24:31.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2018-08-30T19:08:46.000Z (almost 8 years ago)
- Last Synced: 2025-04-02T03:39:19.376Z (over 1 year ago)
- Language: VimL
- Homepage: http://www.vim.org/scripts/script.php?script_id=4473
- Size: 225 KB
- Stars: 434
- Watchers: 12
- Forks: 59
- Open Issues: 42
-
Metadata Files:
- Readme: README.md
- Changelog: ChangeLog.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
# ghcmod.vim
[](https://travis-ci.org/eagletmt/ghcmod-vim)
[](https://gitter.im/eagletmt/ghcmod-vim)
Happy Haskell programming on Vim, powered by [ghc-mod](https://github.com/kazu-yamamoto/ghc-mod)
- [http://www.vim.org/scripts/script.php?script\_id=4473](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` 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](https://github.com/eagletmt/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
```sh
cabal install ghc-mod
```
## Details
If you'd like to give GHC options, set `g:ghcmod_ghc_options`.
```vim
let g:ghcmod_ghc_options = ['-idir1', '-idir2']
```
Also, there's buffer-local version `b:ghcmod_ghc_options`.
```vim
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. 
2. 
3. 
4. 
5. 
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` .
```vim
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`.
```vim
let g:ghcmod_hlint_options = ['--ignore=Redundant $']
```

If you'd like to open in another way the quickfix, set `g:ghcmod_open_quickfix_function`.
```vim
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.
```haskell
f :: [a] -> a
f x = _body
```
When you type `:GhcModSplitFunCase` at the `x` position, ghcmod-vim will replace it with:
```haskell
f :: [a] -> a
f [] = _body
f (x:xs) = _body
```
### GhcModSigCodegen
Insert initial code from the given signature.
```haskell
func :: [a] -> Maybe b -> (a -> b) -> (a,b)
```
ghcmod-vim will insert initial code using typed holes.
```haskell
func x y z f = _func_body
```
Instance declarations are also supported.
```haskell
newtype D = D (Int,String)
class C a where
cInt :: a -> Int
cString :: a -> String
instance C D where
```
ghcmod-vim will insert:
```haskell
cInt x = _cInt_body
cString x = _cString_body
```
## Customize
See wiki page [Customize](https://github.com/eagletmt/ghcmod-vim/wiki/Customize).
## License
[BSD3 License](http://www.opensource.org/licenses/BSD-3-Clause), the same license as ghc-mod.
Copyright (c) 2012-2013, eagletmt