" Miguel's Fresh Neovim Config " 29th Apr 2021 - 01st July 2021 " " link from ~/.config/nvim/init.vim " 1. install vim-plug " 2. run :PlugUpdate " 3. run :checkhealth " TODO " explore nvim 0.5+ native lsp-client " {{{ vim-plug call plug#begin('~/.vim/plugged') Plug 'tpope/vim-sensible' Plug 'tpope/vim-commentary' Plug 'tpope/vim-surround' Plug 'tpope/vim-unimpaired' Plug 'tpope/vim-vinegar' Plug 'tpope/vim-fugitive' Plug 'tpope/vim-dispatch' Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'airblade/vim-gitgutter' Plug 'nelstrom/vim-visual-star-search' Plug 'majutsushi/tagbar' Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } Plug 'autozimu/LanguageClient-neovim', { 'branch': 'next', 'do': 'bash install.sh' } Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' " Plug 'rafi/awesome-vim-colorschemes' Plug 'jnurmine/Zenburn' " haskell related Plug 'neovimhaskell/haskell-vim' Plug 'alx741/vim-stylishask' Plug 'ndmitchell/ghcid', { 'rtp': 'plugins/nvim' } Plug 'christoomey/vim-tmux-navigator' call plug#end() " }}} " 256 colorscheme colorscheme zenburn " {{{ misc set nocompatible " set cursorcolumn set cursorline set foldmethod=marker set nowrap set showcmd set number relativenumber set hidden set colorcolumn=73 set backspace=2 " }}} " disable preview window on autocompletion set completeopt-=preview set updatetime=300 set signcolumn=yes:3 set mouse=a syntax on " detect type and autoload plugin and indent files filetype plugin indent on let g:deoplete#enable_at_startup = 1 let g:airline_theme='wombat' let g:airline_powerline_fonts = 1 nnoremap :call LanguageClient_contextMenu() let g:LanguageClient_serverCommands = { 'haskell': ['haskell-language-server-wrapper', '--lsp'] } let g:LanguageClient_codeLensDisplay = { "virtualTexthl": "SpellRare" } let g:LanguageClient_diagnosticsDisplay = \ { \ 1: { \ "name": "Error", \ "texthl": "LanguageClientError", \ "signText": "x", \ "signTexthl": "LanguageClientErrorSign", \ "virtualTexthl": "SpellRare", \ }, \ 2: { \ "name": "Warning", \ "texthl": "LanguageClientError", \ "signText": "!", \ "signTexthl": "LanguageClientWarningSign", \ "virtualTexthl": "SpellRare", \ }, \ 3: { \ "name": "Information", \ "texthl": "LanguageClientError", \ "signText": "i", \ "signTexthl": "LanguageClientInfoSign", \ "virtualTexthl": "SpellRare", \ }, \ 4: { \ "name": "Hint", \ "texthl": "LanguageClientError", \ "signText": ">", \ "signTexthl": "LanguageClientInfoSign", \ "virtualTexthl": "SpellRare", \ }, \ } let g:haskell_enable_quantification = 1 " to enable highlighting of `forall` let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec` let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc` let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern` let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static` let g:haskell_backpack = 1 " to enable highlighting of backpack keywords " {{{ tabs set listchars=tab:>.,trail:~ set list set tabstop=8 set expandtab set softtabstop=4 set shiftwidth=4 set shiftround " }}} " {{{ folding set foldcolumn=5 set foldlevelstart=0 " }}} " {{{ search set hlsearch set incsearch set ignorecase set smartcase " }}} " {{{ match brackets set showmatch set matchtime=5 " }}} " {{{ KEY BINDINGS " mapleader " use but remap to _ so it is visible for 'showcmd' nmap _ let mapleader="\_" let maplocalleader="\_" " get rid of bad habits. (might break other stuff eg. in cygwin) " inoremap " inoremap " inoremap " inoremap " inoremap " activate 'very magic' for searches automatically nnoremap / /\v nnoremap ? ?\v " alt esc inoremap jk cnoremap jk " easy editing and sourcing of vimrc " nnoremap sv :source $MYVIMRC nnoremap ev :e $MYVIMRC " turn off search highlight nnoremap h :nohlsearch " layout "nnoremap ln :NERDTreeToggle " silver search "noremap a :Ack! " show list if multiple ctrl-] matches nnoremap g augroup filetype_haskell autocmd! autocmd Filetype haskell nnoremap :call LanguageClient#textDocument_definition() autocmd Filetype haskell nnoremap i :call LanguageClient#textDocument_hover() autocmd Filetype haskell nnoremap x :call LanguageClient#explainErrorAtPoint() autocmd Filetype haskell set softtabstop=2 autocmd Filetype haskell set shiftwidth=2 augroup END " ctrl-space auto complete in insert mode inoremap " FZF settings nmap f :Files| " fuzzy find files in the working directory (where you launched Vim from) nmap / :BLines| " fuzzy find lines in the current file nmap b :Buffers| " fuzzy find an open buffer nmap a :Rg | " fuzzy find text in the working directory nmap c :Commands| " fuzzy find Vim commands (like Ctrl-Shift-P in Sublime/Atom/VSC) nmap t :Tags| " fuzzy find tags " }}} let g:fzf_layout = { 'down': '~40%' } let g:tagbar_type_haskell = { \ 'ctagsbin' : 'hasktags', \ 'ctagsargs' : '-x -c -o-', \ 'kinds' : [ \ 'm:modules:0:1', \ 'd:data:0:1', \ 'd_gadt:data gadt:0:1', \ 'nt:newtype:0:1', \ 'c:classes:0:1', \ 'i:instances:0:1', \ 'cons:constructors:0:1', \ 'c_gadt:constructor gadt:0:1', \ 'c_a:constructor accessors:1:1', \ 't:type names:0:1', \ 'pt:pattern types:0:1', \ 'pi:pattern implementations:0:1', \ 'ft:function types:0:1', \ 'fi:function implementations:0:1', \ 'o:others:0:1' \ ], \ 'sro' : '.', \ 'kind2scope' : { \ 'm' : 'module', \ 'd' : 'data', \ 'd_gadt' : 'd_gadt', \ 'c_gadt' : 'c_gadt', \ 'nt' : 'newtype', \ 'cons' : 'cons', \ 'c_a' : 'accessor', \ 'c' : 'class', \ 'i' : 'instance' \ }, \ 'scope2kind' : { \ 'module' : 'm', \ 'data' : 'd', \ 'newtype' : 'nt', \ 'cons' : 'c_a', \ 'd_gadt' : 'c_gadt', \ 'class' : 'ft', \ 'instance' : 'ft' \ } \ }