Dotfiles, utilities, and other apparatus.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

786 lines
25 KiB

" this is my .vimrc; part of https://code.p1k3.com/gitea/brennen/bpb-kit
"
" to use:
"
" cp [this file] ~/.vimrc
" mkdir -p ~/.vim/bundle
" git clone https://github.com/VundleVim/Vundle.git ~/.vim/bundle/Vundle.vim
" vim +PluginInstall
"
" if there are funny-looking folded sections below and you're confused,
" hitting zR will unfold them all, while zr will unfold the one your
" cursor is on. this note is as much for my benefit as yours.
"
" some of this config is very specific to my preferences. there are
" keybindings for filters i use regularly, things that automatically happen
" when i open certain files, and shortcuts bound to the F-keys. you might
" find good examples here, but you may not want the behavior. don't say you
" weren't warned.
"
" items particularly likely to be personal preference are marked with the
" string CUSTOMIZE and a note.
"
" -- bpb | https://p1k3.com | https://code.p1k3.com
set nocompatible
" use comma for the leader key - this is used as a prefix for
" a bunch of bindings, mostly in the keybindings section. it's up
" here for things that might require it before plugins are invoked,
" such as vimwiki mappings.
let mapleader = ","
" vundle setup & vundle-managed plugins {{{
filetype off
set rtp+=~/.vim/bundle/Vundle.vim/
call vundle#rc()
" let Vundle manage Vundle - required:
Plugin 'VundleVim/Vundle.vim'
" really nice file tree - see keybindings section below for some tweaks:
Plugin 'scrooloose/nerdtree'
Plugin 'Xuyuanp/nerdtree-git-plugin'
" fancy start screen with recent files & bookmarks
" CUSTOMIZE: you'll probably want different bookmarks
" Plugin 'mhinz/vim-startify'
" let g:startify_bookmarks = [ {'v': '~/.vimrc'}, '~/.zshrc', '~/notes/', '~/p1k3' ]
" Vim Outliner of Markups - see :help voom - no idea yet if this is any good
Plugin 'VOoM'
" align text vertically on a string:
Plugin 'Align'
" wrap common version control commands:
Plugin 'vcscommand.vim'
Plugin 'tpope/vim-fugitive'
" visual marking of changes in working tree:
" Plugin 'git://github.com/airblade/vim-gitgutter.git'
" match lots of things - this repo seems defunct; not sure who is
" currently maintaining this one:
" Plugin 'edsono/vim-matchit'
" commands for surrounding chars:
Plugin 'tpope/vim-repeat' " used by vim-surround
Plugin 'tpope/vim-surround'
" readline-style keybindings in command line / insert:
Plugin 'tpope/vim-rsi'
" a yank/paste ring - hit ctrl-p after pasting:
" let g:yankring_history_dir = '$HOME/.vim'
" Plugin 'vim-scripts/YankRing.vim'
" a bunch of colorschemes + a gui menu listing them:
Plugin 'flazz/vim-colorschemes'
Plugin 'altercation/vim-colors-solarized'
Plugin 'chriskempson/vim-tomorrow-theme.git'
Plugin 'desert-warm-256'
Plugin 'ColorSchemeMenuMaker'
" beyondgrep.com:
Plugin 'mileszs/ack.vim'
" navigate & control tmux windows + vim buffers - see also .tmux.conf
" Plugin 'christoomey/vim-tmux-navigator'
" Plugin 'benmills/vimux'
" find files / buffers / etc.:
" Plugin 'L9' " - required by FuzzyFinder
" Plugin 'FuzzyFinder'
Plugin 'Shougo/unite.vim'
" fzf - fuzzy finding
Plugin 'junegunn/fzf'
" ASCII art
Plugin 'DrawIt'
" most recently used files - my fork allows for a top-level menu
let g:MRU_Menu_Path = '&Recent\ Files'
let g:MRU_Max_Menu_Entries = 30
let g:MRU_Max_Submenu_Entries = 30
Plugin 'https://code.p1k3.com/gitea/brennen/mru.git'
" database stuffs
" Plugin 'dbext.vim'
" do stuff with tables - used by some vim-markdown features
Plugin 'godlygeek/tabular'
" filetypes / modes / language support:
Plugin 'fatih/vim-go' " golang
" Plugin 'brennen/vim-markdown'
" the above a fork of plasticboy's version w/tweaks for variants i use
" you probably want:
Plugin 'plasticboy/vim-markdown'
" graceful syntax checking for many languages:
" - apt-get install shellcheck for shell linting
Plugin 'scrooloose/syntastic'
let g:syntastic_check_on_open = 1
let g:syntastic_php_checkers = ['php']
let g:syntastic_enable_perl_checker = 1
let g:syntastic_perl_lib_path = ['./lib', './lib/auto']
let g:syntastic_perl_checkers = ['perl', 'podchecker']
amenu Syntax.Toggle\ Syntastic :SyntasticToggleMode<CR>
" let g:syntastic_python_checkers = ['pylint']
" add option to show a diff when there's a swapfile on disk:
" Plugin 'chrisbra/Recover.vim'
" CUSTOMIZE: fancy status line; laststatus can be set so it always shows up
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" set laststatus=2
" let g:airline#extensions#tabline#enabled = 1
" let g:airline_theme = 'base16_solarized'
if has("gui_running")
let g:airline_theme = 'base16_ashes'
endif
" nginx config file highlighting
Plugin 'nginx.vim'
" GUI font size - use <Leader><Leader>+ or - to adjust:
Plugin 'drmikehenry/vim-fontsize'
Plugin 'jceb/vim-orgmode'
Plugin 'tpope/vim-speeddating'
" a calendar - used in conjunction with vimwiki diaries
let g:calendar_keys = {
\ 'goto_next_month': '<C-Right>',
\ 'goto_prev_month': '<C-Left>',
\ 'goto_next_year': '<C-Up>',
\ 'goto_prev_year': '<C-Down>'
\ }
Plugin 'mattn/calendar-vim'
" CUSTOMIZE: vimwikis - for notes, daily logs, etc. {{{
" main personal wiki
let wiki = {}
let wiki.path = '~/notes/vimwiki/'
let wiki.path_html = '~/notes/html/'
let wiki.auto_tags = 1
" do syntax highlight in preformatted blocks:
let wiki.nested_syntaxes = {
\ 'python': 'python',
\ 'ruby': 'ruby',
\ 'perl': 'perl',
\ 'sh': 'sh'
\ }
" public p1k3 topics / tags
let wiki_p1k3 = {}
let wiki_p1k3.path = '~/p1k3/topics'
let wiki_p1k3.syntax = 'markdown'
let wiki_p1k3.ext = '.md'
" there can be many of these:
let g:vimwiki_list = [wiki, wiki_p1k3]
" don't make temporary wikis based on file extensions in the list
let g:vimwiki_global_ext = 0
let g:vimwiki_folding = 'expr'
" let g:vimwiki_folding = 'syntax'
" let g:vimwiki_folding = 'list'
" links concealing, etc.
" let g:vimwiki_conceallevel = 1
" don't obscure URLs in links
" let g:vimwiki_url_maxsave = 0
" make links clickable and such
let g:vimwiki_use_mouse = 1
" use colors in header highlighting
let g:vimwiki_hl_headers = 1
" map <Leader> b to go back - the plugin will check for this
" mapping and not associate it with regular backspace:
" NOTE: <C-BS> doesn't work here; I tried
nmap <Leader>b <Plug>VimwikiGoBackLink
" selectively activate foldcolumn:
" au FileType vimwiki setlocal foldcolumn=3
" au FileType vimwiki :set tw=80
Plugin 'vimwiki/vimwiki'
" regenerate vimwiki diary on file load - this doesn't seem to work,
" maybe because overrides something in vimwiki (?) but seems like it
" probably could:
" au BufReadPost,BufNewFile diary.wiki :VimwikiDiaryGenerateLinks
" set up linewrapping so that long lines more or less work
au BufRead,BufNewFile *.wiki call BPB_LonglineMode()
" }}}
" snippets
" Plugin 'SirVer/ultisnips'
" Plugin 'honza/vim-snippets'
" " trigger configuration
" " don't use <tab> if you use https://github.com/Valloric/YouCompleteMe
" let g:UltiSnipsExpandTrigger="<tab>"
" let g:UltiSnipsJumpForwardTrigger="<c-b>"
" let g:UltiSnipsJumpBackwardTrigger="<c-z>"
" " if you want :UltiSnipsEdit to split your window.
" let g:UltiSnipsEditSplit="vertical"
filetype plugin on
filetype indent on
" }}}
" misc UI {{{
" set the window title (usually to filename plus some metadata)
set title
" pretty colors
set t_Co=256
syntax on
" pretty characters
set encoding=utf-8
" do not beep or flash at me
" vb is needed to stop beep
" t_vb sets visual bell action, we're nulling it out here
" note also that this may need to be repeated in .gvimrc
set visualbell
set t_vb=
" enable mouse for (a)ll, (n)ormal, (v)isual, (i)nsert, or (c)ommand line
" mode - seems to work in most terminals
set mouse=a
" render a useful popup menu for right-click instead of extending
" selection (good for spellchecking, etc.):
set mousemodel=popup_setpos
" let me delete stuff like crazy in insert mode
set backspace=indent,eol,start
" see :help virtualedit - you probably don't want this
" set virtualedit=onemore
" display commands as-typed + current position in file
set showcmd
set ruler
" display a visual menu for tab-completion of files:
set wildmenu
" add git status to statusline; otherwise emulate standard line with ruler
" -- mostly supplanted for the moment by vim-airline
set statusline=%<%{fugitive#statusline()}\ %f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
" keep lots of command-line history
set history=10000
" search:
set incsearch
set ignorecase
set smartcase
set wrapscan
" for gvim. no toolbar, otherwise these are the defaults:
set guioptions=aegimrLt
" use + register (x window clipboard) as unnamed register (copy to system
" clipboard on yy, for example):
set clipboard=unnamedplus,autoselect
" include '-' in words. counts for both movement commands and autocomplete.
" to test, try moving across and autocompleting for some-words-bunched-together
" this is an experiment - mainly i want to use inline dashes in identifiers
" in markdown documents, and so forth
set iskeyword+=-
" }}}
" file saving/loading/swap/backups {{{
" read (unchanged) buffers when they're modified on filesystem.
" this saves me a lot of time and agony because i switch git branches
" constantly, but it might not be what you want.
set autoread
" disable swapfiles (you may not want this):
set noswapfile
" }}}
" CUSTOMIZE: whitespace {{{
" display tabs and trailing spaces:
set listchars=tab:⇾\ ,trail
set list
" display tab characters as 8 spaces, indent 2 spaces,
" always use spaces instead of tabs:
set tabstop=8
set shiftwidth=2
set softtabstop=2
set expandtab
set autoindent
" set smarttab
" set smartindent
" for c code, no tab expansion, turn off softtabstop
au FileType c setlocal noexpandtab
au FileType c setlocal shiftwidth=8
au FileType c setlocal softtabstop=0
" turn off tab expansion for Makefiles
au FileType make setlocal noexpandtab
" wrap entire words in markdown files
" http://stackoverflow.com/questions/19624105/how-can-i-make-vim-break-lines-only-on-whitespace
au FileType markdown setlocal wrap linebreak breakat&vim
" }}}
" misc. autocommands {{{
" to get a list of current autocommands:
" http://vim.wikia.com/wiki/Capture_ex_command_output
" :redir @a
" :autocmd
" :redir END
" "ap
" assume *.t files are PHP - i was doing this to override the assumption
" that they're perl
" au BufRead,BufNewFile *.t set filetype=php
" retain view/folds on a specific file:
" au BufWinLeave notes.txt mkview
" au BufWinEnter notes.txt silent loadview
au BufReadPost,BufNewFile *.md set filetype=markdown
" CUSTOMIZE: this invokes a function for doing some custom filetype
" overrides, like treating blog entries as markdown. it is mostly
" for places where i couldn't figure out an autocmd, or needed something
" more complex than the pattern matching offered by au
"
" at present, this fails for files named `index`, probably because of
" a fugitive bug: https://github.com/tpope/vim-fugitive/issues/834
au BufReadPost,BufNewFile * call BPB_FiletypeOverrides()
au BufNewFile * call BPB_NewFileOverrides()
" TODO: make a colorscheme logger here - it'd be nice to know all the
" schemes i ever use for later reference:
" au ColorScheme * call BPB_ColorSchemeOverrides()
" }}}
" keybindings {{{
" CUSTOMIZE: my keybinding habits may be idiosyncratic
" aside from function keys, i try not to stomp on the main keybinding
" 'namespace' too much, with the exception of replacing K with something
" useful.
" a handful of functions are called here, all with a prefix of BPB_ -
" they can be found in the "functions" section below
" many things here have menu entries under 'Cheatsheet', as a cheatsheet for
" all the stuff i've defined. these can also be accessed with :emenu in
" terminal vim.
" i use the F-keys a _lot_. this is what makes NERDTree usable.
" F2 toggles the nerdtree file browser pane
map <F2> :NERDTreeToggle<CR>
imap <F2> <Esc>:NERDTreeToggle<CR>
650amenu Cheatsheet.NERDTree<Tab>F2 <F2>
" F3 finds the current file in nerdtree
map <F3> :NERDTreeFind<CR>
amenu Cheatsheet.NERDTreeFind<Tab>F3 <F3>
" F4 toggles line numbers
" map <F4> :set invnumber<CR>
" imap <F4> <Esc>:set invnumber<CR>
" this version cycles through a couple versions of relative and absolute
" line numbers:
map <F4> :call BPB_CycleLineNumbers()<CR>
imap <F4> <Esc>:call BPB_CycleLineNumbers()<CR>
amenu Cheatsheet.Toggle\ Line\ Numbers<Tab>F4 <F4>
" F5 saves everything
map <F5> :wall<CR>
imap <F5> <Esc><F5>
amenu Cheatsheet.Write\ All<Tab>F5 <F5>
" F6 brings up a recently-used file list using MRU
map <F6> :MRU<CR>
imap <F6> <Esc><F6>
amenu Cheatsheet.Most\ Recently\ Used<Tab>F6 <F6>
" F7 opens ~/.vimrc (in existing tab if open, new otherwise)
" see http://learnvimscriptthehardway.stevelosh.com/chapters/07.html
map <F7> :call BPB_TabDrop($MYVIMRC)<CR>
imap <F7> <Esc><F7>
amenu Cheatsheet.Open\ \.vimrc<Tab>F7 <F7>
" F8 inserts a datestamp (eight rhymes with date)
" (used to open the options window; use :options for that)
" map <F8> :r! date -Is<CR> " iso-8601
map <F8> :r! date -Is<CR>kJ
imap <F8> <Esc><F8>
amenu Cheatsheet.Insert\ Datestamp<Tab>F8 <F8>
" F9 toggles search highlighting and some other noise
map <F9> :call BPB_Crosshairs()<CR>
imap <F9> <Esc><F9>
amenu Cheatsheet.Crosshairs<Tab>F9 <F9>
" F10 starts a git commit for recent changes
map <F10> :Gcommit -av<CR>
amenu Cheatsheet.Gcommit<Tab>F10 <F10>
" F11 i'm leaving unbound because of fullscreen shortcuts in various
" terminals and window managers
" in normal or insert mode, <F12> copies all in buffer
" in visual/select modes, it just yanks the selected bit
nmap <F12> :%y+<CR>
imap <F12> <Esc><F12>
vmap <F12> y+
amenu Cheatsheet.Copy\ All<Tab>F12 <F12>
" add a menu separator
menu Cheatsheet.-misc- :
" split lines under the cursor (modeled on, maybe, emacs?)
map K i<CR><Esc>g;
amenu Cheatsheet.Split\ Line<Tab>K K
" get a datestamp for a p1k3 entry
nmap <Leader>tD :call BPB_Datestamp()<CR>
amenu Cheatsheet.p1k3\ Datestamp\ (Uppercase)<Tab>,tD <Leader>tD
" lowercased date for a p1k3 entry (ridiculous)
nmap <Leader>td :call BPB_Datestamp()<CR>0v$gu
amenu Cheatsheet.p1k3\ Datestamp\ (Lowercase)<Tab>,td <Leader>td
" CUSTOMIZE: randomize certain text decorations - silly
nmap <Leader>D :call BPB_RunFilter("filter-decorate")<CR>
amenu Cheatsheet.Randomize\ Decorations<Tab>,D <Leader>D
nmap <Leader>d i<p class="centerpiece"> <Esc>:r !fragment-bullet<CR>kJA </p><Esc>
amenu Cheatsheet.Insert\ Decoration<Tab>,d <Leader>d
" i didn't wind up using this much, and it potentially messes
" with vimwiki mappings:
" nmap <Leader>w :call BPB_CommandOutputInNewWindow("dict <cword>"))<CR>
" pull up the last hundred git commits in a scratch buffer
" nmap <Leader>l :vnew<CR>:set buftype=nofile<CR>:set bufhidden=hide<CR>:setlocal noswapfile<CR>:r !git log -100<CR>:set ft=git<CR>gg<C-w>r<C-w>l
nmap <Leader>l :Glog<CR>:copen<CR>
amenu Cheatsheet.Git\ Log<Tab>,l <Leader>l
nmap <leader>m :make<CR>
amenu Cheatsheet.Make<Tab>,m <Leader>m
" requires git-do, from bpb-kit, to execute make in root of current git repo
nmap <leader>M :!git do make<CR>
amenu Cheatsheet.Make\ (git\ root)<Tab>,M <Leader>M
" jump to next, previous errors
nmap <Leader>n :cnext<CR>
amenu Cheatsheet.Next\ Error<Tab>,n <Leader>n
nmap <Leader>p :cprev<CR>
amenu Cheatsheet.Prev\ Error<Tab>,p <Leader>p
" generate a password-like string with apg
nmap <Leader>pw :r !apg -a 0 -m 20 -n 1<CR>
amenu Cheatsheet.APG<Tab>,pw <Leader>pw
" reformat a paragraph
nmap <Leader>q gqip
amenu Cheatsheet.Reformat\ Para<Tab>,q <Leader>q
" Q mapping (it usually enters ex mode) based on this mail from bram:
" https://groups.google.com/forum/#!search/vim/vim_use/iXH_Zxj8iBA/H7YDtbACBAAJ
map Q gq
" CUSTOMIZE: these are simple filter scripts to preprocess some
" shell commands in HTML or Markdown files - see scripts for details
nmap <Leader>r :call BPB_RunFilter("filter-exec-raw")<CR>:call BPB_RunFilter("filter-exec")<CR>:call BPB_RunFilter("filter-exec-stdin")<CR>
amenu Cheatsheet.Run\ Filters<Tab>,r <Leader>r
" delete trailing whitespace, file-wide
nmap <Leader>s :%s/\s\+$//e<CR>
amenu Cheatsheet.Zap\ Trailing\ Space<Tab>,s <Leader>s
" tab navigation somewhat like firefox
" http://vim.wikia.com/wiki/Alternative_tab_navigation
nmap <C-S-Tab> :tabprevious<CR>
nmap <C-Tab> :tabnext<CR>
map <C-S-Tab> :tabprevious<CR>
map <C-Tab> :tabnext<CR>
imap <C-S-Tab> <Esc>:tabprevious<CR>i
imap <C-Tab> <Esc>:tabnext<CR>i
" new tab:
nmap <Leader>tn :tabnew<CR>
amenu Cheatsheet.New\ Tab<Tab>,tn <Leader>tn
" trigger unite.vim
map <Leader>u :Unite<CR>
" split window navigation (ctrl-j/k, alt-arrows)
map <C-J> <C-W>j<C-W>_
map <M-Down> <C-W>j
map <C-K> <C-W>k<C-W>_
map <M-Up> <C-W>k
map <M-Right> <C-W>l
map <M-Left> <C-W>h
" search the current vimwiki - fails if not in a vimwiki, which i should
" really do something about
map <Leader>w/ :VimwikiSearch
" check php syntax - replaced by using Syntastic
" noremap <Leader>c :echom system('php -l ' . bufname('%'))<CR>
" }}}
" functions {{{
" run the file through a custom filter, leaving the cursor at its original
" location in the file (or close) - there might be a better way to do this,
" but i don't know what it is
function! BPB_RunFilter(filter)
let l:currentline = line('.')
exe ":%!" . a:filter
exe ":" . l:currentline
endfunction
" do some normal-mode commands and return the cursor to its previous location
function! BPB_ExecNormalAndReturnCursor(commands)
let l:currentline = line('.')
" see http://learnvimscriptthehardway.stevelosh.com/chapters/30.html
exe "normal! " . a:commands
exe ":" . l:currentline
endfunction
" set custom filetypes for some things - invoked by an autocommand above
function! BPB_FiletypeOverrides()
" make sure NERDTree windows don't get messed up
if bufname("%") =~ "NERD_tree"
return
endif
" echom 'testing for p1k3 match'
" using expand('%:p') instead of bufname("%") for full path, per:
" http://vim.wikia.com/wiki/Get_the_name_of_the_current_file
" the initial slash in the regex seems to be necessary to make \v work
if expand('%:p') =~ "\\vp1k3\/archives.*([0-9]|[a-z])+$"
" echom 'p1k3 match - setting filetype to markdown'
set filetype=markdown
endif
endfunction
" if editing a new p1k3 entry, auto-populate with a datestamp
function! BPB_NewFileOverrides()
if expand('%:p') =~ "\\vp1k3\/archives.*([0-9]|[a-z])+$"
call BPB_DatestampHTML()
endif
endfunction
function! BPB_DatestampHTML()
r !fragment-entry
-7
delete
endfunction
" spit out a date for today, using ~/bin/today, on the current line
function! BPB_Datestamp()
" . is current line, -1 is 1 line above that, r would otherwise read
" the output onto the line below the cursor
.-1r !today
endfunction
" spit out a current timestamp
function! BPB_Timestamp()
.-1r !rightnow
endfunction
function! BPB_ColorSchemeOverrides()
endfunction
" make things more amenable to editing long soft-wrapped lines
" mostly an attempt to make vimwiki a bit more ergonomic, this
" version adapted from:
" http://www.baryudin.com/blog/vim-line-wrapping-and-word-boundary.html
function! BPB_LonglineMode()
setlocal wrap linebreak
set virtualedit=
setlocal display+=lastline
noremap <buffer> <silent> <Up> gk
noremap <buffer> <silent> k gk
noremap <buffer> <silent> <Down> gj
noremap <buffer> <silent> j gj
noremap <buffer> <silent> <Home> g<Home>
noremap <buffer> <silent> <End> g<End>
inoremap <buffer> <silent> <Up> <C-o>gk
inoremap <buffer> <silent> <Down> <C-o>gj
inoremap <buffer> <silent> <Home> <C-o>g<Home>
inoremap <buffer> <silent> <End> <C-o>g<End>
endfunction
" add some display sugar that helps highlight cursor, searches, and
" textwidth. good for fiddling with alignment, reflowing text, etc.
function! BPB_Crosshairs()
set invhlsearch
set invcursorcolumn
set invcursorline
" toggle a colorcolumn - will get weird if it's set outside this function
if &colorcolumn == "+1"
set colorcolumn=0
else
" i think this is relative to textwidth
set colorcolumn=+1
endif
endfunction
" cycle between no, absolute, and relative line numbers
function! BPB_CycleLineNumbers()
if (&number)
set nonumber
return
endif
if (&relativenumber)
set number norelativenumber
else
set number relativenumber
endif
endfunction
" this is pretty much horked from:
" http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
function! BPB_CommandOutputInNewWindow(cmdline)
echo a:cmdline
let expanded_cmdline = a:cmdline
for part in split(a:cmdline, ' ')
if part[0] =~ '\v[%#<]'
let expanded_part = fnameescape(expand(part))
let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
endif
endfor
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1, 'Command: ' . a:cmdline)
call setline(2, 'Expanded: ' . expanded_cmdline)
" display underline with = to length of previous line (pretty clever):
call setline(3, substitute(getline(2), '.', '=', 'g'))
execute '$read !' . expanded_cmdline
setlocal nomodifiable
" enable folding with a column:
setlocal foldenable
setlocal foldcolumn=3
1
endfunction
" tab drop (edit in existing or new tab) a file's real path, in case it is a
" symlink - useful for, frex, symlinked .vimrc. does wildcard expansion on
" the path. as usual, there are probably better ways to do all of this.
function! BPB_TabDrop(path)
let realpath = system('readlink -fn ' . shellescape(expand(a:path)))
echom realpath
execute 'tab drop ' . realpath
endfunction
" try to run timeslice for current path
function! BPB_TimesliceForFile()
let realpath = system('readlink -fn ' . shellescape(expand('%')))
call BPB_CommandOutputInNewWindow('timeslice -f ' . realpath)
endfunction
amenu Cheatsheet.Timeslice<Tab>:call\ BPB_TimesliceForFile() :call BPB_TimesliceForFile()<CR>
" get a list of key bindings, along with where they were defined, and
" open it in a tab. this variant of redir and map seen at:
" https://stackoverflow.com/questions/7642746/is-there-any-way-to-view-the-currently-mapped-keys-in-vim#7642762
function! BPB_ListBindings()
redir! > ~/vim_keys.txt
silent verbose map
redir END
call BPB_TabDrop("~/vim_keys.txt")
endfunction
amenu Cheatsheet.List\ Keys<Tab>:call\ BPB_ListBindings() :call BPB_ListBindings()<CR>
" }}}
" colors {{{
" CUSTOMIZE: you are gonna want some other colors i bet - i have used
" these all at one time or another and liked them for various reasons
" colorscheme brookstream
colorscheme mustang
" colorscheme dark-ruby
" colorscheme Tomorrow-Night-Bright
" colorscheme pyte
" colorscheme wargrey
" colorscheme hybrid
" colorscheme icansee
" colorscheme candycode
" colorscheme peppers
" }}}
" folding {{{
" turn off folding by default - i constantly open some file and have to
" expand folds to see what's going on; this is easy to get back with zi
set nofoldenable
" use {{{ and }}} to denote a folded section (these can be adjusted by
" setting foldmarker, but i'm sticking with the vim defaults):
set foldmethod=marker
" for custom foldline colors:
" highlight Folded guibg=grey guifg=blue
highlight FoldColumn ctermbg=darkgrey ctermfg=white guibg=darkgrey guifg=white
" forked from: http://dhruvasagar.com/2013/03/28/vim-better-foldtext
function! BPB_NeatFoldText()
let line = ' ' . substitute(getline(v:foldstart), '^\s*"\?\s*\|\s*"\?\s*{{' . '{\d*\s*', '', 'g') . ' '
let lines_count = v:foldend - v:foldstart + 1
let lines_count_text = '| ' . printf("%10s", lines_count . ' lines') . ' |'
let foldchar = matchstr(&fillchars, 'fold:\zs.')
let foldtextstart = strpart('+' . repeat(foldchar, v:foldlevel*2) . line, 0, (winwidth(0)*2)/3)
let foldtextend = lines_count_text . repeat(foldchar, 8)
let foldtextlength = strlen(substitute(foldtextstart . foldtextend, '.', 'x', 'g')) + &foldcolumn
return foldtextstart . repeat(foldchar, winwidth(0)-foldtextlength) . foldtextend
endfunction
set foldtext=BPB_NeatFoldText()
" }}}
" vim:foldmethod=marker:foldlevel=0