2019-04-21 11:42:15 +00:00
|
|
|
" <leader> is comma
|
|
|
|
let mapleader = ','
|
|
|
|
|
|
|
|
" allow moving cursor just after the last chraracter of the line
|
|
|
|
set virtualedit=onemore
|
|
|
|
|
|
|
|
set foldmethod=marker
|
|
|
|
|
|
|
|
|
|
|
|
" Indentination {{{
|
|
|
|
|
|
|
|
function SetIndent(expandtab, shiftwidth)
|
|
|
|
let &l:expandtab = a:expandtab
|
|
|
|
let &l:shiftwidth = str2nr(a:shiftwidth)
|
|
|
|
let &l:tabstop = &shiftwidth
|
|
|
|
let &l:softtabstop = &shiftwidth
|
|
|
|
endfunction
|
|
|
|
command -nargs=1 Indent call SetIndent(1, <q-args>)
|
|
|
|
command -nargs=1 IndentTabs call SetIndent(0, <q-args>)
|
|
|
|
|
|
|
|
" use 2 spaces for indentination
|
|
|
|
set expandtab shiftwidth=2 tabstop=2 softtabstop=2
|
|
|
|
" round indents to multiple of shiftwidth when using shift (< and >) commands
|
|
|
|
set shiftround
|
|
|
|
|
|
|
|
let g:indentLine_char = "\u2502"
|
|
|
|
let g:indentLine_first_char = g:indentLine_char
|
|
|
|
let g:indentLine_showFirstIndentLevel = 1
|
|
|
|
let g:indentLine_fileTypeExclude = ['text', 'help', 'tutor']
|
|
|
|
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" Invisible characters {{{
|
|
|
|
set list
|
|
|
|
let &listchars = "tab:\u2192 ,extends:>,precedes:<,eol:\u00ac,trail:\u00b7"
|
|
|
|
let &showbreak = '>'
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" Cursor and Scrolling {{{
|
|
|
|
|
|
|
|
set number
|
|
|
|
set relativenumber
|
|
|
|
set cursorline
|
|
|
|
|
|
|
|
" remember cursor position
|
|
|
|
augroup vimrc-editing-remember-cursor-position
|
|
|
|
autocmd!
|
|
|
|
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exec "normal! g`\"" | endif
|
|
|
|
augroup END
|
|
|
|
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" Wrapping {{{
|
|
|
|
set nowrap
|
|
|
|
set colorcolumn=80,100,120
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" Mappings {{{
|
|
|
|
|
|
|
|
" arguably one of the most useful mappings
|
2019-04-22 18:15:29 +00:00
|
|
|
nnoremap <silent><expr> <CR> &buftype is# '' ? ":w\<CR>" : "\<CR>"
|
2019-04-21 11:42:15 +00:00
|
|
|
|
|
|
|
" stay in the Visual mode when using shift commands
|
|
|
|
xnoremap < <gv
|
|
|
|
xnoremap > >gv
|
|
|
|
|
|
|
|
" 2 mappings for quick prototyping: duplicate this line and comment it out
|
|
|
|
nmap <silent> <leader>] m'yygccp`'j
|
|
|
|
nmap <silent> <leader>[ m'yygccP`'k
|
|
|
|
|
|
|
|
command! -nargs=+ -complete=command PutOutput execute 'put =execute(' . escape(string(<q-args>), '|"') . ')'
|
|
|
|
|
|
|
|
" Clipboard {{{
|
|
|
|
" ,c is easier to type than "+ because it doesn't require pressing Shift
|
|
|
|
noremap <leader>c "+
|
|
|
|
" these 3 mappings are equivalent to Ctrl+C, Ctrl+V, and Ctrl+X in GUI
|
|
|
|
" editors (hence the names)
|
|
|
|
" noremap <leader>cc "+y
|
|
|
|
" noremap <leader>cv "+gP
|
|
|
|
" noremap <leader>cV "+gp
|
|
|
|
" noremap <leader>cx "+d
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" Search {{{
|
|
|
|
|
|
|
|
" ignore case if the pattern doesn't contain uppercase characters (use '\C'
|
|
|
|
" anywhere in pattern to override these two settings)
|
|
|
|
set ignorecase smartcase
|
|
|
|
|
|
|
|
nnoremap \ :nohlsearch<CR>
|
|
|
|
|
|
|
|
let g:indexed_search_center = 1
|
|
|
|
|
|
|
|
" search inside a visual selection
|
2019-04-22 10:03:25 +00:00
|
|
|
xnoremap / <Esc>/\%><C-R>=line("'<")-1<CR>l\%<<C-R>=line("'>")+1<CR>l
|
|
|
|
xnoremap ? <Esc>?\%><C-R>=line("'<")-1<CR>l\%<<C-R>=line("'>")+1<CR>l
|
2019-04-21 11:42:15 +00:00
|
|
|
|
|
|
|
" * and # in the Visual mode will search the selected text
|
|
|
|
function! s:VisualStarSearch(search_cmd)
|
|
|
|
let l:tmp = @"
|
|
|
|
normal! gvy
|
|
|
|
let @/ = '\V' . substitute(escape(@", a:search_cmd . '\'), '\n', '\\n', 'g')
|
|
|
|
let @" = l:tmp
|
|
|
|
endfunction
|
|
|
|
" HACK: my mappings are added on VimEnter to override mappings from the
|
|
|
|
" vim-indexed-search plugin
|
|
|
|
augroup vimrc-editing-visual-star-search
|
|
|
|
autocmd!
|
|
|
|
autocmd VimEnter *
|
|
|
|
\ xmap * :<C-u>call <SID>VisualStarSearch('/')<CR>n
|
|
|
|
\|xmap # :<C-u>call <SID>VisualStarSearch('?')<CR>N
|
|
|
|
augroup END
|
|
|
|
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" Replace {{{
|
|
|
|
|
|
|
|
" show the effects of the :substitute command incrementally, as you type
|
|
|
|
" (works similar to 'incsearch')
|
|
|
|
set inccommand=nosplit
|
|
|
|
|
|
|
|
" quick insertion of the substitution command
|
|
|
|
nnoremap gs :%s///g<Left><Left><Left>
|
|
|
|
xnoremap gs :s///g<Left><Left><Left>
|
|
|
|
nnoremap gss :%s///g<Left><Left>
|
|
|
|
xnoremap gss :s///g<Left><Left>
|
|
|
|
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" Formatting {{{
|
|
|
|
|
|
|
|
" don't insert a comment after hitting 'o' or 'O' in the Normal mode
|
|
|
|
augroup vimrc-editing-formatting
|
|
|
|
autocmd!
|
|
|
|
autocmd FileType * set formatoptions-=o
|
|
|
|
augroup END
|
|
|
|
|
|
|
|
" }}}
|
|
|
|
|
|
|
|
|
|
|
|
" plugins {{{
|
|
|
|
let g:delimitMate_expand_space = 1
|
|
|
|
let g:delimitMate_expand_cr = 1
|
|
|
|
|
|
|
|
let g:pencil#wrapModeDefault = 'soft'
|
|
|
|
let g:pencil#conceallevel = 0
|
|
|
|
let g:pencil#cursorwrap = 0
|
|
|
|
|
|
|
|
xmap ga <Plug>(LiveEasyAlign)
|
|
|
|
nmap ga <Plug>(LiveEasyAlign)
|
|
|
|
" }}}
|