set nocompatible set modelines=0 " for security set encoding=utf-8 set mouse="" set backspace=indent,eol,start au FocusLost * :wa " Leader ====---- nnoremap ,, , let mapleader="," nnoremap ; ; nnoremap ; : " Highlighting ====---- syntax on filetype plugin indent on set t_Co=256 " force enable 256-color mode. if &t_Co >= 256 || has("gui_running") let base16colorspace=256 colorscheme base16-default-dark endif if &t_Co > 2 || has("gui_running") syntax on endif " Indentation ====---- set shiftwidth=2 set tabstop=2 set expandtab set shiftround " use multiple of shiftwidth with '<' and '>' set autoindent set copyindent " copy the previous line's indentation " Search ====---- set incsearch set hlsearch set wrapscan set ignorecase " ignore case when searching set smartcase " ignore case if search pattern is all lowercase, " case-sensitive otherwise nnoremap :noh " Case insensitive nmap * /\<=expand('')\> nmap # ?\<=expand('')\> set showmatch nnoremap % vnoremap % " Screen ====---- "set nowrap set wrap "set textwidth=79 "set formatoptions=tqrn1 set colorcolumn=85 set ruler set number set relativenumber set laststatus=2 set cursorline "set showmode set showcmd set title " change the terminal's title set scrolloff=3 set visualbell " don't beep set noerrorbells " don't beep set list set listchars=tab:»\ ,extends:›,precedes:‹,nbsp:·,trail:· "autocmd filetype html,xml set listchars-=tab:>. set wildmenu set wildmode=longest:full,full set wildignore=*.swp,*.bak,*.pyc,*.class set ttyfast hi ColorColumn ctermbg=18 hi Folded ctermbg=0 ctermfg=12 " Stop using arrow keys ====---- noremap noremap noremap noremap " nnoremap j gj " nnoremap k gk " Splits ====---- nnoremap w vl nnoremap h nnoremap j nnoremap k nnoremap l " History ====---- set history=1000 " remember more commands and search history set undolevels=1000 " use many muchos levels of undo if !isdirectory($HOME."/.vim") call mkdir($HOME."/.vim", "", 0770) endif if !isdirectory($HOME."/.vim/undo-dir") call mkdir($HOME."/.vim/undo-dir", "", 0700) endif set undodir=~/.vim/undo-dir set undofile " !!!! ADD THIS TO CRONTAB " 43 0 * * 3 find /home/adam/.vim/undo-dir -type f -mtime +90 -delete set nobackup set noswapfile " Note: swap helps large files. " Custom mappings ====---- " Quickly edit/reload the vimrc file nnoremap ve :tabe $MYVIMRC nnoremap vs :so $MYVIMRC nnoremap :set invpaste paste? set pastetoggle= set showmode nnoremap W :%s/\s\+$//:let @/='' nnoremap ft Vatzf nnoremap S ?{jV/^\s*\}?$k:sort:noh nnoremap q gqip nnoremap v V`] nnoremap s :syntax sync fromstart vnoremap Q gq nnoremap Q gqap cnoremap w!! w !sudo tee % >/dev/null " helper function to toggle hex mode function! ToggleHex() " hex mode should be considered a read-only operation " save values for modified and read-only for restoration later, " and clear the read-only flag for now let l:modified=&mod let l:oldreadonly=&readonly let &readonly=0 let l:oldmodifiable=&modifiable let &modifiable=1 if !exists("b:editHex") || !b:editHex " save old options let b:oldft=&ft let b:oldbin=&bin " set new options setlocal binary " make sure it overrides any textwidth, etc. let &ft="xxd" " set status let b:editHex=1 " switch to hex editor %!xxd else " restore old options let &ft=b:oldft if !b:oldbin setlocal nobinary endif " set status let b:editHex=0 " return to normal editing %!xxd -r endif " restore values for modified and read only state let &mod=l:modified let &readonly=l:oldreadonly let &modifiable=l:oldmodifiable endfunction command! -bar Hexmode call ToggleHex() nnoremap h :Hexmode function! NumberToggle() if(&relativenumber == 1) set number else set relativenumber endif endfunc nnoremap N :call NumberToggle() autocmd InsertEnter * :set number autocmd InsertLeave * :set relativenumber " Custom functions ====---- function! SetLocalOptions(fname) let dirname = fnamemodify(a:fname, ":p:h") while "/" != dirname let lvimrc = dirname . "/.vimrc.local" if filereadable(lvimrc) execute "source " . lvimrc break endif let dirname = fnamemodify(dirname, ":p:h:h") endwhile endfunction au BufNewFile,BufRead * call SetLocalOptions(bufname("%")) " To move elsewhere ====---- au BufNewFile,BufRead *.less set filetype=less