dotfiles/cli/vim/init.vim

357 lines
9.7 KiB
VimL
Raw Normal View History

2020-06-10 17:04:54 +00:00
" basic settings
set ts=4
set sw=4
set cc=120
set expandtab
set nu
set hidden
set list
set autoindent
set confirm
set noundofile
set nobackup
2020-06-17 04:16:05 +00:00
set nowritebackup
2020-06-10 17:04:54 +00:00
set hlsearch
set noswapfile
set ignorecase
2020-06-17 04:16:05 +00:00
set smarttab
set smartindent
set cursorline
set incsearch
set signcolumn=yes
set laststatus=2
2020-06-11 03:20:12 +00:00
set fillchars=vert:\ ,fold:-
set clipboard=unnamedplus " system clipboard as default register. for vim to work need installing gvim package
set mouse=a
2021-05-13 02:15:15 +00:00
set spell
2020-06-10 17:04:54 +00:00
filetype plugin indent on
syntax on
2020-06-17 03:13:26 +00:00
au! BufWritePost $MYVIMRC source %
2020-06-10 17:04:54 +00:00
cnoremap <C-a> <Home>
cnoremap <C-e> <End>
cnoremap <C-f> <Right>
cnoremap <C-b> <Left>
cnoremap <C-d> <Delete>
cnoremap <C-n> <Down>
cnoremap <C-p> <Up>
inoremap <C-a> <Home>
inoremap <C-e> <End>
inoremap <C-f> <Right>
inoremap <C-b> <Left>
inoremap <C-d> <Delete>
inoremap <C-n> <Down>
inoremap <C-p> <Up>
noremap <C-a> <Home>
noremap <C-e> <End>
noremap <C-f> <Right>
noremap <C-b> <Left>
vnoremap <leader>p pgvy
2020-06-10 17:04:54 +00:00
nnoremap <leader>q :qall<CR>
nnoremap <Leader>v <c-v>
nnoremap <Leader>s :b#<CR>
2020-06-10 17:04:54 +00:00
2020-06-20 02:32:33 +00:00
nnoremap <leader>1 :b1<CR>
nnoremap <leader>2 :b2<CR>
nnoremap <leader>3 :b3<CR>
nnoremap <leader>4 :b4<CR>
nnoremap <leader>5 :b5<CR>
nnoremap <leader>w :w<CR>
nnoremap <leader><Esc> :noh<return><esc>
2021-06-06 14:07:16 +00:00
function! WSLCopy()
" Why is this not a built-in Vim script function?!
let [line_start, column_start] = getpos("'<")[1:2]
let [line_end, column_end] = getpos("'>")[1:2]
let lines = getline(line_start, line_end)
if len(lines) == 0
return ''
endif
let lines[-1] = lines[-1][: column_end - (&selection == 'inclusive' ? 1 : 2)]
let lines[0] = lines[0][column_start - 1:]
2021-08-27 03:30:50 +00:00
call system('xsel -b', join(lines, "\n"))
2021-06-06 14:07:16 +00:00
endfunction
2021-09-08 02:36:38 +00:00
function! YankFileLineNo()
let @+=expand("%") . ':' . line(".")
echo @+
endfunction
2021-06-06 14:07:16 +00:00
xnoremap <leader>y <esc>:call WSLCopy()<CR>
2021-09-08 02:36:38 +00:00
nnoremap <leader>yl <esc>:call YankFileLineNo()<Cr>
nmap <leader>"" ysiW"
nmap <leader>'' ysiW'
nmap <leader>" ysiw"
nmap <leader>' ysiw'
nmap <leader>`` ysiW`
nmap <leader>` ysiw`
2020-11-14 17:37:26 +00:00
nmap <leader>sb :windo set scrollbind<CR>:windo set cursorbind<CR>:set mouse=a<CR>
nmap <leader>nsb :windo set noscrollbind<CR>:windo set nocursorbind<CR>:set mouse=<CR>
2020-11-12 17:11:02 +00:00
2020-06-20 02:32:33 +00:00
inoremap <C-w> <esc><C-w>
nmap <silent> <leader>ss :syntax sync fromstart<CR>
" // to search highlighted text
vnoremap // y/\V<C-R>=escape(@",'/\')<CR><CR>
2020-06-10 17:04:54 +00:00
" trailing spaces
highlight ExtraWhitespace ctermbg=red guibg=red
au ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red
au Syntax * match ExtraWhitespace /\s\+$/
nnoremap <leader>es :%s/\s\+$//g<CR>
" location jumping
nnoremap <leader>n :cnext<CR>
nnoremap <leader>p :cprev<CR>
2021-09-08 02:36:38 +00:00
" cusorline
2021-09-09 07:44:50 +00:00
nnoremap <leader>c :set cursorcolumn!<CR>
2021-09-08 02:36:38 +00:00
2020-06-10 17:04:54 +00:00
" auto install vim-plug
if has('nvim')
2020-07-28 04:07:07 +00:00
if has('win32')
let vim_plug_path = $LOCALAPPDATA . "/nvim/autoload/plug.vim"
else
let vim_plug_path = expand("~/.config/nvim/autoload/plug.vim")
endif
else
2020-12-10 01:54:05 +00:00
set ttymouse=sgr
"map <ScrollWheelUp> <C-Y>
"map <ScrollWheelDown> <C-E>
let vim_plug_path = expand("~/.vim/autoload/plug.vim")
set listchars=eol:\ ,tab:>\ ,trail:~,extends:>,precedes:<
endif
2020-06-10 17:04:54 +00:00
let vim_plug_just_installed = 0
if !filereadable(vim_plug_path)
echo "Installing vim-plug..."
2021-01-13 14:12:27 +00:00
:exe "!curl -fLo \"" . vim_plug_path . "\" --create-dirs https://gitee.com/klesh/vim-plug/raw/master/plug.vim"
2020-06-10 17:04:54 +00:00
let vim_plug_just_installed = 1
echo "vim-plug installed"
endif
2020-11-02 13:43:09 +00:00
call plug#begin('~/.vim/plugged')
2020-06-10 17:04:54 +00:00
Plug 'editorconfig/editorconfig-vim'
Plug 'tpope/vim-surround'
2020-06-11 03:22:27 +00:00
Plug 'jiangmiao/auto-pairs'
Plug 'posva/vim-vue', { 'for': 'vue' }
Plug 'tpope/vim-repeat'
2020-06-10 17:04:54 +00:00
Plug 'liuchengxu/eleline.vim'
2021-09-09 14:11:13 +00:00
Plug 'tpope/vim-fugitive' " git 功能
2020-06-10 17:04:54 +00:00
Plug 'scrooloose/nerdcommenter'
Plug 'mhinz/vim-grepper', { 'on': ['Grepper', '<plug>(GrepperOperator)'] }
2020-06-11 03:20:12 +00:00
Plug 'morhetz/gruvbox'
2020-11-14 17:37:26 +00:00
Plug 'klesh/vim-fish', { 'for': 'fish' }
2021-09-15 15:08:04 +00:00
Plug 'alvan/vim-closetag'
2021-01-16 06:05:29 +00:00
"Plug 'francoiscabrol/ranger.vim'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
2021-09-04 01:58:19 +00:00
Plug 'preservim/nerdtree'
if $VIM_MODE == 'enhanced'
2021-09-16 14:18:49 +00:00
if !executable("node") || !executable("npm")
echo "nodejs/npm must be installed in order to use coc.nvim"
else
Plug 'neoclide/coc.nvim', {'branch': 'release'}
end
Plug 'chrisbra/Colorizer'
2021-01-04 10:24:37 +00:00
Plug 'tpope/vim-markdown', { 'for': 'markdown' }
Plug 'cespare/vim-toml', { 'for': 'toml' }
2020-11-25 10:01:46 +00:00
Plug 'vim-scripts/mom.vim'
else
Plug 'Vimjas/vim-python-pep8-indent', { 'for': 'python' }
endif
2021-01-16 06:05:29 +00:00
if has('win32')
Plug 'zigford/vim-powershell'
endif
2020-06-10 17:04:54 +00:00
call plug#end()
" ==== vim-markdown configuration ====
let g:vim_markdown_folding_disabled = 1
2020-06-10 17:04:54 +00:00
2020-09-25 07:48:12 +00:00
" ==== vim-closetag configuration ====
2021-09-15 15:08:04 +00:00
let g:closetag_filetypes = 'html,xhtml,phtml,vue,jsx'
2020-09-25 07:48:12 +00:00
2020-11-02 13:43:09 +00:00
if $VIM_MODE == 'enhanced'
" ==== coc configuration ====
let g:coc_global_extensions = [
\ 'coc-diagnostic',
\ 'coc-clangd'
\ ]
"let g:coc_disable_startup_warning = 1
set statusline^=%{coc#status()}
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)
xmap <silent> <leader>fs <Plug>(coc-format-selected)
nmap <silent> <leader>fs <Plug>(coc-format-selected)
nmap <silent> <leader>fd <Plug>(coc-format)
nmap <silent> <leader>rn <Plug>(coc-rename)
nmap <silent> <leader>ne <Plug>(coc-diagnostic-next-error)
nmap <silent> <leader>pe <Plug>(coc-diagnostic-prev-error)
nmap <silent> <leader>oi :CocInfo<CR>
2020-12-17 07:18:43 +00:00
"nmap <silent> <leader>ol :<C-u>CocList<CR>
nmap <silent> <leader>olr :<C-u>CocListResume<CR>
nmap <silent> <leader>od :call CocAction('doHover')<CR>
nmap <silent> <leader>ol <Plug>(coc-openlink)
nmap <silent> <leader>oc :CocCommand<CR>
2020-11-02 13:43:09 +00:00
autocmd BufEnter,BufRead,BufNewFile *.js set syntax=typescript
2020-11-02 13:43:09 +00:00
" ==== vimspector configuration ====
let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
let g:vimspector_install_gadgets = [ 'debugpy', 'vscode-cpptools' ]
endif
2020-09-17 10:24:35 +00:00
2020-09-19 10:17:28 +00:00
" ==== auto-pairs configuration ====
nmap <silent> <leader>ap :call AutoPairsToggle()<CR>
let g:AutoPairsShortcutToggle = ''
2021-09-15 15:08:04 +00:00
" ==== closetag configuration ====
nmap <silent> <leader>ct :CloseTagToggleBuffer<CR>
2020-09-17 10:24:35 +00:00
" ==== grepper configuration ====
"
2020-06-10 17:04:54 +00:00
nnoremap <leader>sg :Grepper -tool git<CR>
nnoremap <leader>sc :Grepper -tool grep<CR>
nnoremap <leader>sa :Grepper -tool ag<CR>
" ==== quickfix configuration ====
nnoremap <leader>j :cn<CR>
nnoremap <leader>k :cp<CR>
2020-06-10 17:04:54 +00:00
2020-11-10 09:47:35 +00:00
"" ==== NERDTree configuration ====
"nnoremap <leader>fe :NERDTreeToggle<CR>
" ==== Ranger configuration ====
let g:ranger_map_keys = 0
2021-01-16 06:05:29 +00:00
"nnoremap <C-t> :Ranger<CR>
" ==== netrw configuration ====
nnoremap <C-t> :Explore<CR>
2020-11-12 17:11:02 +00:00
autocmd BufEnter,BufRead nnoremap <leader>cg :<C-u>call OpenRangerIn(system("git rev-parse --show-toplevel >/dev/null || pwd"), 'edit ')<CR>
2020-09-17 10:24:35 +00:00
2020-06-10 17:04:54 +00:00
" ==== fugitive configuration ====
2021-09-09 14:11:13 +00:00
nnoremap <leader>gs :Git<CR>
2021-09-09 14:13:18 +00:00
nnoremap <leader>gc :Git commit<CR>
nnoremap <leader>gp :Git push<CR>
nnoremap <leader>gg :Git pull<CR>
nnoremap <leader>gd :Git diff<CR>
nnoremap <leader>gb :Git blame<CR>
nnoremap <leader>gl :Git log<CR>
nnoremap <leader>gms :Gvdiffsplit!<CR>
nnoremap <leader>gmh :diffget //2<CR>
nnoremap <leader>gml :diffget //3<CR>
nnoremap <leader>gsc :exec "!git switch -c " . input("Enter new branch name:")<CR>
2020-06-10 17:04:54 +00:00
2021-01-24 17:04:26 +00:00
" ==== functions ======
fu! SilentOK(cmd)
let l:output = system(substitute(a:cmd, "%", expand("%"), "g"))
2021-01-24 17:04:26 +00:00
if v:shell_error != 0
echo l:output
2021-01-24 17:04:26 +00:00
endif
endfu
fu! SystemOr(cmd, default)
let l:output = system(substitute(a:cmd, "%", expand("%"), "g"))
2021-01-24 17:04:26 +00:00
if v:shell_error != 0
return a:default
endif
return trim(l:output)
2021-01-24 17:04:26 +00:00
endfu
2020-06-10 17:04:54 +00:00
" ==== ctrlp configuration ====
"let g:ctrlp_user_command = ['.git', 'git ls-files -co --exclude-standard']
" ==== fzf configuration ====
" enable <C-p> for fzf
let g:fugitive_no_maps=1
2021-01-18 16:06:18 +00:00
let $FZF_DEFAULT_COMMAND = 'ag --hidden --ignore .git -l -g ""'
2021-01-24 17:04:26 +00:00
nnoremap <C-p> :call fzf#vim#files(SystemOr("git rev-parse --show-toplevel", "."))<Cr>
nnoremap <leader>gco :call fzf#run({'source': 'git branch \| cut -c 3-; git tag -l', 'sink': '!git checkout'})<CR>
nnoremap <leader>gm :call fzf#run({'source': 'git branch \| cut -c 3-', 'sink': '!git merge'})<CR>
2021-01-17 03:48:11 +00:00
nnoremap <leader>b :Buffers<CR>
2020-06-11 03:20:12 +00:00
" ==== gruvbox configuration ====
color gruvbox
set background=dark
2020-11-10 04:03:52 +00:00
" for background transparence to work
2020-06-11 03:20:12 +00:00
highlight Normal ctermbg=None
2020-11-10 04:03:52 +00:00
highlight CursorLine ctermbg=240
" ==== NERDCommenter for vue ====
let g:ft = ''
fu! NERDCommenter_before()
if &ft == 'vue'
let g:ft = 'vue'
let stack = synstack(line('.'), col('.'))
if len(stack) > 0
let syn = synIDattr((stack)[0], 'name')
if len(syn) > 0
let syn = tolower(syn)
exe 'setf '.syn
endif
endif
endif
endfu
fu! NERDCommenter_after()
if g:ft == 'vue'
setf vue
g:ft
endif
endfu
2020-11-24 18:18:32 +00:00
" ==== groff ====
2020-11-25 10:01:46 +00:00
fu! ToggleGroffMomAutoCompilation()
let g:GroffMomAutoCompilation = !get(g:, "GroffMomAutoCompilation", 0)
2020-11-24 18:18:32 +00:00
augroup GroffPdf
autocmd!
augroup END
2020-11-25 10:01:46 +00:00
if g:GroffMomAutoCompilation
2020-11-24 18:18:32 +00:00
augroup GroffPdf
2020-11-26 04:57:50 +00:00
autocmd BufWritePost,FileWritePost *.mom :call SilentOK("groff -Kutf8 -mom % > /tmp/tmp.ps && ps2pdf /tmp/tmp.ps %.pdf")
2020-11-24 18:18:32 +00:00
augroup END
2020-11-25 10:01:46 +00:00
echo "Auto compilation for groff_mom enabled"
2020-11-24 18:18:32 +00:00
else
2020-11-25 10:01:46 +00:00
echo "Auto compilation for groff_mom disabled"
2020-11-24 18:18:32 +00:00
endif
2020-11-25 10:01:46 +00:00
endfu
nnoremap <leader>ac :call ToggleGroffMomAutoCompilation()<CR>
autocmd BufEnter,BufRead *.mom :set ft=mom
2021-05-13 02:15:15 +00:00
" spell highlight
highlight clear SpellBad
highlight SpellBad cterm=underline
highlight SpellBad gui=undercurl
" commitmsg
autocmd BufEnter,BufRead commitmsg.md :set colorcolumn=100
2021-09-04 01:58:19 +00:00
" nerdtree
nnoremap <leader>t :NERDTreeToggle<CR>
2021-09-08 02:44:18 +00:00
" go organize import on save
command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport')
autocmd BufWritePre *.go :OR