Ⅰ. 插件描述
Haskell code prettifierⅡ. 基本信息
|
Ⅲ. 安装方法
使用Vundle管理器安装
在你的.vimrc下添加:Plugin 'jaspervdj/stylish-haskell'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall
对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。
使用NeoBundle管理器安装
在你的.vimrc下添加:NeoBundle 'jaspervdj/stylish-haskell'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall
使用VimPlug管理器安装
在你的.vimrc下添加:Plug 'jaspervdj/stylish-haskell'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall
使用Pathogen管理器安装
在终端中运行以下命令:cd ~/.vim/bundle
git clone https://github.com/jaspervdj/stylish-haskell
Ⅳ. 文档说明
## stylish-haskell
Introduction
A simple Haskell code prettifier. The goal is not to format all of the code in
a file, since I find those kind of tools often "get in the way". However,
manually cleaning up import statements etc. gets tedious very quickly.
This tool tries to help where necessary without getting in the way.
Installation
You can install it using stack install stylish-haskell or cabal install stylish-haskell.
You can also install it using your package manager:
- Debian 9 or later:
apt-get install stylish-haskell - Ubuntu 16.10 or later:
apt-get install stylish-haskell - Arch Linux:
pacman -S stylish-haskell
Features
- Aligns and sorts
importstatements - Groups and wraps
{-# LANGUAGE #-}pragmas, can remove (some) redundant
pragmas - Removes trailing whitespace
- Aligns branches in
caseand fields in records - Converts line endings (customizable)
- Replaces tabs by four spaces (turned off by default)
- Replaces some ASCII sequences by their Unicode equivalents (turned off by
default) - Format data constructors and fields in records.
Feature requests are welcome! Use the [issue tracker] for that.
Example
Turns:
{-# LANGUAGE ViewPatterns, TemplateHaskell #-}
{-# LANGUAGE GeneralizedNewtypeDeriving,
ViewPatterns,
ScopedTypeVariables #-}
module Bad where
import Control.Applicative ((<$>))
import System.Directory (doesFileExist)
import qualified Data.Map as M
import Data.Map ((!), keys, Map)
data Point = Point { pointX, pointY :: Double , pointName :: String} deriving (Show)into:
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
module Bad where
import Control.Applicative ((<$>))
import System.Directory (doesFileExist)
import Data.Map (Map, keys, (!))
import qualified Data.Map as M
data Point = Point
{ pointX, pointY :: Double
, pointName :: String
} deriving (Show)Configuration
The tool is customizable to some extent. It tries to find a config file in the
following order:
- A file passed to the tool using the
-c/--configargument .stylish-haskell.yamlin the current directory (useful for per-directory
settings).stylish-haskell.yamlin the nearest ancestor directory (useful for
per-project settings)stylish-haskell/config.yamlin the platform’s configuration directory
(on Windows, it is %APPDATA%, elsewhere it defaults to~/.configand
can be overridden by the XDG_CONFIG_HOME environment variable;
useful for user-wide settings)
.stylish-haskell.yamlin your home directory (useful for user-wide
settings)- The default settings.
Use stylish-haskell --defaults > .stylish-haskell.yaml to dump a
well-documented default configuration to a file, this way you can get started
quickly.
Record formatting
Basically, stylish-haskell supports 4 different styles of records, controlled by records
in the config file.
Here's an example of all four styles:
-- equals: "indent 2", "first_field": "indent 2"
data Foo a
= Foo
{ a :: Int
, a2 :: String
-- ^ some haddock
}
| Bar
{ b :: a
}
deriving (Eq, Show)
deriving (ToJSON) via Bar Foo
-- equals: "same_line", "first_field": "indent 2"
data Foo a = Foo
{ a :: Int
, a2 :: String
-- ^ some haddock
}
| Bar
{ b :: a
}
deriving (Eq, Show)
deriving (ToJSON) via Bar Foo
-- equals: "same_line", "first_field": "same_line"
data Foo a = Foo { a :: Int
, a2 :: String
-- ^ some haddock
}
| Bar { b :: a
}
deriving (Eq, Show)
deriving (ToJSON) via Bar Foo
-- equals: "indent 2", first_field: "same_line"
data Foo a
= Foo { a :: Int
, a2 :: String
-- ^ some haddock
}
| Bar { b :: a
}
deriving (Eq, Show)
deriving (ToJSON) via Bar FooVIM integration
Since it works as a filter it is pretty easy to integrate this with VIM.
You can call
:%!stylish-haskell
and add a keybinding for it.
Or you can define formatprg
:set formatprg=stylish-haskell
and then use gq.
Alternatively, [vim-autoformat] supports stylish-haskell. To have it
automatically reformat the files on save, add to your vimrc:
autocmd BufWrite *.hs :Autoformat
" Don't automatically indent on save, since vim's autoindent for haskell is buggy
autocmd FileType haskell let b:autoformat_autoindent=0There are also plugins that run stylish-haskell automatically when you save a
Haskell file:
- [vim-stylish-haskell]
- [vim-stylishask]
Emacs integration
[haskell-mode] for Emacs supports stylish-haskell. For configuration,
see the “Using external formatters” section of the
haskell-mode manual.
Atom integration
[ide-haskell] for Atom supports stylish-haskell.
[atom-beautify] for Atom supports Haskell using stylish-haskell.
Visual Studio Code integration
[stylish-haskell-vscode] for VSCode supports stylish-haskell.
Using with Continuous Integration
You can quickly grab the latest binary and run stylish-haskell like so:
curl -sL https://raw.github.com/jaspervdj/stylish-haskell/master/scripts/latest.sh | sh -s .
Where the . can be replaced with the arguments you pass to stylish-haskell.
Credits
Written and maintained by Jasper Van der Jeugt.
Contributors:
- Chris Done
- Hiromi Ishii
- Leonid Onokhov
- Michael Snoyman
- Mikhail Glushenkov