Dotfiles.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
6.8 KiB

5 years ago
## Vim Haskell Conceal+
This bundle provides extended Haskell Conceal feature for Vim. The feature
is used to display unicode operators in Haskell code without changing the
underlying file.
This package offers more (and, more importantly, configurable) features
than the
[baseline vim-haskellConcealbundle](https://github.com/Twinside/vim-haskellConceal).
The baseline bundle has numerous forks, which is possible to combine, so
everyone is welcome to share, improve or contribute new notations to this
Conceal Plus package.
GitHub: https://github.com/enomsg/vim-haskellConcealPlus
### Why Concealing
- Using things like '->' instead real arrows '→' was never a deliberate
choice, but a choice made due to limitations of teletypewriters and
input inconvenience.
- With concealing you don't have to deal with cumbersome unicode-input
methods, yet you can enjoy proper notation.
- It is not only about aesthetics. Excess of multi-character functions may
create visual noise, which negatively affects readability. Using special
symbols and true arrows, together with colors and bold/italic face seems
to improve the situation. The image shows Vim with and without
concealing, both running in a plain terminal emulator:
![demo](https://github.com/enomsg/vim-haskellConcealPlus/raw/master/demo.png)
- Using concealing instead of *-unicode* versions of packages also has
some advantages. Mainly, concealing does not require any changes to the
source code, it is backwards-compatible with idiomatic code. Secondly,
with concealing no special input methods are needed. Plus, currently
some features are hardly possible without editor's concealing (e.g.
power superscripts).
### Installation
Using Vim built-in `pack` support:
```
$ mkdir -p ~/.vim/pack/vim-haskellConcealPlus/start
$ cd ~/.vim/pack/vim-haskellConcealPlus/start
$ git clone https://github.com/enomsg/vim-haskellConcealPlus
$ echo "syn on" >> ~/.vimrc # If not already in .vimrc
$ echo "setlocal conceallevel=2" >> ~/.vimrc # If not already in .vimrc
$ echo "set concealcursor=nciv" >> ~/.vimrc # Optional
```
### Available Options
'q' option to disable concealing of scientific constants (e.g. π)
'℘' option to disable concealing of powerset function
'𝐒' option to disable String type to 𝐒 concealing
'𝐓' option to disable Text type to 𝐓 concealing
'𝐄' option to disable Either/Right/Left to 𝐄/𝑅/𝐿 concealing
'𝐌' option to disable Maybe/Just/Nothing to 𝐌/𝐽/𝑁 concealing
'A' option to not try to preserve indentation
's' option to disable space consumption after ∑,∏,√ and ¬ functions
'*' option to enable concealing of asterisk with '⋅' sign
'x' option to disable default concealing of asterisk with '×' sign
'E' option to enable ellipsis concealing with ‥ (two dot leader)
'e' option to disable ellipsis concealing with … (ellipsis sign)
'⇒' option to disable `implies` concealing with ⇒
'⇔' option to disable `iff` concealing with ⇔
'r' option to disable return (η) and join (µ) concealing
'b' option to disable bind (left and right) concealing
'f' option to enable formal (★) right bind concealing
'c' option to enable encircled b/d (ⓑ/ⓓ) for right and left binds
'h' option to enable partial concealing of binds (e.g. »=)
'C' option to enable encircled 'm' letter ⓜ concealing for fmap
'l' option to disable fmap/lift concealing with ↥
'↱' option to disable mapM/forM concealing with ↱/↰
'w' option to disable 'where' concealing with "due to"/∵ symbol
'-' option to disable subtract/(-) concealing with ⊟
'I' option to enable alternative ':+' concealing with with ⨢
'i' option to disable default concealing of ':+' with ⅈ
'R' option to disable realPart/imagPart concealing with ℜ/ℑ
'T' option to enable True/False constants concealing with bold 𝐓/𝐅
't' option to disable True/False constants concealing with italic 𝑇/𝐹
'B' option to disable Bool type to 𝔹 concealing
'Q' option to disable Rational type to ℚ concealing
'Z' option to disable Integer type to ℤ concealing
'N' option to disable Natural, Nat types to ℕ concealing
'D' option to disable Double type to 𝔻 concealing
'C' option to disable Complex type to ℂ concealing
'1' option to disable numeric superscripts concealing, e.g. x²
'a' option to disable alphabet superscripts concealing, e.g. xⁿ
The flags can be specified via hscoptions variable. For example, *let
hscoptions="fc"* in your *~/.vimrc*.
### Known Issues and Hints:
- Concealing may seriously mess up indentation. By default the bundle
tries to preserve spaces for commonly troublesome symbols (e.g. ->, <-
and => arrows). But to be sure about indentation, you still have to see
the non-concealed code. *set conceallevel=0* might be handy in these
cases.
- *set concealcursor=nciv* seem to not play well with Vim matchparen
feature (which is enabled by default). You can either disable concealing
under the cursor, or disable matchparen by adding *let
loaded_matchparen=1* at the very top of your *~/.vimrc*.
- With *set concealcursor=nciv* navigation through concealed parts of code
might be somewhat irritating because the cursor behaves a bit
differently. It becomes less of an issue if you are used to Vim's *w/b*
commands (word forward/backward). You can also try *set
concealcursor=ncv* instead.
- Finding proper fonts might be a pain. Most of modern, so called
programming fonts (*Inconsolata*, *Anonymous Pro*, etc.) often lack
decent unicode support. As a recommendation, try *DejaVu Sans Mono*.
**Update**: thanks to [monospacifier](https://github.com/cpitclaudel/monospacifier)
package, fonts are no longer a problem. Pick your favourite font, then in
addition download one of the "monospacified" fallback fonts, save into
`~/.fonts`, and adjust fontconfig, e.g.
`~/.config/fontconfig/fonts.conf`:
```
<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>~/.fonts</dir>
<alias>
<family>monospace</family>
<prefer>
<family>TeX Gyre Schola Math monospacified for DejaVu Sans Mono</family>
</prefer>
</alias>
</fontconfig>
```
- Most of the terminal emulators have one or more issues with regard to the
unicode characters handling. Emulators that don't have problems with unicode
might be pretty slow. As a recommendation, try xst, or *evilvte* (it has weird
configuration, but draws things correctly) or *lxterminal* (seems to be quite
capable, but limited configurability) or any other terminal emulator that
happened to work for you.
[xst](https://github.com/gnotclub/xst) is known to work well with DejaVu Sans
Mono, plus [monospacified](https://github.com/cpitclaudel/monospacifier) fonts
as a fallback.