" vim: set foldmethod=marker foldlevel=1 nomodeline: " ================================================================================ " .init.vim / .vimrc of Marty Oehme {{{ " ================================================================================ " " - stolen from many different sources including " Steve Losh " Junegunn Choi " Tim Pope " this config does not set nocompatible - neovim does this automatically " this config does not set filetype plugin - vim-sensible does this " }}} " PLUGIN INSTALLATION - handled by VIM-PLUG {{{ " ================================================================================ " " automatically install vim-plug if it does not exist " Note: this installs it in the neovim folder, not the vim folder if empty(glob('~/.local/share/nvim/site/autoload/plug.vim')) silent !curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall --sync | source academia_fzf.vim | q endif " automatically install any missing plugins autocmd VimEnter * \ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) \| PlugInstall --sync | q \| endif " " set truecolor (neovim) set termguicolors " sets tabs to be 2 characters, expanded into spaces, but still removable with " one press of backspace. " great explanation: http://vimcasts.org/transcripts/2/en/ set tabstop=2 set shiftwidth=2 set softtabstop=2 set expandtab " set cursor line highlighting, esp useful when using with bracket " highlighting and you don't know which side of the brace the cursor is on set cursorline " shows linenumbers relative to the one you are on, for easy movement and " dNUMBERd deletions set number relativenumber " keeps an undofile next to files so that you can even undo if vim is closed " in between set undofile " ignores case by default but will use case when search is specifically not " all lowercased set ignorecase set smartcase " whenever vim loses focus, save au FocusLost * :wa " disables showing us the current mode in the command line since airline takes " care of it set noshowmode " highlight everything that goes over 80 columns highlight ColorColumn ctermbg=magenta call matchadd('ColorColumn', '\%81v', 100) " set our leader key to space since with hjkl, space is largely useless let mapleader = "\" " maps the leader for buffer local mappings (e.g. vim-waikiki for files under " the root dir to the same key -- might lead to incompatibilities, will have " to test) let maplocalleader = "\" " set jk to escape, in case capslock is not mapped to escape on the system inoremap jk " remove search highlights by pressing space+/ - the key for searching the " first place nnoremap / :noh " quickly edit vimrc with leader+V nnoremap V :vsp academia_fzf.vim " automatically source the vimrc file whenever it is saved (causes slowdown " when done in MANY successions) " au BufWritePost init.vim so ~/.config/nvim/init.vim " source vimrc with keystroke combination nnoremap VV :source academia_fzf.vim " 'open new buffer' with leader-t (opens new buffer and switches to it) " open actual new tab with leader-T nnoremap t :vsp . nnoremap T :tabedit . " stronger versions of left,right - move all the way nnoremap H ^ nnoremap L $ " }}} " CUSTOMIZATION {{{ " defines plugin directory " Install plugins from vim with :PlugInstall silent! if plug#begin('~/.local/share/nvim/plugged') Plug 'christoomey/vim-tmux-navigator' " automatically switch between relative and absolute numbers as buffers move " into / out of focus (requires number & relativenumber to be set) Plug 'jeffkreeftmeijer/vim-numbertoggle' Plug 'rakr/vim-one' Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } call plug#end() endif " FZF Fuzzy Finding " set some fzf defaults let g:fzf_layout = { 'up': '~40%' } let g:fzf_colors = \ { 'fg': ['fg', 'Normal'], \ 'bg': ['bg', 'Normal'], \ 'hl': ['fg', 'Comment'], \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], \ 'hl+': ['fg', 'Statement'], \ 'info': ['fg', 'PreProc'], \ 'border': ['fg', 'Ignore'], \ 'prompt': ['fg', 'Conditional'], \ 'pointer': ['fg', 'Exception'], \ 'marker': ['fg', 'Keyword'], \ 'spinner': ['fg', 'Label'], \ 'header': ['fg', 'Comment'] } let g:fzf_action = { \ 'ctrl-t': 'tab split', \ 'ctrl-x': 'split', \ 'ctrl-v': 'vsplit' } " set up fzf-bibtex let g:fzf_bibtex_cache = '~/.cache/' let g:fzf_bibtex_sources = 'academia.bib' " prepare bibtex_ls function to look for bib files in cwd/parent/subdirs, " attach the standard bibtex source file " return the command with standard cache directory filled function! s:bibtex_ls(...) let bibfiles = ( \ globpath('.', '*.bib', v:true, v:true) + \ globpath('..', '*.bib', v:true, v:true) + \ globpath('*/', '*.bib', v:true, v:true) \ ) let bibfiles = join(bibfiles, ' ') let source_cmd = 'bibtex-ls -cache ' . g:fzf_bibtex_cache . ' ' .bibfiles . ' ' . g:fzf_bibtex_sources return source_cmd endfunction " insert citation from normal mode at cursor (with brackets) function! s:bibtex_cite_sink(lines) let r=system("bibtex-cite ", a:lines) execute ':normal! i[' . r . ']' endfunction command! -bang -nargs=* CiteRef call fzf#run(fzf#wrap({ \ 'source': bibtex_ls(), \ 'sink*': function('bibtex_cite_sink'), \ 'up': '25%', \ 'options': '--ansi --multi --prompt "Cite> "' \ })) " insert citation from insert mode at cursor (no brackets inserted) function! s:bibtex_cite_sink_insert(lines) let r=system("bibtex-cite ", a:lines) execute ':normal! i' . r call feedkeys('a', 'n') endfunction " insert markdown formatted reference function! s:bibtex_markdown_sink(lines) let r=system("bibtex-markdown -cache " . g:fzf_bibtex_cache . ' ' . g:fzf_bibtex_sources, a:lines) echo join(a:lines, '; ') execute ':normal! i' . r endfunction command! -bang -nargs=* CiteMarkdown call fzf#run(fzf#wrap({ \ 'source': bibtex_ls(), \ 'sink*': function('bibtex_markdown_sink'), \ 'up': '25%', \ 'options': '--ansi --multi --prompt "Markdown> "' \ })) " map @@ to automatically insert citation reference at cursor inoremap @@ u:call fzf#run(fzf#wrap({ \ 'source': bibtex_ls(), \ 'sink*': function('bibtex_cite_sink_insert'), \ 'up': '25%', \ 'options': '--ansi --multi --prompt "Cite> "'})) " map cc to insert a complete citation at cursor nnoremap cc :CiteRef " map cm to insert markdown prettified citation nnoremap cm :CiteMarkdown " }}} colo one