Skip to content

Instantly share code, notes, and snippets.

@khanghh
Created April 24, 2019 08:18
Show Gist options
  • Save khanghh/2ef715c9a5aaa0366c17c33fb724fe46 to your computer and use it in GitHub Desktop.
Save khanghh/2ef715c9a5aaa0366c17c33fb724fe46 to your computer and use it in GitHub Desktop.
My vim config
" Plugin {{{
call plug#begin('~/.vim/plugged')
Plug 'christoomey/vim-tmux-navigator'
Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug '/home/linuxbrew/.linuxbrew/opt/fzf'
Plug 'junegunn/fzf.vim'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'tpope/vim-fugitive'
Plug 'sodapopcan/vim-twiggy'
Plug 'godlygeek/tabular'
Plug 'plasticboy/vim-markdown'
Plug 'tpope/vim-surround'
Plug 'w0rp/ale'
Plug 'editorconfig/editorconfig-vim'
Plug 'pangloss/vim-javascript'
Plug 'airblade/vim-gitgutter'
Plug 'jiangmiao/auto-pairs'
Plug 'scrooloose/nerdcommenter'
Plug 'ryanoasis/vim-devicons'
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
" Plugin colorscheme {{{
Plug 'khang-hoang/vim-code-dark'
Plug 'dracula/vim', { 'as': 'dracula' }
" }}}
call plug#end()
" }}}
" General {{{
set encoding=UTF-8
set shell=/bin/sh
set nocompatible
set nofoldenable
filetype on " detects file type
filetype plugin on " load plugin for this file type
filetype indent on " load indent rule for this file type
set timeoutlen=1000 ttimeoutlen=0 " exit visual mode without delay
set guicursor=a:blinkon100 " make the cursor blinking
" }}}
" UI {{{
syntax on " enable syntax highlighting
set expandtab " use space
set tabstop=4 " set tab width
set shiftwidth=4 " width of auto-indent
set relativenumber " show relative line number
set wrap " allow wrap lines
set linebreak " breaks lines at word
set ruler " show row and column ruler information
" ========================= colorscheme ======================
colorscheme codedark " theme
"colorscheme dracula " theme
" }}}
" TMUX {{{
if exists('$TMUX')
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
else
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
endif
" }}}
" FZF {{{
" Customize fzf colors to match your color scheme
let g:fzf_colors =
\ { 'fg': ['fg', 'Normal'],
\ 'bg': ['bg', 'Normal'],
\ 'hl': ['fg', 'Comment'],
\ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'],
\ 'bg+': ['bg', 'CursorLine', 'CursorColumn'],
\ 'hl+': ['fg', 'Statement'],
\ 'info': ['fg', 'PreProc'],
\ 'border': ['fg', 'Ignore'],
\ 'prompt': ['fg', 'Conditional'],
\ 'pointer': ['fg', 'Exception'],
\ 'marker': ['fg', 'Keyword'],
\ 'spinner': ['fg', 'Label'],
\ 'header': ['fg', 'Comment'] }
" Enable per-command history.
let g:fzf_history_dir = '~/.local/share/fzf-history'
" Open files in horizontal split
nnoremap <silent> <Leader>s :call fzf#run(fzf#wrap({
\ 'down': '40%',
\ 'sink': 'split' }))<CR>
" Open files in vertical horizontal split
nnoremap <silent> <Leader>v :call fzf#run(fzf#wrap({
\ 'right': winwidth('.') / 2,
\ 'sink': 'vsplit' }))<CR>
" Insert mode completion
imap <c-x><c-k> <plug>(fzf-complete-word)
imap <c-x><c-f> <plug>(fzf-complete-path)
imap <c-x><c-j> <plug>(fzf-complete-file-ag)
imap <c-x><c-l> <plug>(fzf-complete-line)
" }}}
" NERDTree {{{
" open NERDTree automatically
"autocmd vimenter * NERDTree
" open NERDTree automatically if no file is specified
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
" open NERDTree at current directory
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif
" Ctrl-n to toggle NERDTree
map <C-n> :NERDTreeToggle<CR>
" quit vim if no file is open
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" open NERDTree on new tab
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | let g:nerdtree_tabs_open_on_console_startup=1
" git ignore
"let g:NERDTreeShowIgnoredStatus = 1
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ }
" NERD commenter
let NERDDefaultAlign = 'left'
nmap <C-_> <Plug>NERDCommenterToggle
vmap <C-_> <Plug>NERDCommenterToggle
vmap / <Plug>NERDCommenterToggle
" NERDTree icons and highlights
let s:brown = "905532"
let s:aqua = "3AFFDB"
let s:blue = "689FB6"
let s:darkBlue = "44788E"
let s:purple = "834F79"
let s:lightPurple = "834F79"
let s:red = "AE403F"
let s:beige = "F5C06F"
let s:yellow = "F09F17"
let s:orange = "D4843E"
let s:darkOrange = "F16529"
let s:pink = "CB6F6F"
let s:salmon = "EE6E73"
let s:green = "8FAA54"
let s:lightGreen = "31B53E"
let s:white = "FFFFFF"
let s:rspec_red = 'FE405F'
let s:git_orange = 'F54D27'
"let g:NERDTreeFileExtensionHighlightFullName = 1
"let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
"let g:NERDTreeExtensionHighlightColor['css'] = s:blue " sets the color of css files to blue
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreeExactMatchHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExactMatchHighlightColor['.gitignore'] = s:git_orange " sets the color for .gitignore files
"let g:NERDTreePatternMatchHighlightFullName = 1
"let g:NERDTreePatternMatchHighlightColor = {} " this line is needed to avoid error
"let g:NERDTreePatternMatchHighlightColor['.*_spec\.rb$'] = s:rspec_red " sets the color for files ending with _spec.rb
" directory hightlight
let g:NERDTreeHighlightFolders = 1 " enables folder icon highlighting using exact match
let g:NERDTreeHighlightFoldersFullName = 1 " highlights the folder name
let g:WebDevIconsUnicodeDecorateFolderNodes = 1
let g:DevIconsEnableFoldersOpenClose = 1
" hide arrow NERDTree
let g:NERDTreeDirArrowExpandable = "\u00a0"
let g:NERDTreeDirArrowCollapsible = "\u00a0"
" }}}
" Vim-Airline {{{
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#show_buffers = 0
" }}}
" Git-Gutter {{{
let g:gitgutter_override_sign_column_highlight = 0
hi link GitGutterAdd GitDiffAdd
hi link GitGutterChange GitDiffChange
hi link GitGutterDelete GitDiffDelete
hi link GitGutterChangeDelete GitDiffDelete
set updatetime=500
" }}}
" ALE {{{
"nmap <silent> <C-n> <Plug>(ale_next_wrap)
let g:ale_completion_enabled = 1
let g:ale_completion_delay = 1000
let g:ale_sign_error = '!'
let g:ale_sign_warning = '-'
let g:ale_fix_on_save = 1
let g:airline#extensions#ale#enabled = 1
hi link ALEErrorSign ErrorMsg
hi link ALEError Error
let g:ale_linters = {
\ 'javascript': ['tsserver', 'eslint'],
\ 'typescript': ['tsserver', 'eslint'],
\ 'c': ['gcc'],
\ 'cpp': ['g++']
\}
let g:ale_fixers = {
\ 'javascript': ['eslint'],
\ 'typescript': ['eslint']
\}
" }}}
" Search {{{
set hlsearch " highlight all search results
set ignorecase " ignore case-sensitive
set incsearch " incremental searching
"set showmatch " blinks "[,{,(" when type "),},]"
nnoremap \c :noh<return> " use key "\" turn off search highlight
let s:is_cmdline_open = 0
function! s:cmdline(key)
if a:key ==# ':'
if !s:is_cmdline_open
let &lines-=1
let s:is_cmdline_open = 1
redraw
endif
else
if s:is_cmdline_open
let &lines+=1
let s:is_cmdline_open = 0
endif
endif
return a:key
endfunction
"nnoremap <expr><silent> : <sid>cmdline(':')
"nnoremap <expr> : <sid>cmdline(':')
"cnoremap <expr><silent> <cr> <sid>cmdline("\<cr>gv")
"cnoremap <expr><silent> <esc> <sid>cmdline("\<esc>gv")
"cnoremap <expr><silent> <C-c> <sid>cmdline("\<C-c>gv")
cnoremap <expr> <esc> mode()=='v' ? "\<esc>gv" : "\<esc>"
"nnoremap <silent> <C-h> <sid>set lines+=1
" }}}
" vim:foldmethod=marker:foldlevel=0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment