1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | " General settings {{{
" Filetype support
filetype plugin indent on
syntax on
runtime macros/matchit.vim
colorscheme gruvbox " Use the gruvbox colorscheme: https://github.com/morhetz/gruvbox
set background=dark " Use a dark background
set scrolloff=5 " Keep at least 3 lines above/below when scrolling
set lazyredraw " Don't update the display while executing macros
set tabstop=4 " Tab indentation levels every four columns
set shiftwidth=4 " Indent/outdent by four columns (when pressing >>)
set expandtab " Convert all tabs that are typed into spaces (it has a better compatibility with other computers)
set shiftround " Always indent/outdent to nearest tabstop
set smarttab " Use shiftwidths at left margin, tabstops everywhere else
set laststatus=2 " Always show the statusline
set nonumber " Don't display line numbers
set backspace=indent,eol,start " Fix backspace
set hlsearch " Highlight search
set incsearch ignorecase " Increase search
set noswapfile " Don't use swap file
set smartcase " Override the 'ignorecase' option if the search pattern contains upper case characters.
set showcmd " Show commands at bottom
set hidden " Switch buffers without the need of saving them
set clipboard=unnamedplus " Copy to clipboard when yanking text with yy/dd etc.
set path=.,** " Set path to the current and children directories
set wildmenu wildmode=full " Display all matching files when we tab complete
set undofile undodir=~/.vim/tmp/undo/ " Set undofiles (undo files even if you exited the file)
set splitbelow splitright " Split belor and/or right when opening new buffers
set list listchars=eol:$,trail:∙ listchars+=tab:│\ fillchars+=vert:│,fold:\
set foldenable foldmethod=marker
" Set up statusline
set statusline=\ %f\ %y\ %m%=%l,%c\ \ \ \ \ \ \ \ \ \ \ \ %P\ |
" }}}
" Mappings {{{
" Ergonomics
inoremap <C-H> (
inoremap <C-J> )
inoremap <C-K> [
inoremap <C-L> ]
inoremap <C-D> *
" http://items.sjbach.com/319/configuring-vim-right
noremap ; :
noremap : ;
nnoremap ' `
" Make 0 go to the first character rather than the beginning
" " of the line. When we're programming, we're almost always
" " interested in working with text rather than empty space. If
" " you want the traditional beginning of line, use ^
nnoremap 0 ^
nnoremap ^ 0
" Supercharge dot formula
nnoremap c* *``cgn
" Delete trailing spaces
nnoremap <silent> <F5> :let _s=@/ <Bar> :%s/\s\+$//e <Bar> :let @/=_s <Bar> :nohl <Bar> :unlet _s <CR>
" Juggling with buffers
nnoremap ,b :buffer *
nnoremap ,B :sbuffer *
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
nnoremap <BS> :buffer#<CR>
" Juggling with matches
nnoremap ,i :ilist /
nnoremap [I [I:ijump<Space><Space><Space><C-r><C-w><S-Left><Left><Left>
nnoremap ]I ]I:ijump<Space><Space><Space><C-r><C-w><S-Left><Left><Left>
" Move to other buffers
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
nnoremap <C-h> <C-w>h
" Visual select inside a whole function
xnoremap if /^\s*}<CR><Esc>V%
" File navigation
nnoremap ,f :find *
nnoremap ,s :sfind *
nnoremap ,v :vert sfind *
nnoremap ,F :find <C-R>=fnameescape(expand('%:p:h')).'/**/*'<CR>
nnoremap ,S :sfind <C-R>=fnameescape(expand('%:p:h')).'/**/*'<CR>
nnoremap ,V :vert sfind <C-R>=fnameescape(expand('%:p:h')).'/**/*'<CR>
nnoremap gb :ls<CR>:buffer<Space>
" better completion menu
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<cr>"
" Smooth listing
cnoremap <expr> <CR> <SID>CCR()
function! s:CCR()
command! -bar Z silent set more|delcommand Z
if getcmdtype() == ":"
let cmdline = getcmdline()
if cmdline =~ '\v\C^(dli|il)' | return "\<CR>:" . cmdline[0] . "jump " . split(cmdline, " ")[1] . "\<S-Left>\<Left>\<Left>"
elseif cmdline =~ '\v\C^(cli|lli)' | return "\<CR>:silent " . repeat(cmdline[0], 2) . "\<Space>"
elseif cmdline =~ '\C^changes' | set nomore | return "\<CR>:Z|norm! g;\<S-Left>"
elseif cmdline =~ '\C^ju' | set nomore | return "\<CR>:Z|norm! \<C-o>\<S-Left>"
elseif cmdline =~ '\v\C(#|nu|num|numb|numbe|number)$' | return "\<CR>:"
elseif cmdline =~ '\C^ol' | set nomore | return "\<CR>:Z|e #<"
elseif cmdline =~ '\v\C^(ls|files|buffers)' | return "\<CR>:b"
elseif cmdline =~ '\C^marks' | return "\<CR>:norm! `"
elseif cmdline =~ '\C^undol' | return "\<CR>:u "
else | return "\<CR>" | endif
else | return "\<CR>" | endif
endfunction
" Commands for adjusting indentation rules manually
command! -nargs=1 Spaces execute "setlocal tabstop=" . <args> . " shiftwidth=" . <args> . " softtabstop=" . <args> . " expandtab" | setlocal ts? sw? sts? et?
command! -nargs=1 Tabs execute "setlocal tabstop=" . <args> . " shiftwidth=" . <args> . " softtabstop=" . <args> . " noexpandtab" | setlocal ts? sw? sts? et?
" Share text on ix.io (visual select something, type :IX, and it will upload to ix.io)
command! -range=% IX <line1>,<line2>w !curl -F 'f:1=<-' ix.io | tr -d '\n' | xclip -i -selection clipboard
" Clear all the registers available: https://stackoverflow.com/a/41003241
command! ClearReg for i in range(34,122) | silent! call setreg(nr2char(i), []) | endfor
" Fix the go to next line if wrap is enabled
nnoremap <expr> j v:count ? 'j' : 'gj'
nnoremap <expr> k v:count ? 'k' : 'gk'
" }}}
" AutoCMD's {{{
if has('autocmd')
augroup Set_FileTypes
autocmd!
autocmd BufRead,BufNewFile,BufWritePost *.pl set filetype=prolog
autocmd FileType gitcommit setlocal spell
autocmd FileType qf wincmd J | setlocal wrap
autocmd FileType mail
\ if expand('%:p') =~ '^/tmp/mutt/\(neo\)\?mutt-' |
\ set ft=pandoc |
\ else |
\ setlocal spell |
\ endif
augroup END
" Return to last edit position when opening files (You want this!)
augroup Remember_cursor_position
autocmd!
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
augroup END
augroup VimSettings
autocmd!
" automatic location/quickfix window
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
autocmd VimEnter * cwindow
" various adjustments of the default colorscheme
highlight ModeMsg ctermbg=Red ctermfg=White cterm=bold
highlight Search ctermfg=White ctermbg=Red cterm=bold
highlight IncSearch ctermfg=White ctermbg=Red cterm=bold
highlight StatusLine ctermfg=35 ctermbg=8
highlight StatusLineNC ctermfg=8 ctermbg=35
" Tabline color settings
highlight TabLine ctermfg=White ctermbg=Black cterm=NONE
highlight TabLineFill ctermfg=White ctermbg=Black cterm=NONE
highlight TabLineSel ctermfg=White ctermbg=DarkBlue cterm=NONE
" Spell color settings
highlight SpellBad term=underline cterm=underline ctermbg=Red
highlight SpellCap term=underline cterm=underline
highlight SpellRare term=underline cterm=underline
highlight SpellLocal term=underline cterm=underline
" Git-specific settings
autocmd FileType gitcommit nnoremap <buffer> { ?^@@<CR>|nnoremap <buffer> } /^@@<CR>|setlocal iskeyword+=-
augroup END
" Show spaces as red if there's nothing after it (stole Greg Hurrel)
augroup TrailWhiteSpaces
highlight ColorColumn ctermbg=1
autocmd BufWinEnter <buffer> match Error /\s\+$/
autocmd InsertEnter <buffer> match Error /\s\+\%#\@<!$/
autocmd InsertLeave <buffer> match Error /\s\+$/
autocmd BufWinLeave <buffer> call clearmatches()
augroup END
endif
" }}}
" Grep {{{
command! -nargs=+ -complete=file_in_path -bar Grep silent! grep! <args> | redraw!
command! -nargs=+ -complete=file_in_path -bar LGrep silent! lgrep! <args> | redraw!
nnoremap <silent> ,G :Grep <C-r><C-w><CR>
xnoremap <silent> ,G :<C-u>let cmd = "Grep " . visual#GetSelection() <bar>
\ call histadd("cmd", cmd) <bar>
\ execute cmd<CR>
if executable("ag")
set grepprg=ag\ --vimgrep
set grepformat^=%f:%l:%c:%m
endif
" }}}
" Netrw {{{
let g:netrw_sort_by = 'time'
let g:netrw_sort_direction = 'reverse'
let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_browse_split = 3
let g:netrw_fastbrowse = 1
let g:netrw_sort_by = 'name'
let g:netrw_sort_direction = 'normal'
let g:netrw_winsize = -28
function! ToggleExplore()
if &ft ==# "netrw"
Rexplore
else
Explore
endif
endfunction
map <F2> <Esc><Esc>:call ToggleExplore()<CR>
" }}}
|
x
Notes
Vanilla vim (with no plugins)