Skip to content

Instantly share code, notes, and snippets.

@lovung
Last active August 13, 2020 06:13
Show Gist options
  • Save lovung/e9c3f626a1734c1ce0b75106d70b1278 to your computer and use it in GitHub Desktop.
Save lovung/e9c3f626a1734c1ce0b75106d70b1278 to your computer and use it in GitHub Desktop.
Example init.vim for neovim
call plug#begin('~/.vim/plugged') " Declare the list of plugins.
Plug 'tpope/vim-sensible'
Plug 'junegunn/seoul256.vim'
" code
Plug 'pangloss/vim-javascript'
" linters
Plug 'w0rp/ale'
" helpers
"Plug 'scrooloose/nerdtree'
Plug 'easymotion/vim-easymotion'
Plug 'preservim/nerdtree'
Plug 'jiangmiao/auto-pairs'
Plug 'itchyny/lightline.vim'
Plug 'maximbaz/lightline-ale'
Plug 'junegunn/goyo.vim'
" Plug 'psliwka/vim-smoothie'
Plug 'mhinz/vim-startify'
Plug 'ekalinin/dockerfile.vim'
Plug 'voldikss/vim-floaterm'
"git
Plug 'airblade/vim-gitgutter'
Plug 'itchyny/vim-gitbranch'
Plug 'tpope/vim-fugitive'
Plug 'junegunn/gv.vim'
Plug 'jreybert/vimagit'
Plug 'rhysd/git-messenger.vim'
"fzf
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
"coc.vim
Plug 'neoclide/coc.nvim', {'branch': 'release'}
"theme
Plug 'dracula/vim', { 'as': 'dracula' }
Plug 'haishanh/night-owl.vim'
Plug 'ayu-theme/ayu-vim'
Plug 'arcticicestudio/nord-vim'
Plug 'patstockwell/vim-monokai-tasty'
Plug 'joshdick/onedark.vim'
" Plug for flutter
Plug 'dart-lang/dart-vim-plugin'
Plug 'thosakwe/vim-flutter'
Plug 'liuchengxu/vim-clap'
Plug 'natebosch/vim-lsc'
Plug 'natebosch/vim-lsc-dart'
Plug 'wincent/command-t'
Plug 'tpope/vim-commentary'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'yuttie/comfortable-motion.vim'
" Golang
Plug 'sebdah/vim-delve'
Plug 'fatih/vim-go'
Plug 'ryanoasis/vim-devicons'
Plug 'buoto/gotests-vim'
Plug 'puremourning/vimspector'
" Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app & yarn install' }
" List ends here. Plugins become visible to Vim after this call.
call plug#end()
" Global setting
syntax on
color ayu
colorscheme dracula
set background=dark
set number
set relativenumber
set encoding=utf-8
set fileencoding=utf-8
set nomodeline
set hidden
set cmdheight=2
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set showcmd
set cursorline
set list
set lcs=tab:\|\ "
set termguicolors
set wildmenu
set showmatch
set lazyredraw
set incsearch
set hlsearch
" if hidden is not set, TextEdit might fail.
set hidden
" Some servers have issues with backup files, see #649
set nobackup
set nowritebackup
" Better display for messages
set cmdheight=2
" You will have bad experience for diagnostic messages when it's default 4000.
set updatetime=300
" don't give |ins-completion-menu| messages.
set shortmess+=c
" always show signcolumns
set signcolumn=yes
filetype plugin on
filetype indent on
filetype plugin indent on " required
let ayucolor="mirage"
let g:go_def_mapping_enabled = 0
let g:user_emmet_mode='a'
let g:user_emmet_leader_key='<Tab>'
let g:user_emmet_settings= {
\ 'javascript.jsx' : {
\ 'extends': 'jsx',
\ },
\}
let g:go_auto_sameids = 1
let g:go_highlight_structs = 1
let g:go_highlight_interfaces = 1
let g:go_highlight_methods = 1
let g:go_highlight_functions = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_highlight_extra_types = 1
let g:go_highlight_function_parameters = 1
let g:go_highlight_function_calls = 1
let g:go_highlight_types = 1
let g:go_hightlight_fields = 1
let g:go_highlight_generate_tags = 1
let g:go_highlight_variable_declarations = 1
let g:go_highlight_variable_assignments = 1
let g:go_fmt_command = "goimports"
let g:go_def_mode='gopls'
let g:go_info_mode='gopls'
let g:go_metalinter_autosave_enabled = ['vet', 'golint', 'test']
let g:NERDSpaceDelims = 1
let g:NERDCompactSexyComs = 1
let g:NERDTreeMouseMode=3
let g:go_debug_windows = {
\ 'vars': 'rightbelow 60vnew',
\ 'stack': 'rightbelow 10new',
\ }
" Terminal color
let g:terminal_color_0 = '#2e3436'
let g:terminal_color_1 = '#cc0000'
let g:terminal_color_2 = '#4e9a06'
let g:terminal_color_3 = '#c4a000'
let g:terminal_color_4 = '#3465a4'
let g:terminal_color_5 = '#75507b'
let g:terminal_color_6 = '#0b939b'
let g:terminal_color_7 = '#d3d7cf'
let g:terminal_color_8 = '#555753'
let g:terminal_color_9 = '#ef2929'
let g:terminal_color_10 = '#8ae234'
let g:terminal_color_11 = '#fce94f'
let g:terminal_color_12 = '#729fcf'
let g:terminal_color_13 = '#ad7fa8'
let g:terminal_color_14 = '#00f5e9'
let g:terminal_color_15 = '#eeeeec'
" FZF
let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.9 } }
let $FZF_DEFAULT_OPTS="--ansi --preview-window 'right:60%' --layout reverse --margin=1,4 --preview 'bat --color=always --style=header,grid --line-range :300 {}'"
let $FZF_DEFAULT_COMMAND = 'rg --files --ignore-case --hidden -g "!{.git,node_modules,vendor}/*"'
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0)
" Auto cmd
augroup mygroup
autocmd!
" Setup formatexpr specified filetype(s).
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
" Update signature help on jump placeholder
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
"NerdTree configurations
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 | exe 'cd '.argv()[0] | endif
" nerdCommenter
" 2 spaces indent for yaml files
autocmd FileType yaml,yml setlocal ts=2 sts=2 sw=2 expandtab
" json
autocmd FileType json syntax match Comment +\/\/.\+$+
"go lang
autocmd FileType go nmap <leader>b <Plug>(go-build)
autocmd FileType go nmap <leader>r <Plug>(go-run)
autocmd FileType dart setlocal ts=2 sts=2 sw=2 expandtab
autocmd BufEnter *.cls setlocal filetype=java
autocmd BufEnter *.zsh-theme setlocal filetype=zsh
autocmd BufEnter Makefile setlocal noexpandtab
autocmd BufEnter *.sh setlocal tabstop=2
autocmd BufEnter *.sh setlocal shiftwidth=2
autocmd BufEnter *.sh setlocal softtabstop=2
augroup end
augroup auto_go
autocmd!
autocmd BufWritePost *.go :GoBuild
autocmd BufWritePost *_test.go :GoTest
augroup end
""" Specified setting and mapping
let mapleader=","
nmap <C-e> :e#<CR>
nmap ; :Buffers<CR>
nnoremap <Leader>fz :Files<Cr>
nnoremap <Leader>ft :Rg<Cr>
command! -bang -nargs=* RG
\ call fzf#vim#grep(
\ 'rg --column --line-number --no-heading --color=always --smart-case -g !vendor -- '.shellescape(<q-args>), 1,
\ fzf#vim#with_preview(), <bang>0)
nnoremap <leader>fv :RG<Cr>
"nnoremap <Leader>fv :Rg -g '!vendor'<Cr>
" turn off search highlight
nnoremap <ESC><ESC> :nohlsearch<CR>
"==============COC configurations========================
" Use tab for trigger completion with characters ahead and navigate.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <c-r> to trigger completion.
if has('nvim')
inoremap <silent><expr> <c-r> coc#refresh()
else
inoremap <silent><expr> <c-@> coc#refresh()
endif
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
" position. Coc only does snippet and additional edit on confirm.
" <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
if exists('*complete_info')
inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
else
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
endif
" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigation.
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
" Use U to show documentation in preview window.
nnoremap <silent> U :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocAction('doHover')
endif
endfunction
"==================NERDTree==================================
:set mouse=a
:nnoremap tt :NERDTreeToggle<CR>
:nnoremap tf :NERDTreeFocus<CR>
"=================Vim-clap configurations====================
nnoremap <leader>cg :Clap grep<cr>
"=================Dart/Flutter configurations================
let g:lsc_server_commands = {'dart': 'dart_language_server'}
let g:lsc_auto_map = {
\ 'GoToDefinition': 'gD',
\ 'GoToDefinitionSplit': ['<C-W>]', '<C-W><C-]>'],
\ 'FindReferences': 'gR',
\ 'NextReference': 'gnr',
\ 'PreviousReference': 'gpr',
\ 'FindImplementations': 'gI',
\ 'FindCodeActions': 'ga',
\ 'Rename': 'grn',
\ 'ShowHover': v:true,
\ 'DocumentSymbol': 'go',
\ 'WorkspaceSymbol': 'gS',
\ 'SignatureHelp': 'gm',
\ 'Completion': 'completefunc',
\}
autocmd CompleteDone * silent! pclose
" Some of these key choices were arbitrary;
" it's just an example.
"nnoremap <leader>fa :FlutterRun<cr>
"nnoremap <leader>fq :FlutterQuit<cr>
"nnoremap <leader>fr :FlutterHotReload<cr>
"nnoremap <leader>fR :FlutterHotRestart<cr>
"nnoremap <leader>fD :FlutterVisualDebug<cr>
call dart#ToggleFormatOnSave()
"================= Custom for fast developing================
" For local replace
nnoremap fr gd[{V%::s/<C-R>///gc<left><left><left>
" For global replace
nnoremap fR gD:%s/<C-R>///gc<left><left><left>
" move vertically by visual line
nnoremap j gj
nnoremap k gk
" move to beginning/end of line
nnoremap B ^
nnoremap E $
" $/^ doesn't do anything
" nnoremap $ <nop>
" nnoremap ^ <nop>
" highlight last inserted text
nnoremap gV `[v`]
" jk is escape
inoremap jk <esc>
" edit vimrc/zshrc and load vimrc bindings
nnoremap <leader>ev :vsp $MYVIMRC<CR>
nnoremap <leader>ez :vsp ~/.zshrc<CR>
nnoremap <leader>sv :source $MYVIMRC<CR>
" save session
nnoremap <leader>s :mksession<CR>
" Split navigations
"nnoremap <C-J> <C-W><C-J>
"nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
" Replace the whore word with clipboard
nnoremap <leader>raw "_dawhp
inoremap <C-f> <Right>
inoremap <C-b> <Left>
" Switch to previous file
nmap <C-e> :e#<CR>
" Vim easymotion
nmap <leader>g <Plug>(easymotion-overwin-f)
nmap <leader>l <Plug>(easymotion-overwin-line)
" Remap the hjkl
nnoremap L l
nnoremap H h
nnoremap l w
nnoremap h b
" Resize split window
nnoremap <silent> + :exe "vertical resize +5"<CR>
nnoremap <silent> _ :exe "vertical resize -5"<CR>
" Remap paste
vnoremap p "_dP
" FloatTerm
nnoremap <silent> <Leader>tn :FloatermNew<CR>
tnoremap <silent> <Leader>tn <C-\><C-n>:FloatermNew<CR>
nnoremap <silent> <Leader>tq :FloatermKill<CR>
tnoremap <silent> <Leader>tq <C-\><C-n>:FloatermKill<CR>
nnoremap <silent> <Leader>tt :FloatermToggle<CR>
tnoremap <silent> <Leader>tt <C-\><C-n>:FloatermToggle<CR>
nnoremap <silent> <Leader>ff :FloatermNew fzf<CR>
tnoremap <silent> <Leader>ff <C-\><C-n>:FloatermNew fzf<CR>
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Find Nearest
" Source: http://vim.1045645.n5.nabble.com/find-closest-occurrence-in-both-directions-td1183340.html
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
function! FindNearest(pattern)
let @/=a:pattern
let b:prev = search(a:pattern, 'bncW')
if b:prev
let b:next = search(a:pattern, 'ncW')
if b:next
let b:cur = line('.')
if b:cur - b:prev == b:next - b:cur
" on a match
elseif b:cur - b:prev < b:next - b:cur
?
else
/
endif
else
?
endif
else
/
endif
endfunction
function! FindAbove(pattern)
let @/=a:pattern
let b:prev = search(a:pattern, 'bncW')
if b:prev
?
else
/
endif
endfunction
command! -nargs=1 FA call FindAbove(<q-args>)
nmap \ :FA<space>
""" Select between conflict blocks
" select ours
nmap <leader>so \<<<<<<<<CR>dd/=======<CR>V/>>>>>>><CR>d<ESC>
" select theirs
nmap <leader>st \<<<<<<<<CR>V/=======<CR>d/>>>>>>><CR>dd<ESC>
" select both
nmap <leader>sb /<<<<<<<<CR>dd/=======<CR>dd/>>>>>>><CR>dd<ESC>
" find next conflict
nmap <leader>fc /<<<<<<<<CR>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment