-
-
Save neodevelop/0870de3bcd1f0ac0876e841bfd7f036b to your computer and use it in GitHub Desktop.
Vimrc config for Elixir
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| call plug#begin() | |
| Plug 'tpope/vim-sensible' | |
| Plug 'tpope/vim-fugitive' | |
| Plug 'godlygeek/tabular', {'for': ['markdown', 'yml']} | |
| Plug 'mattn/emmet-vim' | |
| Plug 'itchyny/lightline.vim' | |
| Plug 'vim-airline/vim-airline' | |
| Plug 'vim-airline/vim-airline-themes' | |
| Plug 'catppuccin/vim', { 'as': 'catppuccin' } | |
| Plug 'elixir-editors/vim-elixir' | |
| Plug 'mg979/vim-visual-multi', {'branch': 'master'} | |
| Plug 'preservim/nerdtree' | |
| Plug 'junegunn/vim-easy-align' | |
| Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } | |
| Plug 'junegunn/fzf.vim' | |
| Plug 'dense-analysis/ale' | |
| Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
| Plug 'elixir-lsp/coc-elixir', {'do': 'yarn install && yarn prepack'} | |
| Plug 'ryanoasis/vim-devicons' | |
| Plug 'habamax/vim-asciidoctor' | |
| Plug 'thecodesmith/vim-groovy' | |
| Plug 'maxmellon/vim-jsx-pretty' | |
| call plug#end() | |
| set termguicolors | |
| set noshowmode | |
| set nocompatible " Must come first because it changes other options. | |
| let mapleader="," | |
| set encoding=utf-8 | |
| set updatetime=300 | |
| set signcolumn=yes | |
| syntax enable " Turn on syntax highlighting. | |
| filetype plugin indent on " Turn on file type detection. | |
| set showcmd " Display incomplete commands. | |
| set showmode " Display the mode you're in. | |
| set backspace=indent,eol,start " Intuitive backspacing. | |
| set hidden " Handle multiple buffers better. | |
| set wildmenu " Enhanced command line completion. | |
| set wildmode=list:longest " Complete files like a shell. | |
| set ignorecase " Case-insensitive searching. | |
| set smartcase " But case-sensitive if expression contains a capital letter. | |
| set number " Show line numbers. | |
| set ruler " Show cursor position. | |
| set cursorline | |
| set incsearch " Highlight matches as you type. | |
| set hlsearch " Highlight matches. | |
| set wrap " Turn on line wrapping. | |
| set scrolloff=0 " Show 3 lines of context around the cursor. | |
| set title " Set the terminal's title | |
| set visualbell " No beeping. | |
| set nobackup " Don't make a backup before overwriting a file. | |
| set nowritebackup " And again. | |
| set tabstop=2 " Global tab width. | |
| set shiftwidth=2 " And again, related. | |
| set expandtab " Use spaces instead of tabs | |
| set laststatus=2 " Show the status line all the time | |
| set directory=$HOME/.vim/tmp/ | |
| set wildignore+=**/node_modules/*,**/_build/**,**/deps/**,**/priv/plts/**,**/plts/**,**/*.gz,**/*.plt,**/*.hash,**/.elixir_ls/* | |
| :colorscheme catppuccin_mocha | |
| let g:lightline = {'colorscheme': 'catppuccin_mocha'} | |
| let g:airline_theme = 'catppuccin_mocha' | |
| let g:airline_powerline_fonts = 1 | |
| let g:airline_inactive_collapse = 0 | |
| let g:airline#extensions#ale#enabled = 1 | |
| let g:ale_fix_on_save = 1 | |
| let g:ale_completion_enabled = 1 | |
| let g:ale_completion_autoimport = 1 | |
| let g:ale_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰', '│', '─'] | |
| let NERDTreeIgnore=['_build'] | |
| let $FZF_DEFAULT_COMMAND="fd --type f --strip-cwd-prefix | |
| \ --hidden --follow | |
| \ --exclude .git | |
| \ --exclude '**/deps' | |
| \ --exclude '**/_build' | |
| \ --exclude '**/.elixir_ls' | |
| \ --exclude '**/static' | |
| \ --exclude '**/plts' | |
| \ --exclude '**/*.gz' | |
| \ --exclude '**/*.plt' | |
| \ --exclude '**/*.svg' | |
| \ --exclude '**/*.beam' | |
| \ --exclude '**/*.hash'" | |
| " Tab mappings. | |
| map <leader>tt :tabnew<cr> | |
| map <leader>te :tabedit | |
| map <leader>tc :tabclose<cr> | |
| map <leader>to :tabonly<cr> | |
| map <leader>tn :tabnext<cr> | |
| map <leader>tp :tabprevious<cr> | |
| map <leader>tf :tabfirst<cr> | |
| map <leader>tl :tablast<cr> | |
| map <leader>tm :tabmove | |
| " Mapea Ctrl+p al comando :Files | |
| nnoremap <C-p> :Files<CR> | |
| " Mapea Ctrl+g al comando :Rg | |
| nnoremap <C-g> :Rg<CR> | |
| if !has('gui_running') | |
| set t_Co=256 | |
| endif | |
| if has('nvim') | |
| let s:user_dir = stdpath('config') | |
| else | |
| let s:user_dir = has('win32') ? expand('~/vimfiles') : expand('~/.vim') | |
| endif | |
| au BufRead,BufNewFile *.ex,*.exs set filetype=elixir | |
| au BufRead,BufNewFile *.eex,*.heex,*.leex,*.sface,*.lexs set filetype=eelixir | |
| au BufRead,BufNewFile mix.lock set filetype=elixir | |
| au BufNewFile,BufRead *.gradle set filetype=groovy | |
| let g:ale_linters = {} | |
| let g:ale_linters.elixir = [ 'credo', 'elixir-ls' ] | |
| let g:ale_fixers = { | |
| \ '*': ['remove_trailing_lines', 'trim_whitespace'], | |
| \ 'eelixir': ['mix_format'], | |
| \ 'elixir': ['mix_format'] | |
| \} | |
| " START COC-Config | |
| inoremap <silent><expr> <TAB> | |
| \ coc#pum#visible() ? coc#pum#next(1) : | |
| \ CheckBackspace() ? "\<Tab>" : | |
| \ coc#refresh() | |
| inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>" | |
| " Make <CR> to accept selected completion item or notify coc.nvim to format | |
| " <C-g>u breaks current undo, please make your own choice | |
| inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() | |
| \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" | |
| function! CheckBackspace() abort | |
| let col = col('.') - 1 | |
| return !col || getline('.')[col - 1] =~# '\s' | |
| endfunction | |
| " Use <c-space> to trigger completion | |
| if has('nvim') | |
| inoremap <silent><expr> <c-space> coc#refresh() | |
| else | |
| inoremap <silent><expr> <c-@> coc#refresh() | |
| endif | |
| " Use `[g` and `]g` to navigate diagnostics | |
| " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list | |
| nmap <silent> [g <Plug>(coc-diagnostic-prev) | |
| nmap <silent> ]g <Plug>(coc-diagnostic-next) | |
| " GoTo code navigation | |
| nmap <silent> gd <Plug>(coc-definition) | |
| nmap <silent> gy <Plug>(coc-type-definition) | |
| nmap <silent> gi <Plug>(coc-implementation) | |
| nmap <silent> gr <Plug>(coc-references) | |
| " Use K to show documentation in preview window | |
| nnoremap <silent> K :call ShowDocumentation()<CR> | |
| function! ShowDocumentation() | |
| if CocAction('hasProvider', 'hover') | |
| call CocActionAsync('doHover') | |
| else | |
| call feedkeys('K', 'in') | |
| endif | |
| endfunction | |
| " Highlight the symbol and its references when holding the cursor | |
| autocmd CursorHold * silent call CocActionAsync('highlight') | |
| " Symbol renaming | |
| nmap <leader>rn <Plug>(coc-rename) | |
| " Formatting selected code | |
| xmap <leader>f <Plug>(coc-format-selected) | |
| nmap <leader>f <Plug>(coc-format-selected) | |
| augroup mygroup | |
| autocmd! | |
| " Setup formatexpr specified filetype(s) | |
| autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') | |
| " Update signature help on jump placeholder | |
| autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') | |
| augroup end | |
| " Applying code actions to the selected code block | |
| " Example: `<leader>aap` for current paragraph | |
| xmap <leader>a <Plug>(coc-codeaction-selected) | |
| nmap <leader>a <Plug>(coc-codeaction-selected) | |
| " Remap keys for applying code actions at the cursor position | |
| nmap <leader>ac <Plug>(coc-codeaction-cursor) | |
| " Remap keys for apply code actions affect whole buffer | |
| nmap <leader>as <Plug>(coc-codeaction-source) | |
| " Apply the most preferred quickfix action to fix diagnostic on the current line | |
| nmap <leader>qf <Plug>(coc-fix-current) | |
| " Remap keys for applying refactor code actions | |
| nmap <silent> <leader>re <Plug>(coc-codeaction-refactor) | |
| xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected) | |
| nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected) | |
| " Run the Code Lens action on the current line | |
| nmap <leader>cl <Plug>(coc-codelens-action) | |
| " Remap <C-f> and <C-b> to scroll float windows/popups | |
| if has('nvim-0.4.0') || has('patch-8.2.0750') | |
| nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |
| nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |
| inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>" | |
| inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>" | |
| vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |
| vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |
| endif | |
| " Add `:Format` command to format current buffer | |
| command! -nargs=0 Format :call CocActionAsync('format') | |
| " Add `:Fold` command to fold current buffer | |
| command! -nargs=? Fold :call CocAction('fold', <f-args>) | |
| " Add `:OR` command for organize imports of the current buffer | |
| command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') | |
| " Add (Neo)Vim's native statusline support | |
| " NOTE: Please see `:h coc-status` for integrations with external plugins that | |
| " provide custom statusline: lightline.vim, vim-airline | |
| set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} | |
| " Mappings for CoCList | |
| " Show all diagnostics | |
| nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr> | |
| " Manage extensions | |
| nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr> | |
| " Show commands | |
| nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr> | |
| " Find symbol of current document | |
| nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr> | |
| " Search workspace symbols | |
| nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr> | |
| " Do default action for next item | |
| nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR> | |
| " Do default action for previous item | |
| nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR> | |
| " Resume latest coc list | |
| nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR> | |
| " END COC-Config |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment