Last active
August 13, 2020 06:13
-
-
Save lovung/e9c3f626a1734c1ce0b75106d70b1278 to your computer and use it in GitHub Desktop.
Example init.vim for neovim
This file contains 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
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