dotfiles/.config/nvim/init.vim

247 lines
7.9 KiB
VimL

" vim: set foldmethod=marker foldlevel=0 nomodeline:
" ================================================================================
" .init.vim / .vimrc of Marty Oehme {{{
" ================================================================================
"
" - stolen from many different sources including
" Steve Losh
" Junegunn Choi
" Tim Pope
" }}}
" ================================================================================
" PLUGIN INSTALLATION - handled by VIM-PLUG {{{
" ================================================================================
"
" automatically install vim-plug if it does not exist
" Note: this installs it in the neovim folder, not the vim folder
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
" automatically install any missing plugins
autocmd VimEnter *
\ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
\| PlugInstall --sync | q
\| endif
" defines plugin directory
" Install plugins from vim with :PlugInstall
silent! if plug#begin('~/.local/share/nvim/plugged')
" Base
" a minimal definition of variables TODO still necessary for nvim?
Plug 'tpope/vim-sensible'
" add seamless movement between vim and tmux, switch windows with C-hjkl
Plug 'christoomey/vim-tmux-navigator'
" Workflow
Plug 'tpope/vim-commentary' " easily toggle comments for lines, paragraphs etc
Plug 'jiangmiao/auto-pairs' " Auto close brackets and ''
" Ecosystem
" Plug 'tpope/vim-fugitive' - Will have to take a closer look some other time
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " show a directory listing within vim
Plug 'Xuyuanp/nerdtree-git-plugin' " show git status in nerdtree for files and dirs
Plug 'Yggdroot/LeaderF' " fuzzy matcher, apparently faster than fzf, ctrlp, unit, denite
" Language Integration
Plug 'sheerun/vim-polyglot' " syntax plugins for almost every language
Plug 'stephpy/vim-yaml'
Plug 'mhartington/nvim-typescript', {'do': './install.sh'}
" HTML Workflow
Plug 'valloric/matchtagalways'
Plug 'alvan/vim-closetag'
" For async completion
Plug 'Shougo/deoplete.nvim' " automatic suggestions, can also perhaps be changed for newer plugs
Plug 'w0rp/ale' " asynchronous linting - might be superseded by lsp or coc.nvim at some point
" Design
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'edkolev/tmuxline.vim'
" Colorschemes
Plug 'Nequo/vim-allomancer'
Plug 'morhetz/gruvbox'
call plug#end()
endif
" }}}
" ================================================================================
" PLUGIN CONFIGURATION {{{
" ================================================================================
" PLUGIN: NERDTree
" highlight the line the cursor is on
let NERDTreeHighlightCursorline = 1
" remove Press ? for help
let NERDTreeMinimalUI=1
" loads nerdtree plugin when starting vim with a directory
" this is necessary when we lazyload nerdtree with vimplug above
" since it would only get loaded with nttoggle otherwise, and run netrw
augroup nerd_loader
autocmd!
autocmd VimEnter * silent! autocmd! FileExplorer
autocmd BufEnter,BufNew *
\ if isdirectory(expand('<amatch>'))
\| call plug#load('nerdtree')
\| execute 'autocmd! nerd_loader'
\| endif
augroup END
" PLUGIN: DEOPLETE
" enable deoplete at startup
let g:deoplete#enable_at_startup = 1
let g:deoplete#enable_ignore_case = 1
let g:deoplete#enable_smart_case = 1
let g:deoplete#enable_camel_case = 1
let g:deoplete#enable_refresh_always = 1
let g:deoplete#max_abbr_width = 0
let g:deoplete#max_menu_width = 0
let g:deoplete#omni#input_patterns = get(g:,'deoplete#omni#input_patterns',{})
" PLUGIN: ALE
let g:ale_fix_on_save = 1
let g:ale_fixers = {
\'javascipt': ['eslint', 'prettier'],
\'html': ['tidy','prettier'],
\'typescript': ['prettier','tslint'],
\'*': ['remove_trailing_lines', 'trim_whitespace'],
\}
" PLUGIN: AIRLINE
" PLUGIN: TMUXLINE
let g:airline_powerline_fonts=1
let g:airline_theme='raven'
colorscheme allomancer
" disable automatically refreshing the mux statusbar since it breaks tmux
" prefix highlighting. Instead, when changing vim statusbar just create
" snapshot with :TmuxlineSnapshot file and stick it into tmux config manually
let g:airline#extensions#tmuxline#enabled = 0
" custom preset with left-justified window list
let g:tmuxline_preset = {
\'a' : '#S',
\'b' : '#(whoami)',
\'c' : '#I:#P',
\'win' : '#I #W',
\'cwin' : [' ', '#I #W'],
\'x' : '#{prefix_highlight} %H:%M:%S',
\'y' : '%d-%b-%y',
\'z' : '#H',
\'options' : {}}
" automatically save the current buffer when navigating away from vim
let g:tmux_navigator_save_on_switch = 1
" }}}
" ================================================================================
" VIM SETTINGS {{{
" ================================================================================
"
" set truecolor (neovim)
set termguicolors
" sets tabs to be 2 characters, expanded into spaces, but still removable with
" one press of backspace.
" great explanation: http://vimcasts.org/transcripts/2/en/
set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
" set cursor line highlighting, esp useful when using with bracket
" highlighting and you don't know which side of the brace the cursor is on
set cursorline
" shows linenumbers relative to the one you are on, for easy movement and
" dNUMBERd deletions
set number relativenumber
" keeps an undofile next to files so that you can even undo if vim is closed
" in between
set undofile
" ignores case by default but will use case when search is specifically not
" all lowercased
set ignorecase
set smartcase
" whenever vim loses focus, save
au FocusLost * :wa
" disables showing us the current mode in the command line since airline takes
" care of it
set noshowmode
" highlight everything that goes over 80 columns
highlight ColorColumn ctermbg=magenta
call matchadd('ColorColumn', '\%81v', 100)
" }}}
" ================================================================================
" KEYBINDINGS {{{
" ================================================================================
"
" set our leader key to space since with hjkl, space is largely useless
let mapleader = "\<Space>"
" set jk to escape, in case capslock is not mapped to escape on the system
inoremap jk <ESC>
" remove search highlights by pressing space+/ - the key for searching the
" first place
nnoremap <leader>/ :noh<cr>
" move around between matching brackets with tab
nnoremap <tab> %
nnoremap <tab> %
" select the whole buffer with <leader>-a
map <leader>a ggVG
" quickly edit vimrc with leader+V
map <leader>V :vsp ~/.config/nvim/init.vim<cr>
" automatically source the vimrc file whenever it is saved (causes slowdown
" when done in MANY successions)
" au BufWritePost init.vim so ~/.config/nvim/init.vim
" get rid of the help message popping up when I miss esc and hit F1
nnoremap <F1> <ESC>
inoremap <F1> <ESC>
vnoremap <F1> <ESC>
" remove all trailing whitespaces
" on pressing space+W
nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<CR>
" automatically on saving
" autocmd BufWritePre * :%s/\s\+$//e
" 'open new tab' with leader-t (opens new buffer and switches to it)
" open actual new tab with leader-T
nnoremap <leader>t :vsp .<cr>
nnoremap <leader>T :tabedit .<cr>
" save current buffer with Ctrl-s
nnoremap <C-s> :w<cr>
" open/close NERDtree with leader-e
" whatever method tree has been opened by, leader-e closes it again
nnoremap <leader>e :NERDTreeToggle<CR>
" open root of current VCS project in tree
nnoremap <leader><C-e> :NERDTreeVCS<CR>
" open current nerdtree with current file highlighted
nnoremap <leader>E :NERDTreeFind<CR>
" }}}
" ================================================================================
" END
" ================================================================================