Skip to content

cloudhead/haskell-vim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Syntax Highlighting and Indentation for Haskell and Cabal

I was unhappy with the Haskell scripts that are shipped with vim, therefore I decided to make my own based on idris-vim.

I hope you find this useful.

Screenshot

Features

  • Covers a broader spectrum of keywords
  • Highlighting for new features like type families, pattern synonyms, arrow syntax, recursive do, role annotations, QuasiQuotation
  • More contextual highlighting (e.g. highlight 'as' or 'family' only in appropriate places)
  • Smarter indentation
  • Better Cabal support

Installation

I recommend using Pathogen for installation. Simply clone this repo into your ~/.vim/bundle directory and you are ready to go.

cd ~/.vim/bundle
git clone https://github.com/neovimhaskell/haskell-vim.git

Be sure that the following lines are in your .vimrc

syntax on
filetype plugin indent on

Manual Installation

Copy content into your ~/.vim directory.

Configuration

Features

To enable the features you would like to use, just add the according line to your .vimrc.

let g:haskell_enable_quantification = 1   " to enable highlighting of `forall`
let g:haskell_enable_recursivedo = 1      " to enable highlighting of `mdo` and `rec`
let g:haskell_enable_arrowsyntax = 1      " to enable highlighting of `proc`
let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern`
let g:haskell_enable_typeroles = 1        " to enable highlighting of type roles
let g:haskell_enable_static_pointers = 1  " to enable highlighting of `static`

Highlighting

haskell-vim has an opinionated highlighting. If you do not like that you can switch to a more traditional mode by setting g:haskell_classic_highlighting to 1.

Indentation

To configure indentation in haskell-vim you can use the following variables to change indentation depth, just add the according line to your .vimrc.

Haskell

  • let g:haskell_indent_if = 3

      if bool
      >>>then ...
      >>>else ...
    
  • let g:haskell_indent_case = 2

      case xs of
      >>[]     -> ...
      >>(y:ys) -> ...
    
  • let g:haskell_indent_let = 4

      let x = 0 in
      >>>>x
    
  • let g:haskell_indent_where = 6

      where f :: Int -> Int
      >>>>>>f x = x
    
  • let g:haskell_indent_do = 3

      do x <- a
      >>>y <- b
    
  • let g:haskell_indent_in = 1

      let x = 1
      >in x
    
  • let g:haskell_indent_guard = 2

      f x y
      >>|
    

Cabal

  • let g:cabal_indent_section = 2 (limited to max. 4 spaces)

     executable name
     >>main-is:             Main.hs
    

About

Custom Haskell Vimscripts

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Vim Script 100.0%