Last active
January 16, 2017 13:18
-
-
Save ikouchiha47/b366fe0e841eaea645af615896379bd9 to your computer and use it in GitHub Desktop.
neovim config
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
"***************************************************************************** | |
"" Vim-PLug core | |
"***************************************************************************** | |
if has('vim_starting') | |
set nocompatible " Be iMproved | |
endif | |
let vimplug_exists=expand('~/.config/nvim/autoload/plug.vim') | |
let g:vim_bootstrap_langs = "c,elixir,go,javascript,ocaml,ruby" | |
let g:vim_bootstrap_editor = "nvim" " nvim or vim | |
if !filereadable(vimplug_exists) | |
echo "Installing Vim-Plug..." | |
echo "" | |
silent !\curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim | |
let g:not_finish_vimplug = "yes" | |
autocmd VimEnter * PlugInstall | |
endif | |
" Required: | |
call plug#begin(expand('~/.config/nvim/plugged')) | |
"***************************************************************************** | |
"" Plug install packages | |
"***************************************************************************** | |
Plug 'scrooloose/nerdtree' | |
Plug 'jistr/vim-nerdtree-tabs' | |
Plug 'tpope/vim-commentary' | |
Plug 'tpope/vim-fugitive' | |
Plug 'ctrlpvim/ctrlp.vim' | |
Plug 'vim-airline/vim-airline' | |
Plug 'vim-airline/vim-airline-themes' | |
Plug 'airblade/vim-gitgutter' | |
Plug 'vim-scripts/grep.vim' | |
Plug 'vim-scripts/CSApprox' | |
Plug 'bronson/vim-trailing-whitespace' | |
Plug 'Raimondi/delimitMate' | |
Plug 'majutsushi/tagbar' | |
Plug 'scrooloose/syntastic' | |
Plug 'Yggdroot/indentLine' | |
Plug 'avelino/vim-bootstrap-updater' | |
Plug 'sheerun/vim-polyglot' | |
Plug 'derekwyatt/vim-scala' | |
Plug 'Shougo/deoplete.nvim' | |
Plug 'dracula/vim' | |
:imap zz <Esc> | |
let g:make = 'gmake' | |
if exists('make') | |
let g:make = 'make' | |
endif | |
Plug 'Shougo/vimproc.vim', {'do': g:make} | |
"" Vim-Session | |
Plug 'xolox/vim-misc' | |
Plug 'xolox/vim-session' | |
if v:version >= 703 | |
Plug 'Shougo/vimshell.vim' | |
endif | |
if v:version >= 704 | |
"" Snippets | |
" Plug 'SirVer/ultisnips' | |
Plug 'FelikZ/ctrlp-py-matcher' | |
endif | |
Plug 'honza/vim-snippets' | |
"" Color | |
Plug 'tomasr/molokai' | |
"***************************************************************************** | |
"" Custom bundles | |
"***************************************************************************** | |
" c | |
Plug 'vim-scripts/c.vim', {'for': ['c', 'cpp']} | |
Plug 'ludwig/split-manpage.vim' | |
" elixir | |
Plug 'elixir-lang/vim-elixir' | |
Plug 'carlosgaldino/elixir-snippets' | |
" go | |
"" Go Lang Bundle | |
Plug 'fatih/vim-go', {'do': ':GoInstallBinaries'} | |
" javascript | |
"" Javascript Bundle | |
Plug 'jelera/vim-javascript-syntax' | |
" ocaml | |
"" OCaml Bundle | |
Plug 'def-lkb/ocp-indent-vim' | |
" ruby | |
Plug 'tpope/vim-rails' | |
Plug 'tpope/vim-rake' | |
Plug 'tpope/vim-projectionist' | |
Plug 'thoughtbot/vim-rspec' | |
Plug 'ecomba/vim-ruby-refactoring' | |
" Use deoplete. | |
let g:deoplete#enable_at_startup = 1 | |
"***************************************************************************** | |
"***************************************************************************** | |
"" Include user's extra bundle | |
if filereadable(expand("~/.config/nvim/local_bundles.vim")) | |
source ~/.config/nvim/local_bundles.vim | |
endif | |
call plug#end() | |
" Required: | |
filetype plugin indent on | |
"***************************************************************************** | |
"" Basic Setup | |
"*****************************************************************************" | |
"" Encoding | |
set encoding=utf-8 | |
set fileencoding=utf-8 | |
set fileencodings=utf-8 | |
set bomb | |
set binary | |
"" Fix backspace indent | |
set backspace=indent,eol,start | |
"" Tabs. May be overriten by autocmd rules | |
set tabstop=4 | |
set softtabstop=0 | |
set shiftwidth=4 | |
set expandtab | |
"" Map leader to , | |
let mapleader=',' | |
"" Enable hidden buffers | |
set hidden | |
"" Searching | |
set hlsearch | |
set incsearch | |
set ignorecase | |
set smartcase | |
"" Directories for swp files | |
set nobackup | |
set noswapfile | |
set fileformats=unix,dos,mac | |
set showcmd | |
set shell=/bin/sh | |
" session management | |
let g:session_directory = "~/.config/nvim/session" | |
let g:session_autoload = "no" | |
let g:session_autosave = "no" | |
let g:session_command_aliases = 1 | |
"***************************************************************************** | |
"" Visual Settings | |
"***************************************************************************** | |
syntax on | |
set ruler | |
set number | |
let no_buffers_menu=1 | |
if !exists('g:not_finish_vimplug') | |
colorscheme molokai | |
endif | |
set mousemodel=popup | |
set t_Co=256 | |
set guioptions=egmrti | |
set gfn=Monospace\ 10 | |
if has("gui_running") | |
if has("gui_mac") || has("gui_macvim") | |
set guifont=Menlo:h12 | |
set transparency=7 | |
endif | |
else | |
let g:CSApprox_loaded = 1 | |
" IndentLine | |
let g:indentLine_enabled = 1 | |
let g:indentLine_concealcursor = 0 | |
let g:indentLine_char = '┆' | |
let g:indentLine_faster = 1 | |
endif | |
"" Disable the blinking cursor. | |
set gcr=a:blinkon0 | |
set scrolloff=3 | |
"" Status bar | |
set laststatus=2 | |
"" Use modeline overrides | |
set modeline | |
set modelines=10 | |
set title | |
set titleold="Terminal" | |
set titlestring=%F | |
set statusline=%F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l\/%L,\ col\ %c)\ | |
if exists("*fugitive#statusline") | |
set statusline+=%{fugitive#statusline()} | |
endif | |
" vim-airline | |
let g:airline_theme = 'powerlineish' | |
let g:airline#extensions#syntastic#enabled = 1 | |
let g:airline#extensions#branch#enabled = 1 | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline#extensions#tagbar#enabled = 1 | |
let g:airline_skip_empty_sections = 1 | |
"***************************************************************************** | |
"" Abbreviations | |
"***************************************************************************** | |
"" no one is really happy until you have this shortcuts | |
cnoreabbrev W! w! | |
cnoreabbrev Q! q! | |
cnoreabbrev Qall! qall! | |
cnoreabbrev Wq wq | |
cnoreabbrev Wa wa | |
cnoreabbrev wQ wq | |
cnoreabbrev WQ wq | |
cnoreabbrev W w | |
cnoreabbrev Q q | |
cnoreabbrev Qall qall | |
"" NERDTree configuration | |
let g:NERDTreeChDirMode=2 | |
augroup nerd_tree | |
autocmd StdinReadPre * let s:std_in=1 | |
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif | |
augroup END | |
let g:NERDTreeIgnore=['\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__'] | |
let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$'] | |
let g:NERDTreeShowBookmarks=1 | |
let g:nerdtree_tabs_focus_on_files=1 | |
let g:NERDTreeMapOpenInTabSilent = '<RightMouse>' | |
let g:NERDTreeWinSize = 50 | |
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite | |
nnoremap <silent> <F2> :NERDTreeFind<CR> | |
noremap <F3> :NERDTreeToggle<CR> | |
" grep.vim | |
nnoremap <silent> <leader>f :Rgrep<CR> | |
let Grep_Default_Options = '-IR' | |
let Grep_Skip_Files = '*.log *.db' | |
let Grep_Skip_Dirs = '.git node_modules' | |
" vimshell.vim | |
let g:vimshell_user_prompt = 'fnamemodify(getcwd(), ":~")' | |
let g:vimshell_prompt = '$ ' | |
" terminal emulation | |
if g:vim_bootstrap_editor == 'nvim' | |
nnoremap <silent> <leader>sh :terminal<CR> | |
else | |
nnoremap <silent> <leader>sh :VimShellCreate<CR> | |
endif | |
"***************************************************************************** | |
"" Functions | |
"***************************************************************************** | |
if !exists('*s:setupWrapping') | |
function s:setupWrapping() | |
set wrap | |
set wm=2 | |
set textwidth=79 | |
endfunction | |
endif | |
"***************************************************************************** | |
"" Autocmd Rules | |
"***************************************************************************** | |
"" The PC is fast enough, do syntax highlight syncing from start | |
augroup vimrc-sync-fromstart | |
autocmd! | |
autocmd BufEnter * :syntax sync fromstart | |
augroup END | |
"" Remember cursor position | |
augroup vimrc-remember-cursor-position | |
autocmd! | |
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif | |
augroup END | |
"" txt | |
augroup vimrc-wrapping | |
autocmd! | |
autocmd BufRead,BufNewFile *.txt call s:setupWrapping() | |
augroup END | |
"" make/cmake | |
augroup vimrc-make-cmake | |
autocmd! | |
autocmd FileType make setlocal noexpandtab | |
autocmd BufNewFile,BufRead CMakeLists.txt setlocal filetype=cmake | |
augroup END | |
set autoread | |
"***************************************************************************** | |
"" Mappings | |
"***************************************************************************** | |
"" Split | |
noremap <Leader>h :<C-u>split<CR> | |
noremap <Leader>v :<C-u>vsplit<CR> | |
"" Git | |
noremap <Leader>ga :Gwrite<CR> | |
noremap <Leader>gc :Gcommit<CR> | |
noremap <Leader>gsh :Gpush<CR> | |
noremap <Leader>gll :Gpull<CR> | |
noremap <Leader>gs :Gstatus<CR> | |
noremap <Leader>gb :Gblame<CR> | |
noremap <Leader>gd :Gvdiff<CR> | |
noremap <Leader>gr :Gremove<CR> | |
" session management | |
nnoremap <leader>so :OpenSession<Space> | |
nnoremap <leader>ss :SaveSession<Space> | |
nnoremap <leader>sd :DeleteSession<CR> | |
nnoremap <leader>sc :CloseSession<CR> | |
"" Tabs | |
nnoremap <Tab> gt | |
nnoremap <S-Tab> gT | |
nnoremap <silent> <S-t> :tabnew<CR> | |
" switch between windows | |
nnoremap <C-h> <C-w>h | |
nnoremap <C-j> <C-w>j | |
nnoremap <C-k> <C-w>k | |
nnoremap <C-l> <C-w>l | |
"" Set working directory | |
nnoremap <leader>. :lcd %:p:h<CR> | |
"" Opens an edit command with the path of the currently edited file filled in | |
noremap <Leader>e :e <C-R>=expand("%:p:h") . "/" <CR> | |
"" Opens a tab edit command with the path of the currently edited file filled | |
noremap <Leader>te :tabe <C-R>=expand("%:p:h") . "/" <CR> | |
"" ctrlp.vim | |
set wildmode=list:longest,list:full | |
set wildignore+=*.o,*.obj,.git,*.rbc,*.pyc,__pycache__ | |
let g:ctrlp_custom_ignore = '\v[\/](node_modules|target|dist)|(\.(swp|tox|ico|git|hg|svn))$' | |
let g:ctrlp_user_command = "find %s -type f | grep -Ev '"+ g:ctrlp_custom_ignore +"'" | |
let g:ctrlp_use_caching = 1 | |
" The Silver Searcher | |
if executable('ag') | |
set grepprg=ag\ --nogroup\ --nocolor | |
let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' | |
let g:ctrlp_use_caching = 0 | |
endif | |
cnoremap <C-P> <C-R>=expand("%:p:h") . "/" <CR> | |
noremap <leader>b :CtrlPBuffer<CR> | |
let g:ctrlp_map = '<leader>e' | |
let g:ctrlp_open_new_file = 'r' | |
let g:ctrlp_cache_dir = $HOME . '/.cache/ctrlp' | |
" snippets | |
" let g:UltiSnipsExpandTrigger="<tab>" | |
" let g:UltiSnipsJumpForwardTrigger="<tab>" | |
" let g:UltiSnipsJumpBackwardTrigger="<c-b>" | |
" let g:UltiSnipsEditSplit="vertical" | |
" syntastic | |
let g:syntastic_always_populate_loc_list=1 | |
let g:syntastic_error_symbol='✗' | |
let g:syntastic_warning_symbol='⚠' | |
let g:syntastic_style_error_symbol = '✗' | |
let g:syntastic_style_warning_symbol = '⚠' | |
let g:syntastic_auto_loc_list=1 | |
let g:syntastic_aggregate_errors = 1 | |
" Tagbar | |
nmap <silent> <F4> :TagbarToggle<CR> | |
let g:tagbar_autofocus = 1 | |
" Disable visualbell | |
set noerrorbells visualbell t_vb= | |
if has('autocmd') | |
autocmd GUIEnter * set visualbell t_vb= | |
endif | |
"" Copy/Paste/Cut | |
if has('unnamedplus') | |
set clipboard=unnamed,unnamedplus | |
endif | |
noremap YY "+y<CR> | |
noremap <leader>p "+gP<CR> | |
noremap XX "+x<CR> | |
if has('macunix') | |
" pbcopy for OSX copy/paste | |
vmap <C-x> :!pbcopy<CR> | |
vmap <C-c> :w !pbcopy<CR><CR> | |
endif | |
"" Buffer nav | |
noremap <leader>z :bp<CR> | |
noremap <leader>q :bp<CR> | |
noremap <leader>x :bn<CR> | |
noremap <leader>w :bn<CR> | |
"" Close buffer | |
noremap <leader>c :bd<CR> | |
"" Clean search (highlight) | |
nnoremap <silent> <leader><space> :noh<cr> | |
"" Switching windows | |
noremap <C-j> <C-w>j | |
noremap <C-k> <C-w>k | |
noremap <C-l> <C-w>l | |
noremap <C-h> <C-w>h | |
"" Vmap for maintain Visual Mode after shifting > and < | |
vmap < <gv | |
vmap > >gv | |
"" Move visual block | |
vnoremap J :m '>+1<CR>gv=gv | |
vnoremap K :m '<-2<CR>gv=gv | |
"" Open current line on GitHub | |
nnoremap <Leader>o :.Gbrowse<CR> | |
"***************************************************************************** | |
"" Custom configs | |
"***************************************************************************** | |
" c | |
autocmd FileType c setlocal tabstop=4 shiftwidth=4 expandtab | |
autocmd FileType cpp setlocal tabstop=4 shiftwidth=4 expandtab | |
" elixir | |
" go | |
let g:tagbar_type_go = { | |
\ 'ctagstype' : 'go', | |
\ 'kinds' : [ 'p:package', 'i:imports:1', 'c:constants', 'v:variables', | |
\ 't:types', 'n:interfaces', 'w:fields', 'e:embedded', 'm:methods', | |
\ 'r:constructor', 'f:functions' ], | |
\ 'sro' : '.', | |
\ 'kind2scope' : { 't' : 'ctype', 'n' : 'ntype' }, | |
\ 'scope2kind' : { 'ctype' : 't', 'ntype' : 'n' }, | |
\ 'ctagsbin' : 'gotags', | |
\ 'ctagsargs' : '-sort -silent' | |
\ } | |
" vim-go | |
" run :GoBuild or :GoTestCompile based on the go file | |
function! s:build_go_files() | |
let l:file = expand('%') | |
if l:file =~# '^\f\+_test\.go$' | |
call go#cmd#Test(0, 1) | |
elseif l:file =~# '^\f\+\.go$' | |
call go#cmd#Build(0) | |
endif | |
endfunction | |
let g:go_list_type = "quickfix" | |
let g:go_fmt_command = "goimports" | |
let g:go_fmt_fail_silently = 1 | |
let g:syntastic_go_checkers = ['golint', 'govet', 'errcheck'] | |
let g:syntastic_mode_map = { 'mode': 'active', 'passive_filetypes': ['go'] } | |
let g:go_highlight_types = 1 | |
let g:go_highlight_fields = 1 | |
let g:go_highlight_functions = 1 | |
let g:go_highlight_methods = 1 | |
let g:go_highlight_operators = 1 | |
let g:go_highlight_build_constraints = 1 | |
let g:go_highlight_generate_tags = 1 | |
let g:go_highlight_space_tab_error = 0 | |
let g:go_highlight_array_whitespace_error = 0 | |
let g:go_highlight_trailing_whitespace_error = 0 | |
let g:go_highlight_extra_types = 0 | |
autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4 | |
augroup completion_preview_close | |
autocmd! | |
if v:version > 703 || v:version == 703 && has('patch598') | |
autocmd CompleteDone * if !&previewwindow && &completeopt =~ 'preview' | silent! pclose | endif | |
endif | |
augroup END | |
augroup go | |
au! | |
au Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit') | |
au Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit') | |
au Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split') | |
au Filetype go command! -bang AT call go#alternate#Switch(<bang>0, 'tabe') | |
au FileType go nmap <Leader>dd <Plug>(go-def-vertical) | |
au FileType go nmap <Leader>dv <Plug>(go-doc-vertical) | |
au FileType go nmap <Leader>db <Plug>(go-doc-browser) | |
au FileType go nmap <leader>r <Plug>(go-run) | |
au FileType go nmap <leader>t <Plug>(go-test) | |
au FileType go nmap <Leader>gt <Plug>(go-coverage-toggle) | |
au FileType go nmap <Leader>i <Plug>(go-info) | |
au FileType go nmap <silent> <Leader>l <Plug>(go-metalinter) | |
au FileType go nmap <C-g> :GoDecls<cr> | |
au FileType go imap <C-g> <esc>:<C-u>GoDecls<cr> | |
au FileType go nmap <leader>rb :<C-u>call <SID>build_go_files()<CR> | |
augroup END | |
" javascript | |
let g:javascript_enable_domhtmlcss = 1 | |
" vim-javascript | |
augroup vimrc-javascript | |
autocmd! | |
autocmd FileType javascript set tabstop=4|set shiftwidth=4|set expandtab softtabstop=4 smartindent | |
augroup END | |
" ocaml | |
" Add Merlin to rtp | |
" let g:opamshare = substitute(system('opam config var share'),'\n$','','''') | |
" execute "set rtp+=" . g:opamshare . "/merlin/vim" | |
" Set Merlin as Syntastic checker for OCaml | |
" let g:syntastic_ocaml_checkers = ['merlin'] | |
" ruby | |
let g:rubycomplete_buffer_loading = 1 | |
let g:rubycomplete_classes_in_global = 1 | |
let g:rubycomplete_rails = 1 | |
augroup vimrc-ruby | |
autocmd! | |
autocmd BufNewFile,BufRead *.rb,*.rbw,*.gemspec setlocal filetype=ruby | |
autocmd FileType ruby set tabstop=2|set shiftwidth=2|set expandtab softtabstop=2 smartindent | |
augroup END | |
let g:tagbar_type_ruby = { | |
\ 'kinds' : [ | |
\ 'm:modules', | |
\ 'c:classes', | |
\ 'd:describes', | |
\ 'C:contexts', | |
\ 'f:methods', | |
\ 'F:singleton methods' | |
\ ] | |
\ } | |
" RSpec.vim mappings | |
map <Leader>t :call RunCurrentSpecFile()<CR> | |
map <Leader>s :call RunNearestSpec()<CR> | |
map <Leader>l :call RunLastSpec()<CR> | |
map <Leader>a :call RunAllSpecs()<CR> | |
" Ruby refactory | |
nnoremap <leader>rap :RAddParameter<cr> | |
nnoremap <leader>rcpc :RConvertPostConditional<cr> | |
nnoremap <leader>rel :RExtractLet<cr> | |
vnoremap <leader>rec :RExtractConstant<cr> | |
vnoremap <leader>relv :RExtractLocalVariable<cr> | |
nnoremap <leader>rit :RInlineTemp<cr> | |
vnoremap <leader>rrlv :RRenameLocalVariable<cr> | |
vnoremap <leader>rriv :RRenameInstanceVariable<cr> | |
vnoremap <leader>rem :RExtractMethod<cr> | |
"***************************************************************************** | |
"***************************************************************************** | |
"" Include user's local vim config | |
if filereadable(expand("~/.config/nvim/local_init.vim")) | |
source ~/.config/nvim/local_init.vim | |
endif | |
"***************************************************************************** | |
"" Convenience variables | |
"***************************************************************************** | |
" vim-airline | |
if !exists('g:airline_symbols') | |
let g:airline_symbols = {} | |
endif | |
if !exists('g:airline_powerline_fonts') | |
let g:airline#extensions#tabline#left_sep = ' ' | |
let g:airline#extensions#tabline#left_alt_sep = '|' | |
let g:airline_left_sep = '▶' | |
let g:airline_left_alt_sep = '»' | |
let g:airline_right_sep = '◀' | |
let g:airline_right_alt_sep = '«' | |
let g:airline#extensions#branch#prefix = '⤴' "➔, ➥, ⎇ | |
let g:airline#extensions#readonly#symbol = '⊘' | |
let g:airline#extensions#linecolumn#prefix = '¶' | |
let g:airline#extensions#paste#symbol = 'ρ' | |
let g:airline_symbols.linenr = '␊' | |
let g:airline_symbols.branch = '⎇' | |
let g:airline_symbols.paste = 'ρ' | |
let g:airline_symbols.paste = 'Þ' | |
let g:airline_symbols.paste = '∥' | |
let g:airline_symbols.whitespace = 'Ξ' | |
else | |
let g:airline#extensions#tabline#left_sep = '' | |
let g:airline#extensions#tabline#left_alt_sep = '' | |
" powerline symbols | |
let g:airline_left_sep = '' | |
let g:airline_left_alt_sep = '' | |
let g:airline_right_sep = '' | |
let g:airline_right_alt_sep = '' | |
let g:airline_symbols.branch = '' | |
let g:airline_symbols.readonly = '' | |
let g:airline_symbols.linenr = '' | |
endif | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment