Difference between revisions of "Vim"

From HaskellWiki
Jump to navigation Jump to search
(Added external list with summary and screen shots.)
(2 intermediate revisions by the same user not shown)
Line 84: Line 84:
   
 
</haskell>
 
</haskell>
  +
  +
= List of Plugins
  +
  +
* [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.
  +
</blockquote>
  +
  +
  +
*[https://github.com/lukerandall/haskellmode-vim Haskellmode-vim] from the github:
  +
<blockquote>
  +
The Haskell mode plugins provide advanced support for Haskell development
  +
using GHC/GHCi on Windows and Unix-like systems. The functionality is
  +
based on Haddock-generated library indices, on GHCi's interactive
  +
commands, or on simply activating (some of) Vim's built-in program editing
  +
support in Haskell-relevant fashion. These plugins live side-by-side with
  +
the pre-defined |syntax-highlighting| support for |haskell| sources, and
  +
any other Haskell-related plugins you might want to install (see
  +
|haskellmode-resources|).
  +
  +
The Haskell mode plugins consist of three filetype plugins (haskell.vim,
  +
haskell_doc.vim, haskell_hpaste.vim), which by Vim's |filetype| detection
  +
mechanism will be auto-loaded whenever files with the extension '.hs' are
  +
opened, and one compiler plugin (ghc.vim) which you will need to load from
  +
your vimrc file (see |haskellmode-settings|).
  +
</blockquote>
  +
  +
* [https://github.com/eagletmt/ghcmod-vim Ghcmod-vim] from the github Page:
  +
<blockquote>
  +
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)
  +
Completions are supported by another plugin. See neco-ghc .
  +
</blockquote>.
  +
  +
* [https://github.com/scrooloose/syntastic Syntastic] supports Haskell and several other languages. From the github
  +
<blockquote>
  +
Syntastic is a syntax checking plugin that runs files through external syntax checkers and displays any resulting errors to the user. This can be done on demand, or automatically as files are saved. If syntax errors are detected, the user is notified and is happy because they didn't have to compile their code or execute their script to find them.
  +
  +
At the time of this writing, syntax checking plugins exist for applescript, c, coffee, cpp, css, cucumber, cuda, docbk, erlang, eruby, fortran, gentoo_metadata, go, haml, haskell, html, javascript, json, less, lua, matlab, perl, php, puppet, python, rst, ruby, sass/scss, sh, tcl, tex, vala, xhtml, xml, xslt, yaml, zpt
  +
</blockquote>
  +
  +
* [https://github.com/ujihisa/neco-ghc Neco-ghc] power by ghcmod-vim for completion of pragma, modules, functions and more.
  +
  +
* [http://blog-mno2.csie.org/blog/2011/11/17/vim-plugins-for-haskell-programmers/ Addition list] with some missing here with screen shots of many of the above.

Revision as of 07:35, 14 January 2013

This page intended Haskell vim-users.

Indentation

The following setup from merijn @ #haskell ensures you use spaces not tabs for indentation for generally sane behaviour:

" Tab specific option
set tabstop=8                   "A tab is 8 spaces
set expandtab                   "Always uses spaces instead of tabs
set softtabstop=4               "Insert 4 spaces when tab is pressed
set shiftwidth=4                "An indent is 4 spaces
set smarttab                    "Indent instead of tab at start of line
set shiftround                  "Round spaces to nearest shiftwidth multiple
set nojoinspaces                "Don't convert spaces to tabs

Plugins

Put code in file ~/.vim/plugin/Haskell.vim, 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":

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

Like so:

--------------------------------------------------------------------------------
--  my section


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":

let s:width = 80


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"

endfunction


nmap <silent> --h "=HaskellModuleHeader()<CR>:0put =<CR>

like so:

--------------------------------------------------------------------------------
-- | 
-- Module      : MyModule
-- Note        : This is a preview
-- 
-- This is an empty module, to show the headercomment produced. 
-- 
--------------------------------------------------------------------------------

= List of Plugins

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.


The Haskell mode plugins provide advanced support for Haskell development using GHC/GHCi on Windows and Unix-like systems. The functionality is based on Haddock-generated library indices, on GHCi's interactive commands, or on simply activating (some of) Vim's built-in program editing support in Haskell-relevant fashion. These plugins live side-by-side with the pre-defined |syntax-highlighting| support for |haskell| sources, and any other Haskell-related plugins you might want to install (see |haskellmode-resources|).

The Haskell mode plugins consist of three filetype plugins (haskell.vim, haskell_doc.vim, haskell_hpaste.vim), which by Vim's |filetype| detection mechanism will be auto-loaded whenever files with the extension '.hs' are opened, and one compiler plugin (ghc.vim) which you will need to load from your vimrc file (see |haskellmode-settings|).

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) Completions are supported by another plugin. See neco-ghc .

.
  • Syntastic supports Haskell and several other languages. From the github

Syntastic is a syntax checking plugin that runs files through external syntax checkers and displays any resulting errors to the user. This can be done on demand, or automatically as files are saved. If syntax errors are detected, the user is notified and is happy because they didn't have to compile their code or execute their script to find them.

At the time of this writing, syntax checking plugins exist for applescript, c, coffee, cpp, css, cucumber, cuda, docbk, erlang, eruby, fortran, gentoo_metadata, go, haml, haskell, html, javascript, json, less, lua, matlab, perl, php, puppet, python, rst, ruby, sass/scss, sh, tcl, tex, vala, xhtml, xml, xslt, yaml, zpt

  • Neco-ghc power by ghcmod-vim for completion of pragma, modules, functions and more.
  • Addition list with some missing here with screen shots of many of the above.