Skip to content

Instantly share code, notes, and snippets.

@chjj
Last active August 2, 2024 11:30
Show Gist options
  • Save chjj/1257074 to your computer and use it in GitHub Desktop.
Save chjj/1257074 to your computer and use it in GitHub Desktop.
vimrc, so i don't lose it
"
" ~/.vimrc
" https://gist.github.com/chjj/1257074
"
" === options ==================================================================
set nocompatible " vim settings
set nomodeline " security measure
" --- format -------------------------------------------------------------------
filetype on
if has('multi_byte')
set encoding=utf-8
set termencoding=utf-8
setglobal fileencoding=utf-8
set nobomb " dont use a BOM
" set fileencodings=utf-8,ucs-bom,default,latin1
end
set fileformats=unix,dos,mac
" --- crypto -------------------------------------------------------------------
set cryptmethod=blowfish
" --- layout -------------------------------------------------------------------
set notitle " no title
set nonumber " show line numbers
set ruler laststatus=2 " always show status line
set showmode " always show mode
set showcmd " show the command being typed
set scrolloff=4 " keep 4 lines off the edges
" set wrapmargin=4 " keep 4 characters away from border while wrapping
set pumheight=10 " popup menu height
" set title laststatus=0 noruler
" set titlestring=%t%m\ %y\ %r%=%l,%c\ (%L)\ %p%%
" set title
" set titlestring=vim
" --- mechanics ----------------------------------------------------------------
set wrap " wrap lines
set linebreak " break lines on words
let &showbreak = '| ' " wrap character
set autoindent " auto indent
set tabstop=2 " number of spaces in tab
set shiftwidth=2 " number of spaces to autoindent
set expandtab " use spaces instead of tabs
set hidden " allow hidden buffers
set history=25 " command history
set undolevels=100 " undo history
set hlsearch " highlight search results
set ignorecase " ignore case when searching
set smartcase " use case if there are capitals
set backspace=2 " (or 2) allow backspacing everything
set clipboard=unnamed,exclude:linux\|cons " x window clipboard
" set foldmethod=indent " fold by indentation
" set foldlevelstart=99 " start with folds open
" syntax/omni-completion
" if v:version >= 700
" filetype plugin on
" au FileType * set omnifunc=syntaxcomplete#Complete
" end
" set list
set listchars=tab:.\ ,trail:.
" --- files --------------------------------------------------------------------
set shell=/bin/bash
" Get :sh and :! to source ~/.bashrc.
" Put `test -n "$VIM" && shopt -s expand_aliases && PS1=1`
" At the top of ~/.bashrc for this to work properly.
" NOTE: Can cause infinite loops if .bashrc calls a bash script.
" let $BASH_ENV = '~/.bashrc'
set autochdir " automatic cd
set nobackup " do not keep backup files
if exists('&undodir') | set undodir= | end " no undo directory
set noswapfile " do not write swap files
set noundofile " no undo file
set nowritebackup " do not backup overwritten files
set viminfo= " %,'50,\"100,:100
set dir=/tmp " directory for swap files
" set wildmenu
" set wildchar=<f1>
" set wildmode=list
" --- tty ----------------------------------------------------------------------
set ttimeoutlen=100 " dont wait for escape sequences
set ttyfast " fast terminal
set noerrorbells " unnecessary?
set visualbell " don't blink
set t_vb= " no visual bell code
set lazyredraw " only redraw when necessary
" set noesckeys " ignore escape sequences
" set nottybuiltin " use external termcap
" set ttyscroll=0 " always redraw when scrolling
" enable mouse support
if has('mouse') && 0
set mouse=a
" set mousemodel=popup_setpos
" use the utf-8 xterm mouse protocol
if &term =~ "^screen\\|^xterm\\|^rxvt"
set ttymouse=xterm2
end
end
" cursor shape
" CSI Ps sp q
" 1 = bl-block, 2 = block,
" 3 = bl-underline, 4 = underline
" 5 = bl-bar, 6 = bar
" NOTE: Xterm now supports line cursor (5 for blinking, 6 for non-blinking):
" http://invisible-island.net/xterm/xterm.log.html#xterm_282
" blinking
" CSI ? 12 l - start blinking
" CSI ? 12 h - stop blinking
let &t_EI = ""
let &t_SI = ""
if &term =~ "^xterm" && 0
let &t_EI .= "\<Esc>[2 q"
let &t_SI .= "\<Esc>[6 q"
end
" set hardware cursor to nonblinking block
if &term =~ "^linux\\|^cons"
let &t_ve .= "\<Esc>[?112c"
end
" --- gui ----------------------------------------------------------------------
if has('gui_running')
set columns=85 lines=65
set gfn=Deja\ Vu\ Sans\ Mono\ 8
set go=acM ghr=0
set mouseshape=a:arrow
set guicursor=a:block-Cursor-blinkoff0
" set mouseshape=a:beam
au GUIEnter * set t_vb=
set browsedir=current " or buffer
end
" === mapping ==================================================================
" map - n, v, o
" map! - c, i
" lmap - c, i, l
" set <leader>
let mapleader = '\'
" dont use non-vi keys!
map <up> <nop>
map <down> <nop>
map <left> <nop>
map <right> <nop>
map <home> <nop>
map <end> <nop>
map <pageup> <nop>
map <pagedown> <nop>
map <insert> <nop>
imap <up> <nop>
imap <down> <nop>
imap <left> <nop>
imap <right> <nop>
imap <home> <nop>
imap <end> <nop>
imap <pageup> <nop>
imap <pagedown> <nop>
imap <insert> <nop>
imap <delete> <nop>
" man lookup is annoying sometimes
map K <nop>
" annoying on laptop keyboards
map <f1> <nop>
imap <f1> <nop>
" remap motions to act as expected for wrapped text
nnoremap j gj
nnoremap k gk
nnoremap 0 g0
nnoremap ^ g^
nnoremap $ g$
" Y doesnt do what i expect
nnoremap Y y$
" for pasting/selecting
set pastetoggle=<leader>q
" for buffer switching (:ls needs to not be noremap because of :ls alias)
nmap <leader>a :ls<cr>:b<space>
nnoremap <silent> gb :bn<cr>
nnoremap <silent> gB :bp<cr>
" possible use for switching:
" nnoremap <silent> <leader><tab> :bn<cr>
" nnoremap <silent> <leader><leader><tab> :bp<cr>
" clear search highlighting
nnoremap <silent> <leader>/ :noh<cr>
" toggle spellcheck
nnoremap <silent> <leader>s :set spell!<cr>
" toggle wrap
nnoremap <silent> <leader>w :set wrap!<cr>
" toggle hardwrap
nnoremap <silent> <leader>W :if &tw == 0 \| se tw=80 \| el \| se tw=0 \| en<cr>
" toggle listchars
nnoremap <silent> <leader>l :set list!<cr>
" toggle trimming of trailing space
let g:notrim = 0
nnoremap <silent> <leader>t :let g:notrim = !g:notrim \| echo 'Trim: ' . !g:notrim<cr>
nnoremap <silent> <leader>T
\ :let g:last_pos = getpos('.')
\ \| let g:last_search = getreg('/')
\ \| %s/\s\+$//ge
\ \| call setpos('.', g:last_pos)
\ \| call setreg('/', g:last_search)
\ <cr>
" toggle clipboard between primary and clipboard
nnoremap <silent> <leader>c
\ :if stridx(&clipboard, 'unnamedplus', 0) == 0
\ \| let &clipboard = substitute(&clipboard, 'unnamedplus', 'unnamed', '')
\ \| echo 'Selection: primary'
\ \| else
\ \| let &clipboard = substitute(&clipboard, 'unnamed', 'unnamedplus', '')
\ \| echo 'Selection: clipboard'
\ \| end
\ <cr>
" toggle tab expansion
nnoremap <silent> <leader>e :setl expandtab!<cr>
" not much more useful than `:e .`
" map <f2> :echo system('pwd')<cr>
" \:echo system('ls -lahF --group-directories-first')<cr>
nnoremap <f2> :!pwd && ls -lahF --group-directories-first<cr>
" nnoremap <leader>d
" git diff
nnoremap <f3> :!git diff --patch-with-stat -M90 --no-ext-diff --color=always HEAD<cr>
" nnoremap <leader>g
" open url in browser (maybe use xdg-open)
" http://stackoverflow.com/questions/8714474
" echo 'awful.tag.viewonly(tags[mouse.screen][2])' | awesome-client
" <cfile> - like `gf`
" <cWORD> - like `W`
" nnoremap <silent> <leader>o :!dwm-start chrome <cWORD><cr><cr>
" nnoremap <silent> <leader>i :!dwm-start chrome --incognito <cWORD><cr><cr>
" nnoremap <silent> <leader>o :!dwm-start dwb <cWORD><cr><cr>
" nnoremap <silent> <leader>i :!dwm-start dwb-incognito <cWORD><cr><cr>
nnoremap <silent> <leader>o :!dwbremote -p $(ps aux \| grep ':[0-9][0-9] dwb$' \| grep -v grep \| awk '{ print $2 }') :tabopen <cWORD><cr><cr>
nnoremap <silent> <leader>i :!dwbremote -p $(ps aux \| grep -- 'dwb.*--temp-profile' \| grep -v grep \| awk '{ print $2 }') :tabopen <cWORD><cr><cr>
"nnoremap <silent> <leader>i :!dwbremote -p $(dwbremote -l \| tail -n 1) :tabopen <cWORD><cr><cr>
"nnoremap <silent> <leader>o :!dwm-start dwb-open <cWORD><cr><cr>
"nnoremap <silent> <leader>i :!dwm-start dwb-incognito-open <cWORD><cr><cr>
" external clipboard support if it wasnt compiled in
" NOTE: `@@` is the same as `getreg("0")`
" set clipboard=
noremap <silent> <leader>p :read !xsel -o -p<cr>
"noremap <silent> <leader>y :WriteCB<cr>
"command! WriteCB exe system("echo -n " . shellescape(@@) . " | xsel -i -p")
noremap <silent> <leader>y
\ :call system("echo -n " . shellescape(@@) . " \| xsel -i -p")<cr>
" noremap <silent> <leader>y :sil! write !xsel -i -p<cr>
" noremap <silent> <leader>y :sil! .,.write !xsel -i -p<cr>
" tmux:
" noremap <silent> <leader>p :read !tmux show-buffer -<cr>
" noremap <silent> <leader>y
" \ :call system("echo -n " . shellescape(@@) . " \| tmux load-buffer -")<cr>
" tmux
" noremap <silent> <leader>p :read !tmux show-buffer<cr>
" noremap <silent> <leader>p :read !tmux save-buffer -<cr>
" noremap <silent> <leader>y :sil! write !tmux load-buffer -<cr>
" put full filename on the yank register
nnoremap <silent> <leader>f :call setreg('*', expand('%:p') . "\n")<cr>
\:echo expand('%:p')<cr>
nnoremap <silent> <leader>e :enew \| :Ex<cr>
nnoremap <silent> <leader>E :bw \| :set bt=<cr>
nnoremap <silent> <leader>h :Hex<cr>
" noremap <leader>p "+p
" noremap <leader>P "*p
" noremap <leader>y "+y
" noremap <leader>Y "*y
" extended regexes
" nnoremap / /\v
" vnoremap / /\v
" :f! = print full path?
" command! F echo expand('%:p')
" 1^G = print full filename
" nnoremap <silent> <c-g> 1<c-g>
" list short paths for buffer names
" http://vim.wikia.com/wiki/Replace_a_builtin_command_using_cabbrev
fu! Ls()
let buf = ''
redir => buf
silent exe 'ls'
redir END
let buf = substitute(buf, '"[^"]\+/\([^/"]\+\)"', '"\1"', 'g')
let buf = substitute(buf, '" \+', '"\t\t', 'g')
echo buf
endfu
cabbrev ls <c-r>=(getcmdtype() == ':' && getcmdpos() == 1 ? 'call Ls()' : 'ls')<cr>
" command! Ls call Ls()
" cabbrev ls <c-r>=(getcmdtype() == ':' && getcmdpos() == 1 ? 'Ls' : 'ls')<cr>
" f1 for full completion list of files. (doesn't work)
" fu! FullCompletion()
" let cmd = getcmdline()
" let path = substitute(cmd, '^\([^ ]\+ \+\)\+\([^ ]\+\)$', '\2', '')
" let out = system('for f in ' . shellescape(path) . '*; do echo -n "$f "; done')
" let out = substitute(out, '[\]\|[[:cntrl:]]', '', 'g')
" echo out
" endfu
" cnoremap <expr> <f1> FullCompletion()
command! ClearUndo let oul = &ul
\ | set ul=-1 | exe "normal a \<BS>\<Esc>"
\ | let &modified = 0 | let &ul = oul | unlet oul
"command! ClearRedo exe "normal a \<Esc>" | undo | let &modified = 0
nnoremap <f4> :e ~/work/node_modules/bcoin/lib/bcoin/
nnoremap <f5> :e ~/work/node_modules/bitcore/lib/
nnoremap <f6> :e ~/work/node_modules/copay/js/
" === commands =================================================================
" mark binary files
autocmd BufReadPre *.bin setl binary
" php is annoying
autocmd BufReadPre *.php setl noeol
" highlight chars over the column limit
autocmd BufWinEnter * match ErrorMsg /\%>80v.\%<83v/
" automatically remove trailing space
" autocmd BufWritePre * if !&bin && !g:notrim | %s/\s\+$//ge | end
autocmd BufWritePre * if !&bin && !g:notrim && index(['gpg', 'enc'], expand('%:e')) < 0
\ | let g:last_pos = getpos('.')
\ | let g:last_search = getreg('/')
\ | %s/\s\+$//ge
\ | call setpos('.', g:last_pos)
\ | call setreg('/', g:last_search)
\ | end
" auto reload vimrc
autocmd BufWritePost .vimrc exe 'au!' | so ~/.vimrc
" highlight JSON
autocmd BufRead,BufNewFile *.json let &ft = 'javascript'
" markdown
autocmd BufRead,BufNewFile *.md let &ft = 'markdown'
" treat hashbang node scripts as javascript
" http://stackoverflow.com/questions/8890668
autocmd BufNewFile,BufRead *
\ if getline(1) == '#!/usr/bin/env node'
\ | set ft=javascript
\ | end
" use tabs in makefiles, gitconfig, and dwm
autocmd FileType make setl noexpandtab
autocmd FileType gitconfig setl noexpandtab
" NOTE: Maybe use ~/ instead of */ at the beginning.
autocmd BufRead,BufNewFile */{.,}{dwm,st,tmux,slock}/*.{c,h} setl noexpandtab
" autocmd BufRead,BufNewFile */xterm/*.{c,h,pl} setl noexpandtab shiftwidth=4 tabstop=4 softtabstop=8
" dont have help in a new window
autocmd BufEnter * if &ft == 'help' | wincmd o | end
" mutt
" autocmd BufRead /tmp/mutt-* set tw=72
" autocmd VimEnter mutt-* set tw=72 wrap nosmartindent
" encryption using openssl/gpg
" http://vim.wikia.com/wiki/Encryption
augroup encrypted
au!
" --- gpg --------------------------------------------------------------------
" NOTE: `:r` outputs to a tmp file, may be insecure, maybe switch
" to '[,'] (UPDATE: NEVERMIND, this also uses tmp files.) See :h autocmd-use
" for the above.
" NOTE: If we use the '[,'] method, we may not have to do normal gg"_dG or
" normal gg"_dd (????)
" NOTE: The remember passphrase method doesn't require the ch=2 line because
" of the inputsecret command.
" NOTE: Need to shellescape() '%:p' - maybe switch to `execute`.
" NOTE: Technically we don't need `set bin` because we use ascii armor (-a)
" with gpg, but we can still put it there for good measure.
" NOTE: Technically we don't need to alter viminfo noswapfile noundofile
" nobackup because we already have those set, but we can leave them there,
" again, for good measure.
" NOTE: The :doautocmd line may be completely pointless. Everything works
" fine without it. Why is it there?
" --- Read ---
autocmd BufReadPre,FileReadPre *.gpg setl viminfo=
autocmd BufReadPre,FileReadPre *.gpg setl noswapfile noundofile nobackup
autocmd BufReadPre,FileReadPre *.gpg setl bin
autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch | set ch=2
" Type passphrase every time:
autocmd BufReadPost,FileReadPost *.gpg normal gg"_dG
autocmd BufReadPost,FileReadPost *.gpg
\ if filereadable(expand('~') . '/.gpg-agent-info') || !empty($GPG_AGENT_INFO)
\ | exe "r !. ~/.gpg-agent-info 2> /dev/null && gpg -q -d '" . expand('%:p') . "' 2> /dev/null"
\ | else
\ | exe "r !stty -echo; gpg --passphrase-fd 0 --batch -q -d '" . expand('%:p') . "' 2> /dev/null; stty echo"
\ | end
"autocmd BufReadPost,FileReadPost *.gpg r !stty -echo; gpg --passphrase-fd 0 --batch -q -d '%:p' 2> /dev/null; stty echo
"autocmd BufReadPost,FileReadPost *.gpg r !gpg -d '%:p' 2> /dev/null
autocmd BufReadPost,FileReadPost *.gpg normal gg"_dd
" Type passphrase every time using prompt:
" autocmd BufReadPost,FileReadPost *.gpg normal gg"_dG
" autocmd BufReadPost,FileReadPost *.gpg let $VIM_GPG_PASSPHRASE = inputsecret('Passphrase: ')
" autocmd BufReadPost,FileReadPost *.gpg r !gpg --passphrase-fd 0 --batch -q -d '%:p' 2> /dev/null <<< "$VIM_GPG_PASSPHRASE"
" "autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --passphrase-fd 3 --batch -q -d /dev/null 2> /dev/null 3<<< "$VIM_GPG_PASSPHRASE"
" autocmd BufReadPost,FileReadPost *.gpg let $VIM_GPG_PASSPHRASE = ''
" autocmd BufReadPost,FileReadPost *.gpg normal gg"_dd
" Remember passphrase:
" autocmd BufReadPre,FileReadPre *.gpg
" \ if !exists('g:gpg_passphrase') || empty(g:gpg_passphrase)
" \ | let g:gpg_passphrase = inputsecret('Passphrase: ')
" \ | end
" autocmd BufReadPost,FileReadPost *.gpg normal gg"_dG
" autocmd BufReadPost,FileReadPost *.gpg let $VIM_GPG_PASSPHRASE = g:gpg_passphrase
" autocmd BufReadPost,FileReadPost *.gpg r !gpg --passphrase-fd 0 --batch -q -d '%:p' 2> /dev/null <<< "$VIM_GPG_PASSPHRASE"
" "autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --passphrase-fd 3 --batch -q -d /dev/null 2> /dev/null 3<<< "$VIM_GPG_PASSPHRASE"
" autocmd BufReadPost,FileReadPost *.gpg let $VIM_GPG_PASSPHRASE = ''
" autocmd BufReadPost,FileReadPost *.gpg normal gg"_dd
autocmd BufReadPost,FileReadPost *.gpg setl nobin
autocmd BufReadPost,FileReadPost *.gpg let &ch = ch_save | unlet ch_save
autocmd BufReadPost,FileReadPost *.gpg execute ':doautocmd BufReadPost ' . expand('%:r')
" --- Write ---
autocmd BufWritePre,FileWritePre *.gpg let g:last_pos = getpos('.')
autocmd BufWritePre,FileWritePre *.gpg '[,']!gpg --default-recipient-self -a -e 2> /dev/null
autocmd BufWritePost,FileWritePost *.gpg silent u
"autocmd BufWritePost,FileWritePost *.gpg if exists(":ClearRedo") | exe 'ClearRedo' | end
"autocmd BufWritePost,FileWritePost *.gpg if exists("*ClearRedo") | call ClearRedo() | end
autocmd BufWritePost,FileWritePost *.gpg call setpos('.', g:last_pos)
" Workaround for whitespace clearing: `Post`, after :undo is done
" Downside: the trim won't actually get saved until the next :w
autocmd BufWritePost,FileWritePost *.gpg if !&bin && !g:notrim
\ | let g:last_pos = getpos('.')
\ | let g:last_search = getreg('/')
\ | %s/\s\+$//ge
\ | call setpos('.', g:last_pos)
\ | call setreg('/', g:last_search)
\ | end
" --- openssl ----------------------------------------------------------------
" --- Read ---
autocmd BufReadPre,FileReadPre *.enc setl viminfo=
autocmd BufReadPre,FileReadPre *.enc setl noswapfile noundofile nobackup
autocmd BufReadPre,FileReadPre *.enc setl bin
" autocmd BufReadPre,FileReadPre *.enc let ch_save = &ch | set ch=2
" Type passphrase every time:
" autocmd BufReadPost,FileReadPost *.enc normal gg"_dG
" autocmd BufReadPost,FileReadPost *.enc r !stty -echo; openssl bf-cbc -d -a -in '%:p' -pass fd:0 2> /dev/null; stty echo
" autocmd BufReadPost,FileReadPost *.enc normal gg"_dd
" Type passphrase every time using built-in prompt:
" autocmd BufReadPost,FileReadPost *.enc normal gg"_dG
" autocmd BufReadPost,FileReadPost *.enc r !openssl bf-cbc -d -a -in '%:p' 2> /dev/null
" autocmd BufReadPost,FileReadPost *.enc normal gg"_dd
" Type passphrase every time using prompt:
" autocmd BufReadPost,FileReadPost *.enc normal gg"_dG
" autocmd BufReadPost,FileReadPost *.enc let $VIM_ENC_PASSPHRASE = inputsecret('Passphrase: ')
" autocmd BufReadPost,FileReadPost *.enc r !openssl bf-cbc -d -a -in '%:p' -pass fd:3 3<<< "$VIM_ENC_PASSPHRASE" 2> /dev/null
" autocmd BufReadPost,FileReadPost *.enc let $VIM_ENC_PASSPHRASE = ''
" autocmd BufReadPost,FileReadPost *.enc normal gg"_dd
" Remember passphrase
" NOTE: Using `b:`, not `g:` because files may have different passwords
autocmd BufReadPre,FileReadPre *.enc
\ if !exists('b:enc_passphrase') || empty(b:enc_passphrase)
\ | let b:enc_passphrase = inputsecret('Passphrase: ')
\ | end
autocmd BufReadPost,FileReadPost *.enc normal gg"_dG
autocmd BufReadPost,FileReadPost *.enc let $VIM_ENC_PASSPHRASE = b:enc_passphrase
autocmd BufReadPost,FileReadPost *.enc r !openssl bf-cbc -d -a -in '%:p' -pass fd:0 2> /dev/null <<< "$VIM_ENC_PASSPHRASE"
" autocmd BufReadPost,FileReadPost *.enc '[,']!openssl bf-cbc -d -a -pass fd:3 2> /dev/null 3<<< "$VIM_ENC_PASSPHRASE"
autocmd BufReadPost,FileReadPost *.enc let $VIM_ENC_PASSPHRASE = ''
autocmd BufReadPost,FileReadPost *.enc normal gg"_dd
autocmd BufReadPost,FileReadPost *.enc setl nobin
" autocmd BufReadPost,FileReadPost *.enc let &ch = ch_save | unlet ch_save
autocmd BufReadPost,FileReadPost *.enc execute ':doautocmd BufReadPost ' . expand('%:r')
" --- Write ---
autocmd BufWritePre,FileWritePre *.enc let g:last_pos = getpos('.')
" Type passphrase every time (NOTE: does not work):
" autocmd BufWritePre,FileWritePre *.enc !openssl bf-cbc -a -salt -in '%:p' -out '%:p~vim' -pass fd:0
" autocmd BufWritePre,FileWritePre *.enc !mv -f '%:p~vim' '%:p'
" Type passphrase every time using prompt:
" autocmd BufWritePre,FileWritePre *.enc let $VIM_ENC_PASSPHRASE = inputsecret('Passphrase: ')
" autocmd BufWritePre,FileWritePre *.enc '[,']!openssl bf-cbc -a -salt -pass fd:3 3<<< "$VIM_ENC_PASSPHRASE"
" autocmd BufWritePre,FileWritePre *.enc let $VIM_ENC_PASSPHRASE = ''
" Remember passphrase:
" Passphrase input not necessarily required here
" unless enc_passphrase got reset somehow:
autocmd BufWritePre,FileWritePre *.enc
\ if !exists('b:enc_passphrase') || empty(b:enc_passphrase)
\ | let b:enc_passphrase = inputsecret('Passphrase: ')
\ | let b:enc_cpassphrase = inputsecret('Confirm Passphrase: ')
\ | if b:enc_passphrase != b:enc_cpassphrase
\ | let b:enc_passphrase = ''
\ | let b:enc_cpassphrase = ''
\ | throw 'Passphrase mismatch.'
\ | end
\ | let b:enc_cpassphrase = ''
\ | end
autocmd BufWritePre,FileWritePre *.enc let $VIM_ENC_PASSPHRASE = b:enc_passphrase
autocmd BufWritePre,FileWritePre *.enc '[,']!openssl bf-cbc -a -salt -pass fd:3 3<<< "$VIM_ENC_PASSPHRASE"
autocmd BufWritePre,FileWritePre *.enc let $VIM_ENC_PASSPHRASE = ''
autocmd BufWritePost,FileWritePost *.enc silent u
"autocmd BufWritePost,FileWritePost *.enc if exists(":ClearRedo") | exe 'ClearRedo' | end
"autocmd BufWritePost,FileWritePost *.gpg if exists("*ClearRedo") | call ClearRedo() | end
autocmd BufWritePost,FileWritePost *.enc call setpos('.', g:last_pos)
" NOTE: This may not be necessary if we used `:w !` instead of `'[,']!`.
" Workaround for whitespace clearing: `Post`, after :undo is done
" Downside: the trim won't actually get saved until the next :w
autocmd BufWritePost,FileWritePost *.enc if !&bin && !g:notrim
\ | let g:last_pos = getpos('.')
\ | let g:last_search = getreg('/')
\ | %s/\s\+$//ge
\ | call setpos('.', g:last_pos)
\ | call setreg('/', g:last_search)
\ | end
augroup END
" --- hex ----------------------------------------------------------------------
command! Hex
\ if exists('b:hex') && b:hex | exe '%!xxd -r' | let b:hex = 0 |
\ el | exe '%!xxd' | let b:hex = 1 | se nomod | en
" --- sudo ---------------------------------------------------------------------
command! -nargs=1 -complete=file Se
\ ene | sil! exe 'r !sudo cat <args>' |
\ 1d | se nomod | f <args> | filet detect
" possibly use: ' . shellescape(expand("%")) . '
command! Sw sil! exe 'w !sudo tee % > /dev/null' | e!
if &term =~ "^linux\\|^cons"
set t_te= t_ti=
au VimLeave * :!clear
end
" === color scheme =============================================================
" colorschemes: /usr/share/vim/vim73/colors
" change darkgrey to ctermfg=brown cterm=bold for solarized
if &t_Co > 2
if &term =~ "^linux\\|^cons\\|^screen"
let &t_Co = 16
end
if &term =~ "^xterm"
" xterm: 8
" xterm-color: 16
" xterm-256color: 256
let &t_Co = 256
end
if &term =~ "^rxvt"
let &t_Co = 88
end
end
set background=light
syntax on
colors default
" cursor line
hi CursorLine term=bold cterm=bold
" color column
hi ColorColumn term=none ctermbg=black
" statusline
hi StatusLine term=reverse,bold cterm=none ctermbg=none ctermfg=lightgrey
hi StatusLineNC term=reverse cterm=none ctermbg=none
" tabs
hi TabLine term=underline ctermbg=black ctermfg=white cterm=none
hi TabLineFill term=reverse ctermbg=white ctermfg=black cterm=standout
hi TabLineSel term=bold ctermbg=darkblue ctermfg=white cterm=none
hi Title term=bold ctermbg=white ctermfg=black cterm=none
" visual selection
hi Visual term=reverse ctermbg=darkblue ctermfg=white cterm=none
" searches and matches
hi clear MatchParen
hi clear Search
hi clear IncSearch
hi MatchParen term=bold cterm=bold
hi Search term=reverse cterm=bold ctermbg=darkblue ctermfg=white
hi link IncSearch Search
" spelling - only show bad spelling
hi clear SpellBad
hi clear SpellCap
hi clear SpellLocal
hi clear SpellRare
hi SpellBad term=standout ctermfg=red cterm=underline
" popup menu
hi Pmenu ctermbg=black ctermfg=white cterm=none
hi PmenuSel ctermbg=darkblue ctermfg=white cterm=bold
hi PmenuSbar ctermbg=black ctermfg=black cterm=none
hi PmenuThumb ctermbg=darkblue ctermfg=darkblue cterm=none
" diff mode
hi DiffAdd term=bold ctermbg=darkblue ctermfg=white cterm=none
hi DiffChange term=bold ctermbg=darkcyan ctermfg=white cterm=none
hi DiffText term=reverse ctermbg=darkcyan ctermfg=white cterm=bold
hi DiffDelete term=bold ctermbg=darkred ctermfg=white cterm=none
" other things
hi LineNr term=underline ctermfg=darkgrey
hi ModeMsg term=bold cterm=bold
hi ErrorMsg term=standout ctermfg=white ctermbg=red
hi WarningMsg term=standout ctermfg=red
hi SpecialKey term=bold ctermfg=blue
hi NonText term=bold ctermfg=blue
hi Directory term=bold ctermfg=blue
hi MoreMsg term=bold ctermfg=darkgreen
hi Question term=standout ctermfg=darkgreen
hi WildMenu term=standout ctermfg=white ctermbg=darkblue
hi SignColumn term=standout ctermfg=darkblue ctermbg=grey
hi Conceal ctermfg=lightgrey ctermbg=darkgrey
hi CursorColumn term=reverse ctermbg=grey
hi Folded term=standout cterm=bold ctermfg=blue ctermbg=none
hi FoldColumn term=standout cterm=bold ctermfg=blue ctermbg=none
hi VertSplit term=reverse cterm=reverse
hi VisualNOS term=underline,bold cterm=bold,underline
" syntax - possibly switch Statement/(Cursor) and Type/Identifier
hi clear Normal
" hi Normal ctermfg=lightgrey
hi Comment term=bold ctermfg=darkmagenta " darkgrey darkcyan
hi Constant term=underline ctermfg=darkred
hi Special term=bold ctermfg=magenta " DARK
hi Identifier term=underline ctermfg=darkcyan
hi Statement term=bold ctermfg=blue
hi PreProc term=underline ctermfg=magenta " DARK
hi Type term=underline ctermfg=darkcyan
hi Underlined term=underline cterm=underline ctermfg=magenta " DARK
hi Ignore ctermfg=grey
hi Error term=reverse ctermfg=white ctermbg=red
hi Todo term=standout ctermfg=white ctermbg=red
" html
hi link htmlH1 Normal
hi link htmlH2 Normal
hi link htmlH3 Normal
hi link htmlH4 Normal
hi link htmlH5 Normal
hi link htmlH6 Normal
hi link htmlTitle Normal
" javascript fixes
hi link javaScriptValue Constant
hi link javaScriptRegexpString Special " Type Label
if has('gui_running')
set background=dark
colorscheme default
hi Normal gui=none guifg=lightgrey guibg=#111111
hi StatusLine gui=none guibg=#111111 guifg=lightgrey
hi StatusLineNC gui=none guibg=#111111
hi Visual guibg=darkblue guifg=white gui=none
end
" cursor color
if &term =~ "xterm\\|rxvt" && 0
sil !echo -ne "\033]12;lightblue\007" " darkcyan
let &t_EI .= "\<Esc>]12;lightblue\x7"
let &t_SI .= "\<Esc>]12;white\x7"
if &term =~ "^xterm"
autocmd VimLeave * sil !echo -ne "\033]112\007"
elseif &term =~ "^rxvt"
" urxvt doesnt support OSC 112
autocmd VimLeave * sil !echo -ne "\033]12;white\007"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment