elm-vim
Features
- Syntax highlighting
- Automatic indentation
- Function completion
- Build and package commands
- Code formatting and linting
- Documentation lookup
- REPL integration
Check out this ElmCast video for more detail.
Installation
If you don't have a preferred installation method, I recommend installing vim-plug, and then simply add Plug 'elmcast/elm-vim'
to your plugin section:
NOTE: If you are using vim-polyglot, you need to disable its default elm plugin by adding let g:polyglot_disabled = ['elm']
to your config file.
Requirements
First, make sure you have the Elm Platform installed. The simplest method to get started is to use the official npm package.
npm install -g elm
In order to run unit tests from within vim, install elm-test
npm install -g elm-test
For code completion and doc lookups, install elm-oracle.
npm install -g elm-oracle
To automatically format your code, install elm-format.
npm install -g elm-format
Mappings
The plugin provides several <Plug>
mappings which can be used to create custom
mappings. The following keybindings are provided by default:
Keybinding | Description |
---|---|
<LocalLeader>m | Compile the current buffer. |
<LocalLeader>b | Compile the Main.elm file in the project. |
<LocalLeader>t | Runs the tests of the current buffer or 'tests/TestRunner'. |
<LocalLeader>r | Opens an elm repl in a subprocess. |
<LocalLeader>e | Shows the detail of the current error or warning. |
<LocalLeader>d | Shows the type and docs for the word under the cursor. |
<LocalLeader>w | Opens the docs web page for the word under the cursor. |
You can disable these mappings if you want to use your own.
let g:elm_setup_keybindings = 0
Integration
Ale
The preferred linter to use with elm-vim is Ale. It should work out of the box.
Syntastic
Syntastic support should work out of the box, but we recommend the following settings:
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:elm_syntastic_show_warnings = 1
YouCompleteMe
let g:ycm_semantic_triggers = {
\ 'elm' : ['.'],
\}
Neocomplete
call neocomplete#util#set_default_dictionary(
\ 'g:neocomplete#sources#omni#input_patterns',
\ 'elm',
\ '\.')
Usage
:help elm-vim
let g:elm_jump_to_error = 0
let g:elm_make_output_file = "elm.js"
let g:elm_make_show_warnings = 0
let g:elm_syntastic_show_warnings = 0
let g:elm_browser_command = ""
let g:elm_detailed_complete = 0
let g:elm_format_autosave = 1
let g:elm_format_fail_silently = 0
let g:elm_setup_keybindings = 1
-
:ElmMake [filename]
callselm-make
with the given file. If no file is given it uses the current file being edited. -
:ElmMakeMain
attempts to callelm-make
with "Main.elm". -
:ElmTest
callselm-test
with the given file. If no file is given it runs it in the root of your project. -
:ElmRepl
runselm-repl
, which will return to vim on exiting. -
:ElmErrorDetail
shows the detail of the current error in the quickfix window. -
:ElmShowDocs
queries elm-oracle, then echoes the type and docs for the word under the cursor. -
:ElmBrowseDocs
queries elm-oracle, then opens docs web page for the word under the cursor. -
:ElmFormat
formats the current buffer with elm-format.
Screenshots
Credits
- Other vim-plugins, thanks for inspiration (elm.vim, ocaml.vim, haskell-vim)
- Contributors of elm-vim
License
Copyright © Joseph Hager. See LICENSE
for more details.