aboutsummaryrefslogtreecommitdiff
path: root/base/vimrc
diff options
context:
space:
mode:
Diffstat (limited to 'base/vimrc')
-rw-r--r--base/vimrc239
1 files changed, 239 insertions, 0 deletions
diff --git a/base/vimrc b/base/vimrc
new file mode 100644
index 0000000..3a4b16a
--- /dev/null
+++ b/base/vimrc
@@ -0,0 +1,239 @@
+set nocompatible
+set encoding=utf-8
+
+set modelines=0 " for security
+
+set mouse=""
+set backspace=indent,eol,start
+
+au FocusLost * :wa
+
+" Leader ====----
+nnoremap ,, ,
+let mapleader=","
+nnoremap <leader>; ;
+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
+
+xnoremap < <gv
+xnoremap > >gv
+
+" 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 <silent> <leader><space> :noh<cr>
+
+" Case insensitive
+nmap * /\<<C-R>=expand('<cword>')<CR>\><CR>
+nmap # ?\<<C-R>=expand('<cword>')<CR>\><CR>
+
+set showmatch
+nnoremap <tab> %
+vnoremap <tab> %
+
+" Screen ====----
+"set nowrap
+set wrap
+"set textwidth=79
+"set formatoptions=tqrn1
+set colorcolumn=85
+set ruler
+set number
+set relativenumber
+set laststatus=2
+set shortmess=aoOstTWAI
+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 <up> <nop>
+noremap <down> <nop>
+noremap <left> <nop>
+noremap <right> <nop>
+
+" nnoremap j gj
+" nnoremap k gk
+
+" Splits ====----
+nnoremap <leader>w <C-w>v<C-w>l
+nnoremap <C-h> <C-w>h
+nnoremap <C-j> <C-w>j
+nnoremap <C-k> <C-w>k
+nnoremap <C-l> <C-w>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 <silent> <leader>ve :tabe $MYVIMRC<CR>
+nnoremap <silent> <leader>vs :so $MYVIMRC<CR>
+
+nnoremap <F2> :set invpaste paste?<CR>
+set pastetoggle=<F2>
+
+nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<CR>
+nnoremap <leader>ft Vatzf
+nnoremap <leader>S ?{<CR>jV/^\s*\}?$<CR>k:sort<CR>:noh<CR>
+nnoremap <leader>q gqip
+nnoremap <leader>vp V`]
+nnoremap <leader>h :syntax sync fromstart<CR>
+nnoremap <leader>l :nohlsearch<cr>:diffupdate<cr>:syntax sync fromstart<cr><c-l>
+nnoremap [<space> :<c-u>put! =repeat(nr2char(10), v:count1)<cr>'[
+nnoremap ]<space> :<c-u>put =repeat(nr2char(10), v:count1)<cr>
+
+noremap <leader>y "*y
+noremap <leader>yy "*Y
+noremap <leader>p :set paste<CR>:put *<CR>:set nopaste<CR>
+
+noremap <silent> + :s/^\s*/&\/\//<CR>:noh<CR>
+noremap <silent> - :s/^\(\s*\)\/\//\1/<CR>:noh<CR>
+
+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 <leader>H :Hexmode<CR>
+
+function! NumberToggle()
+ if(&relativenumber == 1)
+ set norelativenumber
+ else
+ set relativenumber
+ endif
+endfunc
+
+nnoremap <leader>N :call NumberToggle()<cr>
+"autocmd InsertEnter * :set norelativenumber
+"autocmd InsertLeave * :set relativenumber
+
+" Custom functions ====----
+
+if filereadable(expand("~/.vimrc.local"))
+ source ~/.vimrc.local
+endif
+
+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
+autocmd! BufWritePost $MYVIMRC source $MYVIMRC
+packadd! matchit
+cnoremap <c-n> <down>
+cnoremap <c-p> <up>
+autocmd! BufRead,BufNewFile *.md set filetype=markdown
+autocmd! BufRead,BufNewFile *.md set spell
+vnoremap p "_dP