https://github.com/eagletmt/ghcmod-vim
Happy Haskell programming on Vim, powered by ghc-mod
https://github.com/eagletmt/ghcmod-vim
Last synced: 3 months 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 13 years ago)
- Default Branch: master
- Last Pushed: 2018-08-30T19:08:46.000Z (almost 7 years ago)
- Last Synced: 2025-04-02T03:39:19.376Z (3 months 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 -> Stringinstance 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