Difference between revisions of "Vim"
m |
|||
(21 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Development tools]] |
[[Category:Development tools]] |
||
− | This page intended Haskell vim-users. |
||
+ | = Vim as a Haskell IDE = |
||
+ | |||
+ | There is a wide range of tools and corresponding VIM plugins that provide IDE-like features for Haskell development: haskell-ide-engine (implements the Language Server Protocol, thus needs a VIM LSP client), Intero, Dante, Codex, hdevtools and more. A less feature-rich but stable solution is to have ghcid running next to the editor window as described in [https://www.parsonsmatt.org/2018/05/19/ghcid_for_the_win.html] |
||
= Plugins = |
= Plugins = |
||
− | Put code in file <code>~/.vim/plugin/Haskell.vim</code>, or in multiple files in that directory. |
||
− | |||
− | == Module Sections == |
||
− | The following code prompts for a name, and places a section with that name at current position, when key sequence "--s": |
||
− | <pre> |
||
− | let s:width = 80 |
||
− | |||
− | function! HaskellModuleSection(...) |
||
− | let name = 0 < a:0 ? a:1 : inputdialog("Section name: ") |
||
− | |||
− | return repeat('-', s:width) . "\n" |
||
− | \ . "-- " . name . "\n" |
||
− | \ . "\n" |
||
− | |||
− | endfunction |
||
− | |||
− | nmap <silent> --s "=HaskellModuleSection()<CR>gp |
||
− | </pre> |
||
− | Like so: |
||
− | <haskell> |
||
− | |||
− | -------------------------------------------------------------------------------- |
||
− | -- my section |
||
− | |||
− | </haskell> |
||
− | |||
− | |||
− | == Module Headers == |
||
− | The following code prompts for module name, a note, a description of module, and places a module comment at top, when key sequence "--h": |
||
− | <pre> |
||
− | let s:width = 80 |
||
+ | * [https://github.com/neoclide/coc.nvim coc.nvim] Intellisense engine for Vim8 & Neovim, full language server protocol support as VSCode. Follow haskell-ide-engine [https://github.com/haskell/haskell-ide-engine#coc instructions] to add support for completion, linting, formatting, go to definition, etc. |
||
+ | * [https://github.com/neovimhaskell/haskell-vim haskell-vim] Quote from [https://blog.jez.io/haskell-development-with-neovim/]: "It’s the filetype plugin for Haskell that should ship with Vim." |
||
− | function! HaskellModuleHeader(...) |
||
− | let name = 0 < a:0 ? a:1 : inputdialog("Module: ") |
||
− | let note = 1 < a:0 ? a:2 : inputdialog("Note: ") |
||
− | let description = 2 < a:0 ? a:3 : inputdialog("Describe this module: ") |
||
− | |||
− | return repeat('-', s:width) . "\n" |
||
− | \ . "-- | \n" |
||
− | \ . "-- Module : " . name . "\n" |
||
− | \ . "-- Note : " . note . "\n" |
||
− | \ . "-- \n" |
||
− | \ . "-- " . description . "\n" |
||
− | \ . "-- \n" |
||
− | \ . repeat('-', s:width) . "\n" |
||
− | \ . "\n" |
||
+ | * [https://github.com/chrisdone/hindent Hindent] Haskell pretty printer |
||
− | endfunction |
||
+ | * [https://github.com/jaspervdj/stylish-haskell stylish-haskell] Haskell code prettifier |
||
+ | * [https://github.com/w0rp/ale Ale] (Asynchronous Linting Engine) |
||
− | nmap <silent> --h "=HaskellModuleHeader()<CR>:0put =<CR> |
||
+ | <blockquote> |
||
− | </pre> |
||
+ | ALE (Asynchronous Lint Engine) is a plugin for providing linting (checking syntax and semantics) in NeoVim 0.2.0+ and Vim 8 while you edit your text files, and acts as a Vim Language Server Protocol client. |
||
− | like so: |
||
+ | </blockquote> |
||
− | <haskell> |
||
+ | Comes with linters cabal_ghc, ghc, ghc_mod, hdevtools, hie, hlint, stack_build, stack_ghc |
||
− | -------------------------------------------------------------------------------- |
||
− | -- | |
||
− | -- Module : MyModule |
||
− | -- Note : This is a preview |
||
− | -- |
||
− | -- This is an empty module, to show the headercomment produced. |
||
− | -- |
||
− | -------------------------------------------------------------------------------- |
||
+ | * [https://github.com/bitc/vim-hdevtools Hdevtools] taken from the github page: |
||
+ | <blockquote> |
||
+ | hdevtools is a command line program powered by the GHC API, that provides services for Haskell development. hdevtools works by running a persistent process in the background, so that your Haskell modules remain in memory, instead of having to reload everything each time you change only one file. This is just like :reload in GHCi - with hdevtools you get the speed of GHCi as well as tight integration with your editor. |
||
+ | This is the Vim plugin that integrates Vim with hdevtools. |
||
− | </haskell> |
||
+ | </blockquote> |
Revision as of 17:19, 7 March 2020
Vim as a Haskell IDE
There is a wide range of tools and corresponding VIM plugins that provide IDE-like features for Haskell development: haskell-ide-engine (implements the Language Server Protocol, thus needs a VIM LSP client), Intero, Dante, Codex, hdevtools and more. A less feature-rich but stable solution is to have ghcid running next to the editor window as described in [1]
Plugins
- coc.nvim Intellisense engine for Vim8 & Neovim, full language server protocol support as VSCode. Follow haskell-ide-engine instructions to add support for completion, linting, formatting, go to definition, etc.
- haskell-vim Quote from [2]: "It’s the filetype plugin for Haskell that should ship with Vim."
- Hindent Haskell pretty printer
- stylish-haskell Haskell code prettifier
- Ale (Asynchronous Linting Engine)
ALE (Asynchronous Lint Engine) is a plugin for providing linting (checking syntax and semantics) in NeoVim 0.2.0+ and Vim 8 while you edit your text files, and acts as a Vim Language Server Protocol client.
Comes with linters cabal_ghc, ghc, ghc_mod, hdevtools, hie, hlint, stack_build, stack_ghc
- Hdevtools taken from the github page:
hdevtools is a command line program powered by the GHC API, that provides services for Haskell development. hdevtools works by running a persistent process in the background, so that your Haskell modules remain in memory, instead of having to reload everything each time you change only one file. This is just like :reload in GHCi - with hdevtools you get the speed of GHCi as well as tight integration with your editor.
This is the Vim plugin that integrates Vim with hdevtools.