" Basic display set number set colorcolumn=80 " Persistent undo set undofile set undolevels=4096 set undoreload=16384 " Search set ignorecase " Hide search when enter is pressed nnoremap :nohlsearch " Autoload settings from file set modeline " Use system clipboard set clipboard=unnamedplus " Support more file encodings set fileencodings=ucs-bom,utf-8,default,sjis,latin1 " Scroll before reaching top/bottom set scrolloff=5 " Conceal when line is not active set conceallevel=1 " Just hide buffer instead of unloading set hidden " Remap leader key let mapleader = "," " Jump to the last position if has("autocmd") au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") \| exe "normal! g`\"" | endif endif call plug#begin('~/.local/share/nvim/plugged') " Multi-entry selection UI Plug 'junegunn/fzf', { 'tag': trim(system('fzf --version')) } " FIXME: update once nixpkgs stable has fzf ≥ 0.23 Plug 'junegunn/fzf.vim', { 'commit': '0fe8e198a3a501b54dbc4f9587526c097599f95a' } " Per-project settings Plug 'editorconfig/editorconfig-vim' " Tagbar Plug 'majutsushi/tagbar' nmap :TagbarToggle " Snippets if has('python3') Plug 'SirVer/ultisnips' let g:UltiSnipsExpandTrigger = '' let g:UltiSnipsJumpForwardTrigger = '' let g:UltiSnipsJumpBackwardTrigger = '' Plug 'honza/vim-snippets' endif " Deoplete Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } let g:deoplete#enable_at_startup = 1 " Airline Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' let g:airline_powerline_fonts = 1 let g:airline_solarized_bg='dark' let g:airline_theme='solarized' " Airline for tmux Plug 'edkolev/tmuxline.vim' " NERDTree Plug 'preservim/nerdtree' Plug 'jistr/vim-nerdtree-tabs' map N NERDTreeTabsToggle map n NERDTreeFocusToggle Plug 'Xuyuanp/nerdtree-git-plugin' " Icons for NERDTree and airline Plug 'ryanoasis/vim-devicons' " Git integration Plug 'tpope/vim-fugitive' " Intra word motion Plug 'chaoren/vim-wordmotion' " Trailing whitespace highlighting Plug 'ntpeters/vim-better-whitespace' " Syntax highlighting/Language support Plug 'Glench/Vim-Jinja2-Syntax', { 'for': 'jinja' } Plug 'LnL7/vim-nix', { 'for': 'nix' } Plug 'cespare/vim-toml', { 'for': 'toml' } Plug 'mechatroner/rainbow_csv' Plug 'posva/vim-vue', { 'for': 'vue' } Plug 'sirtaj/vim-openscad', { 'for': 'openscad' } " Language Client Plug 'autozimu/LanguageClient-neovim', { \ 'branch': 'next', \ 'do': 'bash install.sh', \ } let g:LanguageClient_serverCommands = { \ 'rust': ['nix-shell', '--quiet', '-p', 'rls', '--run', 'rls'], \ 'go': ['nix-shell', '--quiet', '-p', 'gopls', '--run', 'gopls'], \ 'python': ['nix-shell', '--quiet', '-p', 'python38Packages.python-language-server', '--run', 'pyls'], \ 'typescript': ['nix-shell', '--quiet', '-p', 'nodePackages.javascript-typescript-langserver', '--run', 'javascript-typescript-stdio'], \ 'javascript': ['nix-shell', '--quiet', '-p', 'nodePackages.javascript-typescript-langserver', '--run', 'javascript-typescript-stdio'], \ 'haskell': ['nix-shell', '--quiet', '-p', 'haskellPackages.haskell-language-server', '--run', 'haskell-language-server --lsp'], \ } let g:LanguageClient_loggingFile = '~/.local/share/nvim/LanguageClient.log' let g:LanguageClient_settingsPath = '~/.config/nvim/LanguageClient.json' function LC_maps() if has_key(g:LanguageClient_serverCommands, &filetype) nnoremap :call LanguageClient_contextMenu() nnoremap K :call LanguageClient#textDocument_hover() nnoremap gd :call LanguageClient#textDocument_definition() nnoremap :call LanguageClient#textDocument_rename() set formatexpr=LanguageClient#textDocument_rangeFormatting_sync() endif endfunction autocmd FileType * call LC_maps() " Rust Plug 'rust-lang/rust.vim' let g:rustfmt_autosave_if_config_present = 1 let g:rust_fold = 1 map rt :RustTest " Black (python formatter) Plug 'psf/black', { 'commit': '1d3fb871bec82d1263940ba1d32095d660fea2ab', 'for': 'python' } " LaTeX helpers Plug 'lervag/vimtex' let g:tex_flavor='latex' let g:vimtex_view_method='zathura' let g:tex_conceal='abdmg' let g:vimtex_syntax_autoload_packages = [ \'amsmath', \'luacode', \] " this disables some helful warnings that often have a reason why I ignore them let g:vimtex_quickfix_ignore_filters = [ \'Underfull \\hbox (badness [0-9]*) in ', \'Overfull \\hbox ([0-9]*.[0-9]*pt too wide) in ', \'Overfull \\vbox ([0-9]*.[0-9]*pt too high) detected ', \'Package hyperref Warning: Token not allowed in a PDF string', \'Package typearea Warning: Bad type area settings!', \] " When using math environments vim does not know if if it currently is in one " or outside of one unless it parses the file from the start. Parsing the " file from the start each time fixes this but leads to a performance drop " (depending on the number of lines). " Also, somehow using FileType tex does not work, so this will enable slow " syntax highlighting everywhere once a *.tex file is opened. autocmd BufEnter *.tex syntax sync fromstart " Color schemes Plug 'altercation/vim-colors-solarized' call plug#end() set background=dark silent! colorscheme solarized