2016-02-11 02:20:45 -06:00
|
|
|
" initial plugin manager
|
2016-01-06 11:55:04 -06:00
|
|
|
if empty(glob('~/.config/nvim/autoload/plug.vim'))
|
2016-02-11 02:20:45 -06:00
|
|
|
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \
|
|
|
|
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
|
|
|
autocmd VimEnter * PlugInstall
|
2016-01-06 11:55:04 -06:00
|
|
|
endif
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" tell vim to reload the init.vim file when it saves it
|
|
|
|
autocmd! BufWritePost init.vim source %
|
|
|
|
|
2016-01-06 11:55:04 -06:00
|
|
|
" Initialize plugin manager
|
2016-02-11 02:20:45 -06:00
|
|
|
call plug#begin('~/.config/nvim/bundle')
|
2016-01-06 11:55:04 -06:00
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" let plugin manager manage itself
|
|
|
|
Plug 'junegunn/vim-plug'
|
2016-01-06 11:55:04 -06:00
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" plugins
|
2016-01-06 11:55:04 -06:00
|
|
|
|
2016-03-29 20:16:43 -05:00
|
|
|
Plug 'vim-airline/vim-airline' " statusline
|
|
|
|
" let g:airline_powerline_fonts = 0
|
2016-02-11 02:20:45 -06:00
|
|
|
let g:airline#extensions#tabline#enabled = 1 " automatically displays all buffers when there's only one tab open
|
|
|
|
let g:airline#extensions#tabline#fnamemod = ':t'
|
2016-03-29 20:16:43 -05:00
|
|
|
" set laststatus=2 " always show statusline
|
|
|
|
" set noshowmode " hides default mode
|
2016-02-11 02:20:45 -06:00
|
|
|
let g:airline#extensions#tabline#left_sep = ''
|
|
|
|
let g:airline#extensions#tabline#left_alt_sep = ''
|
2016-01-06 11:55:04 -06:00
|
|
|
let g:airline_right_alt_sep = ''
|
|
|
|
let g:airline_right_sep = ''
|
|
|
|
let g:airline_left_alt_sep= ''
|
|
|
|
let g:airline_left_sep = ''
|
2016-03-29 20:16:43 -05:00
|
|
|
Plug 'vim-airline/vim-airline-themes'
|
2016-01-06 11:55:04 -06:00
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
Plug 'scrooloose/nerdtree', {'on': ['NERDTreeToggle', 'NERDTree']} " nice sidebar for files
|
|
|
|
let g:NERDTreeDirArrowExpandable = ' '
|
|
|
|
let g:NERDTreeDirArrowCollapsible = ' '
|
|
|
|
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif " close vim if last buffer is a NERD buffer
|
|
|
|
|
|
|
|
" Plug 'nathanaelkane/vim-indent-guides' " indentation guides (NOTE: doesn't seem to work with my colorscheme)
|
|
|
|
" let g:indent_guides_start_level = 0
|
|
|
|
" let g:indent_guides_auto_color = 1
|
|
|
|
" highlight IndentGuidesOdd ctermbg=1
|
|
|
|
" highlight IndentGuidesEven ctermbg=236
|
|
|
|
|
|
|
|
Plug 'Shougo/deoplete.nvim' " autocomplete
|
2016-01-06 11:55:04 -06:00
|
|
|
let g:deoplete#enable_at_startup = 1
|
2016-02-11 02:20:45 -06:00
|
|
|
|
|
|
|
Plug 'scrooloose/syntastic' " syntax checker
|
2016-02-13 03:36:57 -06:00
|
|
|
Plug 'bkad/CamelCaseMotion' " camel case and underscore word movements
|
2016-02-11 02:20:45 -06:00
|
|
|
Plug 'LargeFile' " gracefully handle very large files
|
|
|
|
Plug 'tpope/vim-commentary' " toggle comments in code easily
|
|
|
|
Plug 'tmux-plugins/vim-tmux-focus-events' " allow transitions within tmux
|
|
|
|
Plug 'christoomey/vim-tmux-navigator' " allow transitions within tmux
|
|
|
|
Plug 'tasklist.vim' " show tasks with leader,t
|
|
|
|
Plug 'godlygeek/tabular' " align text lines together
|
|
|
|
Plug 'jez/vim-superman' " view man pages with vim
|
|
|
|
Plug 'tpope/vim-surround' " quickly modify text surrounding objects
|
|
|
|
Plug 'tpope/vim-speeddating' " vim knows about date-like text objects
|
|
|
|
Plug 'junegunn/fzf', {'dir': '~/.fzf', 'do': './install --all'} " fuzzy file finding
|
|
|
|
Plug 'junegunn/fzf.vim' " helpers for using fzf in vim
|
2016-03-29 20:12:29 -05:00
|
|
|
Plug 'michaeljsmith/vim-indent-object' " adds an indentation level text object
|
|
|
|
Plug 'wellle/targets.vim' " adds some more handy text objects
|
2016-02-11 02:20:45 -06:00
|
|
|
|
|
|
|
" plugins for specific file types
|
2016-01-06 11:55:04 -06:00
|
|
|
Plug 'kchmck/vim-coffee-script', {'for': ['coffee', 'coffeescript', 'vue']}
|
|
|
|
Plug 'posva/vim-vue', {'for': ['vue']}
|
|
|
|
Plug 'elixir-lang/vim-elixir', {'for': ['elixir']}
|
|
|
|
Plug 'wavded/vim-stylus', {'for': ['styl', 'stylus', 'vue']}
|
|
|
|
Plug 'rust-lang/rust.vim', {'for': ['rs', 'rust']}
|
|
|
|
Plug 'plasticboy/vim-markdown', {'for': ['md', 'markdown']}
|
|
|
|
Plug 'digitaltoad/vim-jade', {'for': ['jade', 'vue']}
|
|
|
|
Plug 'freitass/todo.txt-vim', {'for': ['todo']}
|
|
|
|
Plug 'leafo/moonscript-vim', {'for': ['moon', 'moonscript']}
|
2016-04-18 01:20:39 -05:00
|
|
|
Plug 'evidens/vim-twig'
|
2016-01-06 11:55:04 -06:00
|
|
|
|
|
|
|
call plug#end()
|
|
|
|
|
|
|
|
filetype on
|
|
|
|
filetype indent on
|
|
|
|
filetype plugin on
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" language specific configuration
|
|
|
|
|
|
|
|
" C
|
2016-01-06 11:55:04 -06:00
|
|
|
let c_space_errors = 1
|
|
|
|
let c_comment_strings = 0 " dont highlight strings inside C comments
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" Python
|
2016-01-06 11:55:04 -06:00
|
|
|
let python_space_errors = 1
|
|
|
|
autocmd FileType python setl tabstop=2 expandtab shiftwidth=2 softtabstop=2
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" HAMLC
|
2016-01-06 11:55:04 -06:00
|
|
|
autocmd BufRead,BufNewFile *.hamlc set ft=haml
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" Markdown
|
2016-01-06 11:55:04 -06:00
|
|
|
autocmd BufNewFile,BufReadPost *.md setl filetype=markdown spell textwidth=0 wrapmargin=0
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" Text
|
2016-01-06 11:55:04 -06:00
|
|
|
autocmd BufNewFile,BufReadPost *.txt setl spell textwidth=0 wrapmargin=0
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" whitespace
|
2016-01-06 11:55:04 -06:00
|
|
|
set tabstop=2
|
|
|
|
set shiftwidth=2
|
|
|
|
set softtabstop=2
|
|
|
|
set expandtab
|
|
|
|
set autoindent smartindent
|
2016-02-11 02:20:45 -06:00
|
|
|
set listchars=tab:»·,trail:· " the end dot character here is literally present
|
2016-01-06 11:55:04 -06:00
|
|
|
set list
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" look and feel
|
|
|
|
|
2016-01-06 11:55:04 -06:00
|
|
|
set wrap
|
|
|
|
set linebreak
|
|
|
|
set breakindent
|
|
|
|
set textwidth=80
|
2016-02-11 02:20:45 -06:00
|
|
|
set formatoptions=crql1j
|
2016-01-06 11:55:04 -06:00
|
|
|
" t autowrap to textwidth
|
|
|
|
" c autowrap comments to textwidth
|
|
|
|
" r autoinsert comment leader with <enter>
|
|
|
|
" q allow formatting of comments with gq
|
2016-02-11 02:20:45 -06:00
|
|
|
" l lines longer than 'textwidth' on insert do not get formatted
|
|
|
|
" 1 don't break a line after a one-letter word - break it before
|
|
|
|
" j where it makes sense, remove a comment leader when joining lines
|
2016-01-06 11:55:04 -06:00
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
set title " handle window title
|
2016-01-06 11:55:04 -06:00
|
|
|
set synmaxcol=2048
|
2016-02-11 02:20:45 -06:00
|
|
|
set number " line numbers
|
|
|
|
" set relativenumber
|
|
|
|
set cursorline " highlight the current line
|
|
|
|
" set cursorcolumn " highlight the current column
|
|
|
|
" let &colorcolumn=join(range(81,400),",") " colors columns past 80
|
2016-01-06 11:55:04 -06:00
|
|
|
set showcmd
|
|
|
|
set nowildmenu
|
|
|
|
set wildmode=longest,list,full
|
|
|
|
set cpoptions-=$
|
|
|
|
set showmatch
|
|
|
|
set mouse=a
|
|
|
|
set mousehide
|
|
|
|
set backspace=indent,eol,start
|
|
|
|
set ruler
|
|
|
|
set lazyredraw
|
|
|
|
set scrolloff=8
|
|
|
|
set sidescrolloff=8
|
|
|
|
set splitright
|
|
|
|
set splitbelow
|
|
|
|
set noerrorbells
|
|
|
|
set visualbell
|
|
|
|
set nobackup
|
|
|
|
set nowritebackup
|
|
|
|
set noswapfile
|
|
|
|
set timeout
|
|
|
|
set ttimeoutlen=200
|
2016-02-11 02:20:45 -06:00
|
|
|
set isfname+=32
|
|
|
|
|
|
|
|
set vb t_vb=
|
|
|
|
if has('autocmd')
|
|
|
|
autocmd GUIEnter * set visualbell t_vb=
|
|
|
|
endif
|
2016-01-06 11:55:04 -06:00
|
|
|
|
|
|
|
let base16colorspace=256
|
|
|
|
set background=dark
|
|
|
|
colorscheme current
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
set hidden " hides abandoned buffers or something
|
2016-01-06 11:55:04 -06:00
|
|
|
set shortmess=I
|
|
|
|
set history=1000
|
|
|
|
set undofile
|
|
|
|
set undodir=$HOME/.config/nvim/undo
|
|
|
|
set undolevels=1000
|
|
|
|
set undoreload=10000
|
|
|
|
|
|
|
|
set backupdir=$HOME/.config/nvim/backup
|
|
|
|
set directory=$HOME/.config/nvim/backup
|
|
|
|
set spellfile=$HOME/.config/nvim/spell/en.utf-8.add
|
|
|
|
|
|
|
|
set ignorecase
|
|
|
|
set smartcase
|
|
|
|
set incsearch
|
|
|
|
set hlsearch
|
|
|
|
set wrapscan
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
set foldmethod=syntax
|
|
|
|
set foldlevel=99
|
|
|
|
set foldnestmax=10
|
|
|
|
set nofoldenable
|
|
|
|
set foldlevelstart=1
|
|
|
|
|
|
|
|
if has('vim_starting')
|
|
|
|
set encoding=utf8
|
|
|
|
endif
|
|
|
|
set autowrite
|
|
|
|
set autochdir
|
|
|
|
set autoread
|
|
|
|
set nomodeline
|
|
|
|
|
2016-03-29 20:16:43 -05:00
|
|
|
" yank to OS clipboard
|
|
|
|
set clipboard+=unnamed
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" allows for manual and syntax folding... supposedly
|
|
|
|
augroup vimrc
|
|
|
|
au BufReadPre * setlocal foldmethod=indent
|
|
|
|
au BufWinEnter * if &fdm == 'indent' | setlocal foldmethod=manual | endif
|
|
|
|
augroup END
|
|
|
|
|
|
|
|
" jump to last opened position in file
|
|
|
|
if has("autocmd")
|
|
|
|
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
" no empty buffer on startup
|
|
|
|
autocmd VimEnter * nested if bufname('')=='' && line('$') == 1 && col('$')==1 && !&modified | bd % | endif
|
|
|
|
|
|
|
|
" bindings
|
|
|
|
|
|
|
|
" common typo fixes
|
2016-01-06 11:55:04 -06:00
|
|
|
command! WQ wq
|
|
|
|
command! Wq wq
|
|
|
|
command! Wqa wqa
|
|
|
|
command! W w
|
|
|
|
command! Q q
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" best leader
|
2016-01-06 11:55:04 -06:00
|
|
|
let mapleader = "\<Space>"
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" change buffers with leader,tab
|
2016-01-06 11:55:04 -06:00
|
|
|
nnoremap <leader><Tab> :bnext<CR>
|
|
|
|
nnoremap <leader><S-Tab> :bprevious<CR>
|
|
|
|
|
|
|
|
" don't kill vim
|
|
|
|
nnoremap <leader>K <Nop>
|
2016-02-11 02:20:45 -06:00
|
|
|
nnoremap <S-K> <NOP>
|
|
|
|
|
|
|
|
" nerdtree
|
|
|
|
nnoremap <C-n> :NERDTree<CR>
|
|
|
|
|
|
|
|
" run macro across visually selected lines
|
|
|
|
xnoremap @ :<C-u>call ExecuteMacroOverVisualRange()<CR>
|
|
|
|
function! ExecuteMacroOverVisualRange()
|
|
|
|
echo "@".getcmdline()
|
|
|
|
execute ":'<,'>normal @".nr2char(getchar())
|
|
|
|
endfunction
|
2016-01-06 11:55:04 -06:00
|
|
|
|
|
|
|
" quick paragraph formatting
|
|
|
|
vmap Q gq
|
|
|
|
nmap Q gqap
|
|
|
|
|
|
|
|
" launch fzf for the current git repo
|
|
|
|
nnoremap <C-P> :GitFiles<CR>
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" use leader j and k to switch buffers as well
|
2016-01-06 11:55:04 -06:00
|
|
|
nnoremap <leader>k :bnext<CR>
|
|
|
|
nnoremap <leader>j :bprevious<CR>
|
2016-02-11 02:20:45 -06:00
|
|
|
nnoremap <C-k> :bnext<CR>
|
|
|
|
nnoremap <C-j> :bprevious<CR>
|
2016-01-06 11:55:04 -06:00
|
|
|
|
|
|
|
" fast word change
|
|
|
|
nnoremap <leader>c ciw
|
|
|
|
nnoremap <leader>C ciW
|
|
|
|
|
|
|
|
" bash-like deletion
|
|
|
|
inoremap <C-BS> <C-w>
|
|
|
|
inoremap <A-BS> <C-w>
|
|
|
|
|
|
|
|
" clear search higlight
|
|
|
|
nnoremap <leader>/ :let @/ = ""<CR>
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" remap jk and kj to escape in insert mode
|
2016-01-06 11:55:04 -06:00
|
|
|
inoremap jj <Esc>
|
2016-02-11 02:20:45 -06:00
|
|
|
inoremap Jj <Esc>
|
|
|
|
inoremap Jj <Esc>
|
|
|
|
inoremap JJ <Esc>
|
|
|
|
inoremap jk <Esc>
|
|
|
|
inoremap Jk <Esc>
|
|
|
|
inoremap jK <Esc>
|
|
|
|
inoremap JK <Esc>
|
|
|
|
inoremap kj <Esc>
|
|
|
|
inoremap Kj <Esc>
|
|
|
|
inoremap kJ <Esc>
|
|
|
|
inoremap KJ <Esc>
|
2016-01-06 11:55:04 -06:00
|
|
|
|
|
|
|
" use hjkl-movement between rows when soft wrapping:
|
|
|
|
nnoremap j gj
|
|
|
|
nnoremap k gk
|
|
|
|
vnoremap j gj
|
|
|
|
vnoremap k gk
|
|
|
|
|
2016-02-13 03:36:57 -06:00
|
|
|
" camel case movements
|
|
|
|
map <silent> ,w <Plug>CamelCaseMotion_w
|
|
|
|
map <silent> ,b <Plug>CamelCaseMotion_b
|
|
|
|
map <silent> ,e <Plug>CamelCaseMotion_e
|
|
|
|
map <silent> ,ge <Plug>CamelCaseMotion_ge
|
|
|
|
|
|
|
|
" inner _ objects
|
|
|
|
omap <silent> iw <Plug>CamelCaseMotion_iw
|
|
|
|
xmap <silent> iw <Plug>CamelCaseMotion_iw
|
|
|
|
omap <silent> ib <Plug>CamelCaseMotion_ib
|
|
|
|
xmap <silent> ib <Plug>CamelCaseMotion_ib
|
|
|
|
omap <silent> ie <Plug>CamelCaseMotion_ie
|
|
|
|
xmap <silent> ie <Plug>CamelCaseMotion_ie
|
|
|
|
|
|
|
|
" a _ objects
|
|
|
|
omap <silent> aw <Plug>CamelCaseMotion_aw
|
|
|
|
xmap <silent> aw <Plug>CamelCaseMotion_aw
|
|
|
|
omap <silent> ab <Plug>CamelCaseMotion_ab
|
|
|
|
xmap <silent> ab <Plug>CamelCaseMotion_ab
|
|
|
|
omap <silent> ae <Plug>CamelCaseMotion_ae
|
|
|
|
xmap <silent> ae <Plug>CamelCaseMotion_ae
|
|
|
|
|
2016-01-06 11:55:04 -06:00
|
|
|
" remove trailing whitespace:
|
2016-02-11 02:20:45 -06:00
|
|
|
map <F3> mw:%s/\s\+$//<CR>:let @/ = ""<CR>'w
|
2016-01-06 11:55:04 -06:00
|
|
|
|
|
|
|
" close buffer:
|
2016-02-11 02:20:45 -06:00
|
|
|
nnoremap <silent> <C-w> :bd<CR>
|
|
|
|
nnoremap <silent> <leader>w :bd<CR>
|
2016-01-06 11:55:04 -06:00
|
|
|
|
|
|
|
" toggle spell checking:
|
|
|
|
map <F5> :setlocal spell!<CR>
|
|
|
|
|
|
|
|
" open urls, files, etc. example: http://google.com:
|
|
|
|
noremap <leader>o :!xdg-open <cfile><CR><CR>
|
|
|
|
|
|
|
|
" keep that dumb window from popping up
|
|
|
|
map q: :q
|
2016-02-11 02:20:45 -06:00
|
|
|
noremap qqq: q:
|
2016-01-06 11:55:04 -06:00
|
|
|
|
2016-01-11 09:22:54 -06:00
|
|
|
" sane n/N behavior
|
|
|
|
nnoremap <expr> n 'Nn'[v:searchforward]
|
|
|
|
nnoremap <expr> N 'nN'[v:searchforward]
|
|
|
|
|
|
|
|
" better command history navigation
|
|
|
|
cnoremap <c-n> <down>
|
|
|
|
cnoremap <c-p> <up>
|
|
|
|
|
2016-02-11 02:20:45 -06:00
|
|
|
" keep selection after indenting visual selection
|
2016-01-11 09:22:54 -06:00
|
|
|
xnoremap < <gv
|
|
|
|
xnoremap > >gv
|
|
|
|
|