Last active
August 2, 2024 11:30
-
-
Save chjj/1257074 to your computer and use it in GitHub Desktop.
vimrc, so i don't lose it
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| " | |
| " ~/.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