" basic settings let mapleader=";" 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 set nowritebackup set hlsearch set noswapfile set ignorecase set smarttab set smartindent set smartcase set cursorline set incsearch set signcolumn=yes set laststatus=2 set fillchars=vert:\ ,fold:- set clipboard=unnamedplus " system clipboard as default register. for vim to work need installing gvim package set mouse=a set spell set scrolloff=8 filetype plugin indent on syntax on au! BufWritePost $MYVIMRC source % cnoremap cnoremap cnoremap cnoremap cnoremap cnoremap cnoremap inoremap inoremap inoremap inoremap inoremap inoremap inoremap noremap noremap noremap noremap vnoremap p pgvy nnoremap Q :qall nnoremap v nnoremap bb :b# nnoremap 1 :b1 nnoremap 2 :b2 nnoremap 3 :b3 nnoremap 4 :b4 nnoremap 5 :b5 nnoremap w :w nnoremap :noh nnoremap h h nnoremap j j nnoremap k k nnoremap l l nnoremap oo o nnoremap q q nnoremap x :!chmod +x % nnoremap scb :set scrollbind!:set cursorbind! function! GetXCopyCmd() let l:status = system("command -v termux-clipboard-set") if len(l:status) > 0 return "termux-clipboard-set" endif return "xsel -b" endfunction let g:xcopy = GetXCopyCmd() function! XCopy() " 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:] call system(g:xcopy, join(lines, "\n")) endfunction function! YankFileLineNo() let yl=expand("%") . ':' . line(".") call system('tmux set-buffer "'.yl.'"') "let @+=yl endfunction xnoremap y :call XCopy() nnoremap yl :call YankFileLineNo() nmap "" ysiW" nmap '' ysiW' nmap " ysiw" nmap ' ysiw' nmap `` ysiW` nmap ` ysiw` nmap sb :windo set scrollbind:windo set cursorbind:set mouse=a nmap nsb :windo set noscrollbind:windo set nocursorbind:set mouse= inoremap nmap ss :syntax sync fromstart " // to search highlighted text vnoremap // y/\V=escape(@",'/\') " trailing spaces highlight ExtraWhitespace ctermbg=red guibg=red au ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red au Syntax * match ExtraWhitespace /\s\+$/ nnoremap es :%s/\s\+$//g " location jumping nnoremap n :cnext nnoremap p :cprev " cusorline nnoremap c :set cursorcolumn! " auto install vim-plug if has('nvim') 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 set ttymouse=sgr "map "map let vim_plug_path = expand("~/.vim/autoload/plug.vim") set listchars=eol:\ ,tab:>\ ,trail:~,extends:>,precedes:< endif let vim_plug_just_installed = 0 if !filereadable(vim_plug_path) echo "Installing vim-plug..." :exe "!curl -fLo \"" . vim_plug_path . "\" --create-dirs https://gitee.com/klesh/vim-plug/raw/master/plug.vim" let vim_plug_just_installed = 1 echo "vim-plug installed" endif call plug#begin('~/.vim/plugged') Plug 'editorconfig/editorconfig-vim' Plug 'tpope/vim-surround' Plug 'jiangmiao/auto-pairs' Plug 'posva/vim-vue', { 'for': 'vue' } Plug 'tpope/vim-repeat' Plug 'liuchengxu/eleline.vim' Plug 'tpope/vim-fugitive' " git 功能 Plug 'scrooloose/nerdcommenter' Plug 'mhinz/vim-grepper', { 'on': ['Grepper', '(GrepperOperator)'] } Plug 'morhetz/gruvbox' Plug 'klesh/vim-fish', { 'for': 'fish' } Plug 'alvan/vim-closetag' "Plug 'francoiscabrol/ranger.vim' Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'voldikss/vim-floaterm' Plug 'preservim/nerdtree' if $VIM_MODE == 'enhanced' 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' Plug 'tpope/vim-markdown', { 'for': 'markdown' } Plug 'cespare/vim-toml', { 'for': 'toml' } Plug 'vim-scripts/mom.vim' else Plug 'Vimjas/vim-python-pep8-indent', { 'for': 'python' } endif if has('win32') Plug 'zigford/vim-powershell' endif call plug#end() " ==== vim-markdown configuration ==== let g:vim_markdown_folding_disabled = 1 " ==== vim-closetag configuration ==== let g:closetag_filetypes = 'html,xhtml,phtml,vue,jsx' 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 gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) xmap fs (coc-format-selected) nmap fs (coc-format-selected) nmap fd (coc-format) nmap rn (coc-rename) nmap ne (coc-diagnostic-next-error) nmap pe (coc-diagnostic-prev-error) nmap oi :CocInfo "nmap ol :CocList nmap olr :CocListResume nmap od :call CocAction('doHover') nmap ol (coc-openlink) nmap oc :CocCommand autocmd BufEnter,BufRead,BufNewFile *.js set syntax=typescript " ==== vimspector configuration ==== let g:vimspector_enable_mappings = 'VISUAL_STUDIO' let g:vimspector_install_gadgets = [ 'debugpy', 'vscode-cpptools' ] endif " ==== auto-pairs configuration ==== nmap ap :call AutoPairsToggle() let g:AutoPairsShortcutToggle = '' " ==== closetag configuration ==== nmap ct :CloseTagToggleBuffer " ==== grepper configuration ==== " nnoremap sg :Grepper -noquickfix -tool git nnoremap sc :Grepper -noquickfix -tool grep nnoremap sa :Grepper -noquickfix -tool ag " ==== quickfix configuration ==== nnoremap cj :cn nnoremap ck :cp "" ==== NERDTree configuration ==== "nnoremap fe :NERDTreeToggle " ==== Ranger configuration ==== let g:ranger_map_keys = 0 "nnoremap :Ranger " ==== netrw configuration ==== nnoremap :Explore autocmd BufEnter,BufRead nnoremap cg :call OpenRangerIn(system("git rev-parse --show-toplevel >/dev/null || pwd"), 'edit ') " ==== fugitive configuration ==== nnoremap gs :Git nnoremap gc :Git commit nnoremap gp :Git push nnoremap gg :Git pull nnoremap gd :Git diff nnoremap gb :Git blame nnoremap gl :Git log nnoremap gms :Gvdiffsplit! nnoremap gmh :diffget //2 nnoremap gml :diffget //3 nnoremap gsc :exec "!git switch -c " . input("Enter new branch name:") " ==== functions ====== fu! SilentOK(cmd) let l:output = system(substitute(a:cmd, "%", expand("%"), "g")) if v:shell_error != 0 echo l:output endif endfu fu! SystemOr(cmd, default) let l:output = system(substitute(a:cmd, "%", expand("%"), "g")) if v:shell_error != 0 return a:default endif return trim(l:output) endfu " ==== ctrlp configuration ==== "let g:ctrlp_user_command = ['.git', 'git ls-files -co --exclude-standard'] " ==== fzf configuration ==== " enable for fzf let g:fugitive_no_maps=1 let $FZF_DEFAULT_COMMAND = 'ag --hidden --ignore .git -l -g ""' nnoremap :call fzf#vim#files(SystemOr("git rev-parse --show-toplevel", ".")) nnoremap gco :call fzf#run({'source': 'git branch \| cut -c 3-; git tag -l', 'sink': '!git checkout'}) nnoremap gm :call fzf#run({'source': 'git branch \| cut -c 3-', 'sink': '!git merge'}) nnoremap b :Buffers " ==== gruvbox configuration ==== color gruvbox set background=dark " for background transparence to work highlight Normal ctermbg=None 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 " ==== groff ==== fu! ToggleGroffMomAutoCompilation() let g:GroffMomAutoCompilation = !get(g:, "GroffMomAutoCompilation", 0) augroup GroffPdf autocmd! augroup END if g:GroffMomAutoCompilation augroup GroffPdf autocmd BufWritePost,FileWritePost *.mom :call SilentOK("groff -Kutf8 -mom % > /tmp/tmp.ps && ps2pdf /tmp/tmp.ps %.pdf") augroup END echo "Auto compilation for groff_mom enabled" else echo "Auto compilation for groff_mom disabled" endif endfu nnoremap ac :call ToggleGroffMomAutoCompilation() autocmd BufEnter,BufRead *.mom :set ft=mom " spell highlight highlight clear SpellBad highlight SpellBad cterm=underline highlight SpellBad gui=undercurl " commitmsg autocmd BufEnter,BufRead commitmsg.md :set colorcolumn=100 " ==== nerdtree ==== nnoremap t :NERDTreeToggle " go organize import on save " ==== golang ==== command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') autocmd BufWritePre *.go :OR " ==== floaterm ==== nnoremap tt :FloatermNew nnn let g:floaterm_autohide=1 let g:floaterm_autoclose=1 let g:floaterm_shell='fish' let g:floaterm_opener='edit' let g:floaterm_keymap_new = '' let g:floaterm_keymap_prev = '' let g:floaterm_keymap_next = '' let g:floaterm_keymap_toggle = ''