Elixir support for vim
Features:
- Syntax highlighting for Elixir and EEx files
- Filetype detection for
.ex
,.exs
,.eex
,.heex
,.leex
, and.sface
files - Automatic indentation
- Integration between Ecto projects and vim-dadbod for running SQL queries on defined Ecto repositories
vim-elixir
can be installed either with a plugin manager or by directly copying the files into your vim folders (location varies between platforms)
If you are using a plugin manager then add vim-elixir
the way you would any other plugin:
# Using vim 8 native package loading
# http://vimhelp.appspot.com/repeat.txt.html#packages
git clone https://github.com/elixir-editors/vim-elixir.git ~/.vim/pack/my-packages/start/vim-elixir
# Using pathogen
git clone https://github.com/elixir-editors/vim-elixir.git ~/.vim/bundle/vim-elixir
" Using vim-plug
Plug 'elixir-editors/vim-elixir'
" Using Vundle
Plugin 'elixir-editors/vim-elixir'
" Using NeoBundle
NeoBundle 'elixir-editors/vim-elixir'
If you are not using a package manager then you can use the provided manual_install.sh
script to copy the files into their respective homes.
Run ./manual_install.sh to copy the contents of each directory in the respective directories inside ~/.vim
.
You must add the following to your ~/.vimrc
:
" Enable syntax highlighting
syntax on
" Enables filetype detection, loads ftplugin, and loads indent
" (Not necessary on nvim and may not be necessary on vim 8.2+)
filetype plugin indent on
We've decided not to include mix format
integration into vim-elixir
.
If you'd like to set it up yourself, you have the following options:
- For asynchronous execution of the formatter, have a look at vim-mix-format
- Add it as a
formatprg
(e.g.setlocal formatprg=mix\ format\ -
)
Why isn't this supported? We've run into two major issues with calling out to mix format
.
First mix format
would not work unless your program compiled.
Second mix format
added an external process dependency to vim-elixir
.
If someone really wanted to try and add this then we might be able to model it after vim-go
's go fmt
integration
which I think could be acceptable to merge into master.
vim-elixir
is looking for new maintainers.
If you get a lot of value from it, know vimscript well, or eager to learn about it then feel free to get in touch with @jbodah (GH issue, elixir-lang Slack)
The tests depend on having Ruby installed.
They also depend on a GUI vim (gvim, mvim) with server support.
If you do not have gvim or mvim in your PATH then you can create a .gvim_path
file in the vim-elixir root directory which specifies the path to the GUI vim executable.
To run the tests: bundle exec parallel_rspec spec
You can spawn a container with vim and your development configs using bin/vim
or bin/nvim
# Open vim in a container loading this plugin
bin/vim myfile.ex
# Debug statements should be configured to print automatically
# Write/indent some code
:messages
# You should see output like the following:
# ==> Indenting line 3
# text = ' _ -> :wowo'
# testing handler elixir#indent#handle_top_of_file
# testing handler elixir#indent#handle_starts_with_string_continuation
# testing handler elixir#indent#handle_following_trailing_binary_operator
# testing handler elixir#indent#handle_starts_with_pipe
# testing handler elixir#indent#handle_starts_with_binary_operator
# testing handler elixir#indent#handle_inside_block
# pattern matching relative to lnum 2
# current line contains ->; assuming match definition
# line 3: elixir#indent#handle_inside_block returned 4
# 1 change; before #1 4 seconds ago
#
# This tells you which line is being inspected as well as which handlers are being run
# and which branches are being exercised by those handlers
Here is a list of features that I think would be great additions to vim-elixir
:
- Regularly merging
vim-elixir
intovim
and keeping the sync up-to-date - Fixing our build so it can run regularly on CI
- Live view support
- Testing .exs files and ensuring feature compatibility between .ex and .exs
- Documentation (e.g.
:h vim-elixir
) - README docs for various .vimrc options/flags
- Identifying and rewriting tests that conflict with
mix format
- Fixes for indentation rule edge cases (e.g.
with
, see GH issues for examples) - Simplifying syntax rules
- Performance optimizations for syntax/indent rules (especially for determining if something is a string)