init
This commit is contained in:
@@ -0,0 +1,492 @@
|
||||
" Modeline and Notes {
|
||||
" vim: set sw=4 ts=4 sts=4 et tw=78 foldmarker={,} nofoldenable foldmethod=marker spell:
|
||||
"
|
||||
" This is Nachuan's personal vim config fork from
|
||||
" spf13/spf13-vim (http://spf13.com)
|
||||
|
||||
" Environment {
|
||||
|
||||
" The default leader is '\', but many people prefer ',' as it's in a standard
|
||||
let mapleader = ','
|
||||
let maplocalleader = '_'
|
||||
|
||||
" }
|
||||
|
||||
" Use bundles config {
|
||||
if filereadable(expand("~/.vimrc.bundles"))
|
||||
source ~/.vimrc.bundles
|
||||
endif
|
||||
" }
|
||||
|
||||
" General {
|
||||
|
||||
set background=dark " Assume a dark background
|
||||
|
||||
" Allow to trigger background
|
||||
function! ToggleBG()
|
||||
let s:tbg = &background
|
||||
" Inversion
|
||||
if s:tbg == "dark"
|
||||
set background=light
|
||||
else
|
||||
set background=dark
|
||||
endif
|
||||
endfunction
|
||||
|
||||
noremap <leader>bg :call ToggleBG()<CR>
|
||||
noremap <leader>h :noh<CR> " turn off highlight
|
||||
|
||||
filetype plugin indent on " Automatically detect file types.
|
||||
syntax on " Syntax highlighting
|
||||
syntax enable " Syntax highlighting
|
||||
set mouse=a " Automatically enable mouse usage
|
||||
set mousehide " Hide the mouse cursor while typing
|
||||
scriptencoding utf-8
|
||||
|
||||
|
||||
" Most prefer to automatically switch to the current file directory when
|
||||
" a new buffer is opened; to prevent this behavior, add the following to
|
||||
" your .vimrc.before.local file:
|
||||
" let g:spf13_no_autochdir = 1
|
||||
if !exists('g:spf13_no_autochdir')
|
||||
autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif
|
||||
" Always switch to the current file directory
|
||||
endif
|
||||
|
||||
set shortmess+=filmnrxoOtT " Abbrev. of messages (avoids 'hit enter')
|
||||
set viewoptions=folds,options,cursor,unix,slash " Better Unix / Windows compatibility
|
||||
set virtualedit=onemore " Allow for cursor beyond last character
|
||||
set history=1000 " Store a ton of history (default is 20)
|
||||
set spell " Spell checking on
|
||||
set hidden " Allow buffer switching without saving
|
||||
set iskeyword-=. " '.' is an end of word designator
|
||||
set iskeyword-=# " '#' is an end of word designator
|
||||
set iskeyword-=- " '-' is an end of word designator
|
||||
"set iskeyword-=_ " '_' is an end of word designator
|
||||
|
||||
" Instead of reverting the cursor to the last position in the buffer, we
|
||||
" set it to the first line when editing a git commit message
|
||||
au FileType gitcommit au! BufEnter COMMIT_EDITMSG call setpos('.', [0, 1, 1, 0])
|
||||
|
||||
" http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session
|
||||
" Restore cursor to file position in previous editing session
|
||||
" To disable this, add the following to your .vimrc file:
|
||||
" let g:spf13_no_restore_cursor = 1
|
||||
if !exists('g:spf13_no_restore_cursor')
|
||||
function! ResCur()
|
||||
if line("'\"") <= line("$")
|
||||
silent! normal! g`"
|
||||
return 1
|
||||
endif
|
||||
endfunction
|
||||
|
||||
augroup resCur
|
||||
autocmd!
|
||||
autocmd BufWinEnter * call ResCur()
|
||||
augroup END
|
||||
endif
|
||||
|
||||
" Setting up the directories {
|
||||
set backup " Backups are nice ...
|
||||
if has('persistent_undo')
|
||||
set undofile " So is persistent undo ...
|
||||
set undolevels=1000 " Maximum number of changes that can be undone
|
||||
set undoreload=10000 " Maximum number lines to save for undo on a buffer reload
|
||||
endif
|
||||
" }
|
||||
|
||||
" }
|
||||
|
||||
" Vim UI {
|
||||
|
||||
if filereadable(expand("~/.vim/bundle/vim-colors-solarized/colors/solarized.vim"))
|
||||
let g:solarized_termcolors=256
|
||||
let g:solarized_termtrans=1
|
||||
let g:solarized_contrast="normal"
|
||||
let g:solarized_visibility="normal"
|
||||
call togglebg#map("<F5>")
|
||||
colorscheme solarized
|
||||
endif
|
||||
|
||||
set tabpagemax=15 " Only show 15 tabs
|
||||
set showmode " Display the current mode
|
||||
set cursorline " Highlight current line
|
||||
|
||||
highlight clear SignColumn " SignColumn should match background
|
||||
highlight clear LineNr " Current line number row will have same background color in relative mode
|
||||
"highlight clear CursorLineNr " Remove highlight color from current line number
|
||||
|
||||
if has('cmdline_info')
|
||||
set ruler " Show the ruler
|
||||
set rulerformat=%30(%=\:b%n%y%m%r%w\ %l,%c%V\ %P%) " A ruler on steroids
|
||||
set showcmd " Show partial commands in status line and
|
||||
endif
|
||||
|
||||
if has('statusline')
|
||||
set laststatus=2
|
||||
" Broken down into easily includeable segments
|
||||
set statusline=%<%f\ " Filename
|
||||
set statusline+=%w%h%m%r " Options
|
||||
set statusline+=\ [%{&ff}/%Y] " Filetype
|
||||
set statusline+=\ [%{getcwd()}] " Current dir
|
||||
set statusline+=%=%-14.(%l,%c%V%)\ %p%% " Right aligned file nav info
|
||||
endif
|
||||
|
||||
set backspace=indent,eol,start " Backspace for dummies
|
||||
|
||||
set number " Line numbers on
|
||||
set showmatch " Show matching brackets/parenthesis
|
||||
set incsearch " Find as you type search
|
||||
set hlsearch " Highlight search terms
|
||||
set winminheight=0 " Windows can be 0 line high
|
||||
set ignorecase " Case insensitive search
|
||||
set smartcase " Case sensitive when uc present
|
||||
set wildmenu " Show list instead of just completing
|
||||
set wildmode=list:longest,full " Command <Tab> completion, list matches, then longest common part, then all.
|
||||
set whichwrap=b,s,h,l,<,>,[,] " Backspace and cursor keys wrap too
|
||||
set scrolljump=1 " Lines to scroll when cursor leaves screen
|
||||
set scrolloff=5 " Minimum lines to keep above and below cursor
|
||||
set sidescrolloff=5 " Minimum lines to keep at the left or right of the cursor
|
||||
|
||||
" }
|
||||
|
||||
" Formatting {
|
||||
|
||||
"set nowrap " Do not wrap long lines
|
||||
set autoindent " Indent at the same level of the previous line
|
||||
set shiftwidth=4 " Use indents of 4 spaces
|
||||
set expandtab " Tabs are spaces, not tabs
|
||||
set tabstop=4 " An indentation every four columns
|
||||
set softtabstop=4 " Let backspace delete indent
|
||||
set nojoinspaces " Prevents inserting two spaces after punctuation on a join (J)
|
||||
set splitright " Puts new vsplit windows to the right of the current
|
||||
set splitbelow " Puts new split windows to the bottom of the current
|
||||
set nolist " let vim not showing '$' or other sign
|
||||
|
||||
set matchpairs+=<:> " Match, to be used with %
|
||||
set comments=sl:/*,mb:*,elx:*/ " auto format comment blocks
|
||||
" Remove trailing whitespaces and ^M chars
|
||||
" To disable the stripping of whitespace, add the following to your
|
||||
" .vimrc.before.local file:
|
||||
" let g:spf13_keep_trailing_whitespace = 1
|
||||
"autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl,sql autocmd BufWritePre <buffer> if !exists('g:spf13_keep_trailing_whitespace') | call StripTrailingWhitespace() | endif
|
||||
"autocmd FileType go autocmd BufWritePre <buffer> Fmt
|
||||
autocmd BufNewFile,BufRead *.html.twig set filetype=html.twig
|
||||
autocmd FileType haskell,puppet,ruby,yml setlocal expandtab shiftwidth=2 softtabstop=2
|
||||
" preceding line best in a plugin but here for now.
|
||||
|
||||
autocmd BufNewFile,BufRead *.coffee set filetype=coffee
|
||||
|
||||
" Workaround vim-commentary for Haskell
|
||||
autocmd FileType haskell setlocal commentstring=--\ %s
|
||||
" Workaround broken colour highlighting in Haskell
|
||||
autocmd FileType haskell,rust setlocal nospell
|
||||
|
||||
" }
|
||||
|
||||
" Key (re)Mappings {
|
||||
|
||||
|
||||
" Wrapped lines goes down/up to next row, rather than next line in file.
|
||||
noremap j gj
|
||||
noremap k gk
|
||||
|
||||
|
||||
" Stupid shift key fixes
|
||||
if !exists('g:spf13_no_keyfixes')
|
||||
if has("user_commands")
|
||||
command! -bang -nargs=* -complete=file E e<bang> <args>
|
||||
command! -bang -nargs=* -complete=file W w<bang> <args>
|
||||
command! -bang -nargs=* -complete=file Wq wq<bang> <args>
|
||||
command! -bang -nargs=* -complete=file WQ wq<bang> <args>
|
||||
command! -bang Wa wa<bang>
|
||||
command! -bang WA wa<bang>
|
||||
command! -bang Q q<bang>
|
||||
command! -bang QA qa<bang>
|
||||
command! -bang Qa qa<bang>
|
||||
endif
|
||||
|
||||
cmap Tabe tabe
|
||||
endif
|
||||
|
||||
" Yank from the cursor to the end of the line, to be consistent with C and D.
|
||||
nnoremap Y y$
|
||||
|
||||
set foldmethod=syntax
|
||||
autocmd FileType python set foldmethod=indent
|
||||
set nofoldenable
|
||||
" Code folding options
|
||||
nmap <leader>f0 :set foldlevel=0<CR>
|
||||
nmap <leader>f1 :set foldlevel=1<CR>
|
||||
nmap <leader>f2 :set foldlevel=2<CR>
|
||||
nmap <leader>f3 :set foldlevel=3<CR>
|
||||
nmap <leader>f4 :set foldlevel=4<CR>
|
||||
nmap <leader>f5 :set foldlevel=5<CR>
|
||||
nmap <leader>f6 :set foldlevel=6<CR>
|
||||
nmap <leader>f7 :set foldlevel=7<CR>
|
||||
nmap <leader>f8 :set foldlevel=8<CR>
|
||||
nmap <leader>f9 :set foldlevel=9<CR>
|
||||
|
||||
" Most prefer to toggle search highlighting rather than clear the current
|
||||
" search results. To clear search highlighting rather than toggle it on
|
||||
" and off, add the following to your .vimrc.before.local file:
|
||||
" let g:spf13_clear_search_highlight = 1
|
||||
if exists('g:spf13_clear_search_highlight')
|
||||
nmap <silent> <leader>/ :nohlsearch<CR>
|
||||
else
|
||||
nmap <silent> <leader>/ :set invhlsearch<CR>
|
||||
endif
|
||||
|
||||
|
||||
" Find merge conflict markers
|
||||
map <leader>fc /\v^[<\|=>]{7}( .*\|$)<CR>
|
||||
|
||||
" Visual shifting (does not exit Visual mode)
|
||||
vnoremap < <gv
|
||||
vnoremap > >gv
|
||||
|
||||
" Allow using the repeat operator with a visual selection (!)
|
||||
" http://stackoverflow.com/a/8064607/127816
|
||||
vnoremap . :normal .<CR>
|
||||
|
||||
" For when you forget to sudo.. Really Write the file.
|
||||
cmap w!! w !sudo tee % >/dev/null
|
||||
|
||||
" Adjust viewports to the same size
|
||||
map <Leader>= <C-w>=
|
||||
|
||||
" Map <Leader>ff to display all lines with keyword under cursor
|
||||
" and ask which one to jump to
|
||||
nmap <Leader>ff [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR>
|
||||
|
||||
" Easier horizontal scrolling
|
||||
map zl zL
|
||||
map zh zH
|
||||
|
||||
" Easier formatting
|
||||
nnoremap <silent> <leader>q gwip
|
||||
|
||||
" Plugins {
|
||||
|
||||
" Misc {
|
||||
if isdirectory(expand("~/.vim/bundle/nerdtree"))
|
||||
let g:NERDShutUp=1
|
||||
endif
|
||||
if isdirectory(expand("~/.vim/bundle/matchit.zip"))
|
||||
let b:match_ignorecase = 1
|
||||
endif
|
||||
" }
|
||||
|
||||
" AutoCloseTag {
|
||||
" Make it so AutoCloseTag works for xml and xhtml files as well
|
||||
au FileType xhtml,xml ru ftplugin/html/autoclosetag.vim
|
||||
nmap <Leader>ac <Plug>ToggleAutoCloseMappings
|
||||
" }
|
||||
|
||||
" NerdTree {
|
||||
if isdirectory(expand("~/.vim/bundle/nerdtree"))
|
||||
nnoremap <C-e> :NERDTreeToggle<CR>
|
||||
" map <leader>e :NERDTreeFind<CR>
|
||||
nmap <leader>nt :NERDTreeFind<CR>
|
||||
|
||||
let NERDTreeShowBookmarks=1
|
||||
let NERDTreeIgnore=['\.py[cd]$', '\~$', '\.swo$', '\.swp$', '^\.git$', '^\.hg$', '^\.svn$', '\.bzr$']
|
||||
let NERDTreeChDirMode=0
|
||||
let NERDTreeQuitOnOpen=1
|
||||
let NERDTreeMouseMode=2
|
||||
let NERDTreeShowHidden=1
|
||||
let NERDTreeKeepTreeInNewTab=1
|
||||
endif
|
||||
" }
|
||||
" JSON {
|
||||
nmap <leader>jt <Esc>:%!python -m json.tool<CR><Esc>:set filetype=json<CR>
|
||||
let g:vim_json_syntax_conceal = 0
|
||||
" }
|
||||
|
||||
" indent_guides {
|
||||
if isdirectory(expand("~/.vim/bundle/vim-indent-guides/"))
|
||||
let g:indent_guides_start_level = 2
|
||||
let g:indent_guides_guide_size = 1
|
||||
let g:indent_guides_enable_on_vim_startup = 0
|
||||
map <leader>f :IndentGuidesToggle<CR>
|
||||
|
||||
endif
|
||||
" }
|
||||
" vim-airline {
|
||||
" Set configuration options for the statusline plugin vim-airline.
|
||||
" Use the powerline theme and optionally enable powerline symbols.
|
||||
" To use the symbols , , , , , , and .in the statusline
|
||||
" segments add the following to your .vimrc.before.local file:
|
||||
" let g:airline_powerline_fonts=1
|
||||
" If the previous symbols do not render for you then install a
|
||||
" powerline enabled font.
|
||||
|
||||
" See `:echo g:airline_theme_map` for some more choices
|
||||
" Default in terminal vim is 'dark'
|
||||
let g:airline_section_z = ''
|
||||
let g:airline_section_y = ''
|
||||
|
||||
if isdirectory(expand("~/.vim/bundle/vim-airline-themes/"))
|
||||
if !exists('g:airline_theme')
|
||||
let g:airline_theme = 'solarized'
|
||||
endif
|
||||
endif
|
||||
|
||||
" }
|
||||
|
||||
" }
|
||||
|
||||
" Functions {
|
||||
|
||||
" Initialize directories {
|
||||
function! InitializeDirectories()
|
||||
let parent = $HOME
|
||||
let prefix = 'vim'
|
||||
let dir_list = {
|
||||
\ 'backup': 'backupdir',
|
||||
\ 'views': 'viewdir',
|
||||
\ 'swap': 'directory' }
|
||||
|
||||
if has('persistent_undo')
|
||||
let dir_list['undo'] = 'undodir'
|
||||
endif
|
||||
|
||||
" To specify a different directory in which to place the vimbackup,
|
||||
" vimviews, vimundo, and vimswap files/directories, add the following to
|
||||
" your .vimrc.before.local file:
|
||||
" let g:spf13_consolidated_directory = <full path to desired directory>
|
||||
" eg: let g:spf13_consolidated_directory = $HOME . '/.vim/'
|
||||
let g:spf13_consolidated_directory = $HOME . '/.vim/.'
|
||||
if exists('g:spf13_consolidated_directory')
|
||||
let common_dir = g:spf13_consolidated_directory . prefix
|
||||
else
|
||||
let common_dir = parent . '/.' . prefix
|
||||
endif
|
||||
|
||||
for [dirname, settingname] in items(dir_list)
|
||||
let directory = common_dir . dirname . '/'
|
||||
if exists("*mkdir")
|
||||
if !isdirectory(directory)
|
||||
call mkdir(directory)
|
||||
endif
|
||||
endif
|
||||
if !isdirectory(directory)
|
||||
echo "Warning: Unable to create backup directory: " . directory
|
||||
echo "Try: mkdir -p " . directory
|
||||
else
|
||||
let directory = substitute(directory, " ", "\\\\ ", "g")
|
||||
exec "set " . settingname . "=" . directory
|
||||
endif
|
||||
endfor
|
||||
endfunction
|
||||
call InitializeDirectories()
|
||||
" }
|
||||
|
||||
" Initialize NERDTree as needed {
|
||||
function! NERDTreeInitAsNeeded()
|
||||
redir => bufoutput
|
||||
buffers!
|
||||
redir END
|
||||
let idx = stridx(bufoutput, "NERD_tree")
|
||||
if idx > -1
|
||||
NERDTreeMirror
|
||||
NERDTreeFind
|
||||
wincmd l
|
||||
endif
|
||||
endfunction
|
||||
" }
|
||||
|
||||
" Strip whitespace {
|
||||
function! StripTrailingWhitespace()
|
||||
" Preparation: save last search, and cursor position.
|
||||
let _s=@/
|
||||
let l = line(".")
|
||||
let c = col(".")
|
||||
" do the business:
|
||||
%s/\s\+$//e
|
||||
" clean up: restore previous search history, and cursor position
|
||||
let @/=_s
|
||||
call cursor(l, c)
|
||||
endfunction
|
||||
" }
|
||||
|
||||
" Shell command {
|
||||
function! s:RunShellCommand(cmdline)
|
||||
botright new
|
||||
|
||||
setlocal buftype=nofile
|
||||
setlocal bufhidden=delete
|
||||
setlocal nobuflisted
|
||||
setlocal noswapfile
|
||||
setlocal nowrap
|
||||
setlocal filetype=shell
|
||||
setlocal syntax=shell
|
||||
|
||||
call setline(1, a:cmdline)
|
||||
call setline(2, substitute(a:cmdline, '.', '=', 'g'))
|
||||
execute 'silent $read !' . escape(a:cmdline, '%#')
|
||||
setlocal nomodifiable
|
||||
1
|
||||
endfunction
|
||||
|
||||
command! -complete=file -nargs=+ Shell call s:RunShellCommand(<q-args>)
|
||||
" e.g. Grep current file for <search_term>: Shell grep -Hn <search_term> %
|
||||
" }
|
||||
|
||||
" Fix file type error for typescript
|
||||
autocmd BufNewFile,BufRead *.ts set filetype=typescript
|
||||
|
||||
" leader s change occurence
|
||||
:nnoremap <Leader>s :%s/\<<C-r><C-w>\>/
|
||||
" leader num change tab
|
||||
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>6 :b6<CR>
|
||||
nnoremap <Leader>7 :b7<CR>
|
||||
nnoremap <Leader>8 :b8<CR>
|
||||
nnoremap <Leader>9 :b9<CR>
|
||||
"let c = 0
|
||||
"while c <= 100
|
||||
" execute 'nnoremap <Leader>'.c ':b'.c.'<CR>'
|
||||
" let c += 1
|
||||
"endwhile
|
||||
|
||||
|
||||
" These are to cancel the default behavior of d, D, c, C
|
||||
" to put the text they delete in the default register.
|
||||
" Note that this means e.g. "ad won't copy the text into
|
||||
" register a anymore. You have to explicitly yank it.
|
||||
"
|
||||
" TIPS: you can type :registers to view value in each registers
|
||||
vnoremap p "0p
|
||||
|
||||
|
||||
" TIPS: :hi can be used to check current highlight options
|
||||
" Coc has wired floating color, this is an attempt to fix it
|
||||
highlight CocFloating ctermbg=green
|
||||
highlight FgCocErrorFloatBgCocFloating cterm=bold ctermfg=124 guifg=DarkRed ctermbg=green
|
||||
|
||||
" c highlight fix
|
||||
highlight cComment ctermfg=12 guifg=#458588
|
||||
|
||||
" copy to system
|
||||
set clipboard=unnamed
|
||||
|
||||
" space-d jump to definition if coc is installed
|
||||
"nnoremap <silent><nowait> <space>d :call CocAction('jumpDefinition', v: false)<CR>
|
||||
"nnoremap <silent><nowait> <space>r :call CocAction('jumpReferences', v: false)<CR>
|
||||
if filereadable(expand("~/.vim-config/.exp-coc-config"))
|
||||
source ~/.vim-config/.exp-coc-config
|
||||
endif
|
||||
|
||||
" fix paste mess up when using tmux
|
||||
if &term =~ "screen"
|
||||
let &t_BE = "\e[?2004h"
|
||||
let &t_BD = "\e[?2004l"
|
||||
exec "set t_PS=\e[200~"
|
||||
exec "set t_PE=\e[201~"
|
||||
endif
|
||||
|
||||
Reference in New Issue
Block a user