"Remove Menubar and Toolbar from gvim "set guioptions -=m "set guioptions -=T scriptencoding utf-8 set encoding=utf-8 fileencoding=utf-8 fileencodings=ucs-bom,utf8,prc set nocompatible filetype off " Store the current system name so that we can conditionally set configs for " different platforms let s:uname = system("echo -n \"$(uname)\"") let s:vim_dir = $HOME . "/.vim" function! IsWindows() if s:uname =~ "mingw" return 1 endif return 0 endfunction let mapleader="," "################################################################ "################################################################ "################################################################ " 0. GLOBALS "################################################################ "################################################################ "################################################################ let s:max_row_length = 100 let s:default_bg = 'dark' let s:rainbow_theme = s:default_bg "----------------------------------------------------------------------------------------- "################################################################ "################################################################ "################################################################ " 1. PLUGINS "################################################################ "################################################################ "################################################################ call plug#begin('~/.vim/plugged') "//////////////////////////////////////////////////////////////// " MISC "//////////////////////////////////////////////////////////////// Plug 'mattn/webapi-vim' " Required by gist-vim Plug 'mattn/gist-vim' Plug 'bling/vim-airline' Plug 'vim-scripts/VimCalc' " Requires a vim compiled with Python support Plug 'vim-scripts/AnsiEsc.vim' Plug 'embear/vim-localvimrc' Plug 'tpope/vim-obsession' " Continuously updated session files Plug 'tpope/vim-fugitive' " Git wrapper " Plug 'tpope/vim-classpath' " For Java Plug 'junegunn/goyo.vim' " Distraction-free mode with centered buffer Plug 'fedorenchik/VimCalc3' " A calculator inside vim if IsWindows() Plug 'suxpert/vimcaps' " Disable capslock (useful if the OS isn't configured to do so) endif Plug 'itchyny/vim-cursorword' " Underlines the word under the cursor " Google Calendar - :Calendar, :Calendar , :Calendar -view=year (-split=veritcal -width=) " :Calendar -view=day, :Calendar -first_day=monday Plug 'itchyny/calendar.vim' Plug 'itchyny/screensaver.vim' " A screensaver view - open with :ScreenSaver " (MAYBE) Plug 'itchyny/vim-winfix' if !IsWindows() Plug 'Shougo/vimproc.vim', {'do' : 'make'} Plug 'itchyny/dictionary.vim' " A way to query dictionary.com with :Dictionary endif " Automatically discover and 'properly' update ctags files on save Plug 'craigemery/vim-autotag' Plug 'majutsushi/tagbar' Plug 'jeetsukumaran/vim-filesearch' Plug 'rking/ag.vim' Plug 'nelstrom/vim-qargs' " For search and replace Plug 'tommcdo/vim-lion' " For text alignment, use gl= and gL= " Easily search for, substitute, and abbreviate multiple variants of a word Plug 'tpope/tpope-vim-abolish' " Maintain a manually-defined jump stack. Set with zp and pop with zP Plug 'tommcdo/vim-kangaroo' " Async commands + build error highlighting Plug 'skywind3000/asyncrun.vim' Plug 'mh21/errormarker.vim' " Plug 'shougo/unite.vim' # Create user interfaces. Not currently needed. " DISABLED since it requires vim 7.3.598+ and I don't have that on my macbook " Plug 'Valloric/YouCompleteMe' "//////////////////////////////////////////////////////////////// " COLORS "//////////////////////////////////////////////////////////////// Plug 'godlygeek/csapprox' " Try to make gvim themes look decent in Windows Plug 'sir-pinecone/rainbow' " WARNING: Has a lot of themes, but they break the other themes listed below "Plug 'flazz/vim-colorschemes' Plug 'elixir-lang/vim-elixir' Plug 'vim-airline/vim-airline-themes' " Light Themes Plug 'raggi/vim-color-raggi' " No Win support, unless using gvim Plug 'LanFly/vim-colors' " No Win support, unless using gvim " Dark Themes Plug 'rhysd/vim-color-spring-night' " No Win support, unless using gvim Plug 'nanotech/jellybeans.vim' Plug 'zcodes/vim-colors-basic' " Hybrid Themes Plug 'sickill/vim-monokai' Plug 'chmllr/elrodeo-vim-colorscheme' " A little dark on Windows, term Plug 'reedes/vim-colors-pencil' " High-contrast " Seabird themes " High contrast: seagull (light), petrel (dark) " Low contrast: greygull (light), stormpetrel (dark) Plug 'nightsense/seabird' " No Win support, unless using gvim "//////////////////////////////////////////////////////////////// " CLOJURE "//////////////////////////////////////////////////////////////// Plug 'guns/vim-clojure-highlight' Plug 'guns/vim-clojure-static' Plug 'tpope/vim-fireplace', { 'for': 'clojure' } "//////////////////////////////////////////////////////////////// " OTHER LANGUAGES "//////////////////////////////////////////////////////////////// " Rust Plug 'rust-lang/rust.vim' " Ruby Plug 'vim-ruby/vim-ruby' " Go Plug 'fatih/vim-go' " QML Plug 'peterhoeg/vim-qml' " Markdown Plug 'tpope/vim-markdown' "Plug 'vim-pandoc/vim-pandoc-syntax' " C++ Plug 'bfrg/vim-cpp-enhanced-highlight' " Haxe Plug 'jdonaldson/vaxe' call plug#end() filetype plugin indent on "----------------------------------------------------------------------------------------- "################################################################ "################################################################ "################################################################ " 2. BASE CONFIG "################################################################ "################################################################ "################################################################ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " BASIC EDITING CONFIGURATION """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " allow unsaved background buffers and remember marks/undo for them set hidden set history=10000 set expandtab set tabstop=2 set shiftwidth=2 set softtabstop=2 set autoindent set laststatus=2 set showcmd " display incomplete commands set showmatch set incsearch " Highlight matches as you type set hlsearch " Highlight matches set dictionary+=/usr/share/dict/words "set clipboard=unnamed " yank and paste with the system clipboard set number " make searches case-sensitive only if they contain upper-case characters set ignorecase smartcase set visualbell " No bell sounds set ttyfast " highlight current line set cmdheight=2 set switchbuf=useopen,split set numberwidth=5 set showtabline=2 set winwidth=79 if IsWindows() " Just assume we don't have a zsh shell set shell=bash else set shell=zsh endif " Prevent Vim from clobbering the scrollback buffer. See " http://www.shallowsky.com/linux/noaltscreen.html set t_ti= t_te= " keep more context when scrolling off the end of a buffer set scrolloff=3 " Store temporary files in a central spot set backup set backupcopy=yes set directory=X://tmp//vim// " For swap files set backupdir=X://tmp//vim// :au BufWritePre * let &bex = '.' . strftime("%Y-%m-%d-%T") . '.bak' set writebackup " allow backspacing over everything in insert mode set backspace=indent,eol,start " Spell checking autocomplete set complete+=kspell " Enable highlighting for syntax syntax on " Enable file type detection. " Use the default filetype settings, so that mail gets 'tw' set to 72, " 'cindent' is on in C files, etc. " Also load indent files, to automatically do language-dependent indenting. " use emacs-style tab completion when selecting files, etc set wildmenu set wildmode=longest,list,full set wildignore+=*/tmp/*,*/log/*,*.so,*.swp,*.zip,*/rdoc/* let &colorcolumn=s:max_row_length " Show trailing whitespace set list listchars=tab:»·,trail:· " Adding this since the esc remap on the 'i' key had a long delay when pressed set timeoutlen=300 ttimeoutlen=0 " Allow undo when doing back into a closed file set undolevels=1000 set undoreload=10000 " Keep undo history across sessions by storing it in a file if has('persistent_undo') let undo_dir = expand(s:vim_dir . '/undo') " Create dirs if IsWindows() let mkdir = 'mkdir ' else let mkdir = 'mkdir -p ' endif :silent call system(mkdir . s:vim_dir) :silent call system(mkdir . undo_dir) let &undodir = undo_dir " Persist undo set undofile endif " Fix vim's background colour erase - http://snk.tuxfamily.org/log/vim-256color-bce.html if &term =~ '256color' " Disable Background Color Erase (BCE) so that color schemes " work properly when Vim is used inside tmux and GNU screen. " See also http://snk.tuxfamily.org/log/vim-256color-bce.html set t_ut= endif " Disable arrow keys map map map map imap imap imap imap """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " CUSTOM AUTOCMDS """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" augroup campoCmds " Clear all autocmds in the group autocmd! " Automatically wrap at N characters autocmd FileType gitcommit setlocal colorcolumn=72 autocmd BufRead,BufNewFile *.{md,txt,plan} execute "setlocal textwidth=" .s:max_row_length " Spell checking autocmd FileType gitcommit,markdown,text setlocal spell " Jump to last cursor position unless it's invalid or in an event handler autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif " Language identation autocmd FileType ruby,haml,eruby,yaml,html,javascript,rust,go set ai sw=2 sts=2 et autocmd FileType python,qml set sw=4 sts=4 et " Indent p tags autocmd FileType html,eruby if g:html_indent_tags !~ '\\|p\>' | let g:html_indent_tags .= '\|p\|li\|dt\|dd' | endif " Properly indent schemes (scheme, racket, etc) autocmd bufread,bufnewfile *.{lisp,scm,rkt} setlocal equalprg=scmindent.rkt " Auto reload VIM when settings changed autocmd BufWritePost .vimrc so $MYVIMRC autocmd BufWritePost *.vim so $MYVIMRC autocmd BufWritePost vimrc.symlink so $MYVIMRC " Remove trailing whitespace on save all files. function! StripTrailingWhitespaces() let l = line(".") let c = col(".") %s/\s\+$//e call cursor(l, c) endfun autocmd BufWritePre * :call StripTrailingWhitespaces() "//////////////////////////////////////////////////////////////// " FILE TEMPLATES "//////////////////////////////////////////////////////////////// " Shell script template autocmd BufNewFile *.sh 0r ~/.vim/templates/skeleton.sh autocmd BufNewFile *.plan 0r ~/.vim/templates/skeleton.plan " C/C++ template autocmd bufnewfile *.{c,cc,cpp,h,hpp} 0r ~/.vim/templates/c_header_notice autocmd bufnewfile *.{c,cc,cpp,h,hpp} exe "2," . 6 . "g/File:.*/s//File: " .expand("%") autocmd bufnewfile *.{c,cc,cpp,h,hpp} exe "2," . 6 . "g/Creation Date:.*/s//Creation Date: " .strftime("%Y-%m-%d") autocmd bufnewfile *.{c,cc,cpp,h,hpp} exe "2," . 6 . "g/$year/s//" .strftime("%Y") function! s:InsertHeaderGates() let gatename = substitute(toupper(expand("%:t")), "\\.", "_", "g") execute "normal! ggO#ifndef " . gatename normal! Go normal! Go execute "normal! Go#define " . gatename . " " execute "normal! o#endif" normal! kkk endfunction autocmd bufnewfile *.{h,hpp} call InsertHeaderGates() augroup END """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " MISC KEY MAPS """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Mapping ESC in insert mode and command mode to double i "imap ii "cmap ii " suspend process nmap z " Quickly edit/reload the vimrc file nmap ev :vsp $MYVIMRC nmap rv :so $MYVIMRC " Easy way to open a file in the directory of the current file :cmap %/ %:p:h/ " remap saving and quiting nmap w :w nmap q :q nmap qq :q! nmap x :x :ca Wa wa :ca WA wa :ca WQ wq :ca Wq wq :ca W w :ca Q q " lowercase the e (have a habit of making it uppercase) :ca E e command! Q q " Bind :Q to :q command! Qall qall " Disable Ex mode map Q if exists(':terminal') " Terminal mapping map t :terminal tnoremap e tnoremap h tnoremap j tnoremap k tnoremap l nnoremap h nnoremap j nnoremap k nnoremap l endif " Map ctrl-movement keys to window switching map map map map " Make it easier to jump around the command line. The default behaviour is " using the arrow keys with or without shift :cnoremap :cnoremap " Window splitting - couldn't figure out how to remap v & n to " & map m :vsplit map mm :split " Delete a word forward and backward map a daw map d ciw " Map paste and nonumber map p :set paste! paste? map o :set number! number? " Spell checking map j :exec &spell==&spell? "se spell! spelllang=en_us" : "se spell!" map = z= " NOTE: you can add a new word to the dict with `zg` " Clear the search buffer (highlighting) when hitting return function! MapCR() nnoremap :nohlsearch endfunction call MapCR() nnoremap " Replace currently selected text with default register without yanking it vnoremap p "_dP " Use Marked.app to preview Markdown files... nnoremap pp :silent !open -a Marked.app '%:p' " Switch between C++ source and header files map v :e %:p:s,.h$,.X123X,:s,.cpp$,.h,:s,.X123X$,.cpp, "map vv :e %:p:s,.h$,.X123X,:s,.c$,.h,:s,.X123X$,.c, "map vvv :e %:p:s,.h$,.X123X,:s,.cc$,.h,:s,.X123X$,.cc, "//////////////////////////////////////////////////////////////// " QUICKLY OPEN C++ SOURCE OR HEADER FILE "//////////////////////////////////////////////////////////////// function! s:CompleteFilenameWithoutExtension(ArgLead, CmdLine, CursorPos) " Returns a matching filename without the period that separates the name " from the extension. let l:file = substitute(glob(a:ArgLead.'*', 0, 0), "[\.].*", "", "*") return l:file endfunction " Custom command to open cpp and h files without typing an extension command! -nargs=+ -complete=custom,s:CompleteFilenameWithoutExtension OpenCppSource execute ':e .cpp' :ca c OpenCppSource :ca C OpenCppSource command! -nargs=+ -complete=custom,s:CompleteFilenameWithoutExtension OpenCppHeader execute ':e .h' :ca h OpenCppHeader :ca H OpenCppHeader command! -nargs=+ -complete=custom,s:CompleteFilenameWithoutExtension OpenCppSourceAndHeader execute ':vsp | :e .h | :sp .cpp' :ca b OpenCppSourceAndHeader :ca B OpenCppSourceAndHeader "//////////////////////////////////////////////////////////////// " MULTIPURPOSE TAB KEY "//////////////////////////////////////////////////////////////// function! InsertTabWrapper() let l:col = col('.') - 1 if !l:col || getline('.')[l:col - 1] !~ '\k' return "\" else return "\" endif endfunction inoremap =InsertTabWrapper() inoremap "----------------------------------------------------------------------------------------- "################################################################ "################################################################ "################################################################ " 3. PLUGIN CONFIGS "################################################################ "################################################################ "################################################################ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " LOCAL VIMRC """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:localvimrc_sandbox = 0 let g:localvimrc_ask = 0 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " TAGBAR """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" noremap :TagbarToggle """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " CALENDAR """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:calendar_google_calendar = 1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " SYNTASTIC """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " NOTE: there is a status line config in the status line section let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 0 let g:syntastic_check_on_wq = 0 " Customize Rust " https://github.com/rust-lang/rust.vim/issues/130 " Can remove once this Syntastic PR is merged https://github.com/rust-lang/rust.vim/pull/132 "let g:syntastic_rust_rustc_exe = 'cargo check' "let g:syntastic_rust_rustc_fname = '' "let g:syntastic_rust_checkers = ['rustc'] """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " GIT """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" map gb :Gblame -w " Ignore whitespace changes; follow renames and copies. command! -bar -bang -nargs=* Blame :Gblame -wCM """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " GIST VIM """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:gist_detect_filetype = 1 let g:gist_open_browser_after_post = 1 let g:gist_show_privates = 1 let g:gist_post_private = 1 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " VIM-CLOJURE-STATIC """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Default let g:clojure_fuzzy_indent = 1 let g:clojure_align_multiline_strings = 1 let g:clojure_fuzzy_indent_patterns = ['^match', '^with', '^def', '^let'] let g:clojure_fuzzy_indent_blacklist = ['-fn$', '\v^with-%(meta|out-str|loading-context)$'] """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " RUST.VIM """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "let g:rustfmt_autosave = 1 " auto run rust formatter when saving """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " RAINBOW """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:rainbow_active = 1 " Always on "let g:rainbow_conf = { "\} let s:light_rainbow = ['red', 'green', 'magenta', 'cyan', 'yellow', 'white', 'gray', 'blue'] let s:dark_rainbow = ['darkblue', 'red', 'black', 'darkgreen', 'darkyellow', 'darkred', 'darkgray'] function! UpdateRainbowConf() let g:rainbow_conf = { \ 'ctermfgs': (s:rainbow_theme == "light"? s:dark_rainbow : s:light_rainbow) \} "\ 'separately': { "\ '*': 0, " Disable all "\ 'c++': {} " Only enable c++ "\ } endfunction call UpdateRainbowConf() function! ReloadRainbow() if g:campo_theme_use_rainbow_parens if exists('g:rainbow_loaded') call UpdateRainbowConf() call rainbow#clear() | call rainbow#hook() endif else let g:rainbow_active = 0 if exists('g:rainbow_loaded') call UpdateRainbowConf() call rainbow#clear() endif endif endfunction """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " C-TAGS """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set tags+=tags;$HOME "----------------------------------------------------------------------------------------- "################################################################ "################################################################ "################################################################ " 4. VISUALS "################################################################ "################################################################ "################################################################ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " LAYOUT """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "//////////////////////////////////////////////////////////////// " CENTER THE BUFFER "//////////////////////////////////////////////////////////////// function! CenterPane() " centers the current pane as the middle 2 of 4 imaginary columns " should be called in a window with a single pane " Taken from https://dev.to/vinneycavallo/easily-center-content-in-vim lefta vnew wincmd w exec 'vertical resize '. string(&columns * 0.75) endfunction nnoremap c :call CenterPane() function! RemoveCenterPane() wincmd w close endfunction nnoremap cw :call RemoveCenterPane() "//////////////////////////////////////////////////////////////// " TEXT ALIGNMENT PLUGIN "//////////////////////////////////////////////////////////////// let b:lion_squeeze_spaces = 1 "//////////////////////////////////////////////////////////////// " STATUS LINE "//////////////////////////////////////////////////////////////// set statusline=%<%f\ (%{&ft})\ %-4(%m%)%=%-19(%3l,%02c%03V%) """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " COLORS """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:campo_theme_use_rainbow_parens = 1 "let s:dark_theme = 'campo-dark-green' let s:dark_theme = 'campo-flux-dark-green' "let s:dark_theme = 'campo-dark' let s:light_theme = 'campo-light' execute "autocmd ColorScheme " . s:dark_theme . " call ReloadRainbow()" execute "autocmd ColorScheme " . s:light_theme . " call ReloadRainbow()" " Switch between light and dark map l :call ChangeBgTheme('light', 0) map ll :call ChangeBgTheme('dark', 0) function! ChangeBgTheme(bg, onlySetTheme) if a:bg =~ 'light' let s:rainbow_theme = 'light' let s:theme = s:light_theme exe 'colorscheme ' . s:theme set background=light else let s:rainbow_theme = 'dark' let s:theme = s:dark_theme " We have to set the theme twice in order to get its correct dark-theme colors. " Weird stuff. exe 'colorscheme ' . s:theme set background=dark exe 'colorscheme ' . s:theme endif if !a:onlySetTheme exec ':AirlineTheme ' . a:bg endif endfunction if s:default_bg =~ 'light' call ChangeBgTheme('light', 1) else call ChangeBgTheme('dark', 1) endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " HIGHLIGHTS - TODO, NOTE, FIXME, etc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " NOTE: These depend on custom color names (Bugs, Notes and Notices) defined " in the campo color themes. Since most themes won't define these, you can " use WildMenu as substitution. " " FIXME: the custom Bugs, Notes and Notices highlighting for campo-light isn't " working... augroup vimrc_bugs au! au Syntax * syn match MyBugs /\v<(FIXME|BUG|DEPRECATED):/ \ containedin=.*Comment,vimCommentTitle augroup END hi def link MyBugs Bugs augroup vimrc_notes au! au Syntax * syn match MyNotes /\v<(IDEA|NOTE|QUESTION|WARNING|IMPORTANT):/ \ containedin=.*Comment,vimCommentTitle augroup END hi def link MyNotes Notes augroup vimrc_notices au! au Syntax * syn match MyNotices /\v<(WARNING|IMPORTANT):/ \ containedin=.*Comment,vimCommentTitle augroup END hi def link MyNotices Notices augroup vimrc_annotated_todo au! " This was a major pain in the ass to get working... au Syntax * syn match cTodo /@\S\+/ \ containedin=.*Comment,vimCommentTitle augroup END augroup vimrc_annotated_notes au! au Syntax * syn match cTodo /#\+ .\+$/ \ containedin=.*Comment,vimCommentTitle augroup END "----------------------------------------------------------------------------------------- "################################################################ "################################################################ "################################################################ " 5. HELPER FUNCTIONS "################################################################ "################################################################ "################################################################ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " BUILD COMMANDS """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " AsyncRun status line let g:airline_section_error = airline#section#create_right(['%{g:asyncrun_status}']) " Display error highlighting in source after running GCC with AsyncRun " NOTE: error results can be cleared with cr or by hiding the build " result window. let g:asyncrun_auto = "make" let errormarker_errortext = "E" let errormarker_warningtext = "W" " Thanks to https://forums.handmadehero.org/index.php/forum?view=topic&catid=4&id=704#3982 " for the error message formats " Microsoft MSBuild errors set errorformat+=\\\ %#%f(%l\\\,%c):\ %m " Microsoft compiler: cl.exe set errorformat+=\\\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %m " Microsoft HLSL compiler: fxc.exe set errorformat+=\\\ %#%f(%l\\\,%c-%*[0-9]):\ %#%t%[A-z]%#\ %m let g:build_window_size = 12 " in rows function! HideBuildResultsAndClearErrors() RemoveErrorMarkers call asyncrun#quickfix_toggle(g:build_window_size, 0) endfunction function! HideAsyncResults() call asyncrun#quickfix_toggle(g:build_window_size, 0) endfunction function! ToggleBuildResults() call asyncrun#quickfix_toggle(g:build_window_size) endfunction function! StopRunTask() AsyncStop call HideAsyncResults() endfunction function! ExecuteRunScript() exec "AsyncRun! -post=call\\ StopRunTask() ./run" endfunction function! SilentBuild() AsyncStop exec "AsyncRun! -save=2 -post=call\\ HideAsyncResults() ./build*" endfunction " Show results window the moment the async job starts augroup vimrc autocmd User AsyncRunStart call asyncrun#quickfix_toggle(g:build_window_size, 1) augroup END " Toggle build results noremap :call ToggleBuildResults() nnoremap bc :call ToggleBuildResults() " Hide build results and clear errors noremap :call HideBuildResultsAndClearErrors() " Execute build script " Optimizations off nnoremap b :AsyncRun! -save=2 ./build* " Optimizations on nnoremap bb :AsyncRun! -save=2 ./build* -o 1 nnoremap :call SilentBuild() " Execute run script nnoremap br :call ExecuteRunScript() nnoremap :call ExecuteRunScript() nnoremap bs :AsyncStop "Go to next build error nnoremap :cn nnoremap :cn "Go to previous build error nnoremap :cp nnoremap :cp """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " SEARCHING """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " TODO: Not sure if I still need this map gs :let @/ = "" " Replace the selected text in all files within the repo function! GlobalReplaceIt(confirm_replacement) if exists(':Ggrep') " let term = @/ " if empty(term) call inputsave() let l:term = input('Enter search term: ') call inputrestore() " else " echo '\nReplacing '.term " endif call inputsave() let l:replacement = input('Enter replacement: ') call inputrestore() if a:confirm_replacement let l:confirm_opt = 'c' else let l:confirm_opt = 'e' endif execute 'Ggrep '.l:term execute 'Qargs | argdo %s/'.l:term.'/'.l:replacement.'/g'.l:confirm_opt.' | update' else echo "Unable to search since you're not in a git repo" endif endfunction map gg :call GlobalReplaceIt(0) map gr :call GlobalReplaceIt(1) function! Search() let l:term = input('Grep search term: ') if l:term != '' if IsWindows() " TODO: add --exclude= support to filesearch plugin exec 'Fsgrep "' . l:term . '"' else " is pt faster than ag? I forget now and didn't document it "exec 'pt "' . l:term . '"' exec 'Ag "' . l:term . '"' endif endif endfunction map s :call Search() command! -nargs=+ MyGrep execute 'silent grep! ' | copen 33 "//////////////////////////////////////////////////////////////// " FILESEARCH PLUGIN "//////////////////////////////////////////////////////////////// let g:filesearch_viewport_split_policy = "B" let g:filesearch_split_size = 10 let g:filesearch_autodismiss_on_select = 0 "//////////////////////////////////////////////////////////////// " SELECTA -- find files with fuzzy-search "//////////////////////////////////////////////////////////////// " " Run a given vim command on the results of fuzzy selecting from a given shell " command. See usage below. function! SelectaCommand(choice_command, selecta_args, vim_command) if IsWindows() let l:term = input('File name: ') exec 'Fsfind "' . l:term . '"' else try let l:selection = system(a:choice_command . " | selecta " . a:selecta_args) catch /Vim:Interrupt/ " Swallow the ^C so that the redraw below happens; otherwise there will be " leftovers from selecta on the screen redraw! return endtry redraw! exec a:vim_command . " " . l:selection endif endfunction " Find all files in all non-dot directories starting in the working directory. " Fuzzy select one of those. Open the selected file with :e. nnoremap f :call SelectaCommand("find * -type f ! -path 'resources/public/js/*' ! -path 'resources/.sass-cache/*' ! -path 'target/*'", "", ":e") """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " RENAME CURRENT FILE """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! RenameFile() let l:old_name = expand('%') let l:new_name = input('New file name: ', expand('%'), 'file') if l:new_name != '' && l:new_name != l:old_name exec ':saveas ' . l:new_name exec ':silent !rm ' . l:old_name redraw! endif endfunction map n :call RenameFile() "----------------------------------------------------------------------------------------- "################################################################ "################################################################ "################################################################ " 6. PERSONAL "################################################################ "################################################################ "################################################################ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " FILE MAPPINGS """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Notes and other helpers map pn :sp ~/.dev-scratchpad let g:autotagStopAt = "$HOME"