diff --git a/vimrc b/vimrc index 4bf0220..43f6c1a 100644 --- a/vimrc +++ b/vimrc @@ -1,31 +1,27 @@ -" @incomplete Move all leader definitions to the bottom, so that it's easier to see them. -" @incomplete Add setup steps (plugins, cache setup, search tool, etc). - -"################################################################################################### +"----------------------------------------------------------------------------------------------------------------------- +" The config is chopped up into sections. Search for these headings to quickly jump to a particular section. " -" The config is chopped up into sections. These are the headings, which you -" can use to quickly jump to a particular section: - " #0 GLOBALS " #1 PLUGINS " #2 BASE CONFIG -" #3 PLUGIN CONFIGS -" #4 VISUALS -" #5 CUSTOM FUNCTIONS / COMMANDS +" #3 CUSTOM AUTOCMDS +" #4 KEY MAPPINGS +" #5 PLUGIN CONFIGS +" #6 VISUALS (COLORS, HIGHLIGHTING) +" #7 CUSTOM FUNCTIONS & COMMANDS " -"################################################################################################### +" @incomplete Add setup steps (plugins, cache setup, search tool, etc). +"----------------------------------------------------------------------------------------------------------------------- let g:campo_vimrc_initialized = 0 " Will be set to 1 at the end of the file. Can be used to avoid changes on subsequent vimrc reloads. scriptencoding utf-8 -" @note If the file contains a BOM then vim will automatically set `bomb` for -" the buffer so that the BOM is written out again. +" @note If the file contains a BOM then vim will automatically set `bomb` for the buffer so that the BOM is written out again. 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 +" Store the current system name so that we can conditionally set configs for different platforms. let s:uname = system("echo -n \"$(uname)\"") let g:vim_dir = $HOME . "/.vim" let mapleader="," @@ -39,7 +35,7 @@ endfunction if has('termguicolors') set termguicolors - " Set Vim-specific sequences for RGB colors + " Set Vim-specific sequences for RGB colors. let &t_8f = "\[38;2;%lu;%lu;%lum" let &t_8b = "\[48;2;%lu;%lu;%lum" endif @@ -51,26 +47,27 @@ function! PrintError(msg) abort echohl None endfunction -"################################################################ -"################################################################ -"################################################################ -"#0 GLOBALS -"################################################################ -"################################################################ -"################################################################ +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #0 GLOBALS +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| + + +"----------------------------------------------------------------------------------------------------------------------- " @note The following globals can be used to customize various functions in -" this file. The easiest way to set them is in ~/.vimrc.private or an .lvimrc +" this file. The easiest way to set them is in ~/.vimrc.private or an .lvimrc " file in the root folder that you want it applied to. " -" Some variables cannot be customized in an .lvimrc because their value is used -" by settings in this file when it's sourced. These have been flagged with the -" note :unsupported-in-lvimrc. +" Some variables cannot be customized in an .lvimrc because their value is +" used by settings in this file when it's sourced. These have been flagged +" with the note :unsupported-in-lvimrc. " " Also take note that an .lvimrc has precedence because it's loaded after this " and the private vimrc. +"----------------------------------------------------------------------------------------------------------------------- -" -------------------------------------------------------------------------------------------------- " @note :unsupported-in-lvimrc let g:campo_max_line_length = 120 " Display a vertical bar at x=. @@ -79,17 +76,19 @@ let g:campo_max_line_length = 120 " Display a vertical bar at x=. " from various plugins (like ctrlp, ripgrep, compilation errors, etc), in rows let g:quickfix_pane_height = 20 -"""""""""""""" + +"################################################################################## " COLORS -"""""""""""""" +"################################################################################## let g:campo_light_dark_mode = 'dark' " Start vim with the dark theme. Set to 'light' for the light theme. let g:campo_dark_theme = 'campo-dark-simple' "'campo-dark-blue' let g:campo_light_theme = 'campo-light-simple' "'campo-light' let g:campo_theme_use_rainbow_parens = 1 -"""""""""""""" + +"################################################################################## " FORMATTING -"""""""""""""" +"################################################################################## " When set to 1, all files will be stripped of trailing whitespace when the " file is saved. Set to 0 to disable. You can customize which files are " ignored or always stripped; see below. @@ -129,9 +128,10 @@ let g:campo_directories_to_force_stripping_trailing_whitespace = [] " e.g. let g:campo_files_to_force_stripping_trailing_whitespace = ['/z/modules/test.h', '/d/build/config.h'] let g:campo_files_to_force_stripping_trailing_whitespace = [] -"""""""""""""" + +"################################################################################## " SEARCH -"""""""""""""" +"################################################################################## " This is included in the ripgrep args. You can use this to do things like " ignore folders in your project or limit the search to specific file types. " For example, if you want to ignore the 3rd_party dir and only search C files @@ -140,12 +140,13 @@ let g:campo_files_to_force_stripping_trailing_whitespace = [] " let g:campo_custom_search_args = \"-g \"!3rd_party/*\" -tc" let g:campo_custom_search_args = "" -"""""""""""""" + +"################################################################################## " CTAGS -"""""""""""""" +"################################################################################## " I use the ctags executable from https://github.com/universal-ctags/ctags-win32/releases " -" Be sure to check out the ctags plugin config in section #3 for additional API functions. +" Be sure to check out the ctags plugin config in section #5 for additional API functions. " If != 0 then ctag generation will always happen on a file save, otherwise " it'll only be triggered if the file being saved has an extension in the @@ -173,9 +174,10 @@ let g:campo_ctags_exclude = ['*.txt', '*.config', '.cache'] " * Exclude a directory with `let g:campo_custom_ctags_args = '--exclude=3rd_party'` let g:campo_custom_ctags_args = "" -"""""""""""""" + +"################################################################################## " JAI -"""""""""""""" +"################################################################################## " Set to your Jai install path. Used for various commands, like for example " searching the modules and how_to directories with CtrlP let g:campo_jai_path = '' @@ -183,19 +185,18 @@ let g:campo_jai_path = '' " Args to include when compiling a Jai file. let g:campo_jai_build_args = '' -"################################################################ -"################################################################ -"################################################################ -"#1 PLUGINS -"################################################################ -"################################################################ -"################################################################ + +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #1 PLUGINS +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| call plug#begin('~/.vim/plugged') -"//////////////////////////////////////////////////////////////// +"################################################################################## " MISC -"//////////////////////////////////////////////////////////////// +"################################################################################## Plug 'vim-airline/vim-airline' " Enhanced status/tabline. Plug 'embear/vim-localvimrc' " Add a .lvimrc to a folder to override .vimrc config. @@ -217,9 +218,9 @@ if IsWindows() Plug 'suxpert/vimcaps' " Disable capslock (useful if the OS isn't configured to do so). endif -"//////////////////////////////////////////////////////////////// +"################################################################################## " COLORS -"//////////////////////////////////////////////////////////////// +"################################################################################## Plug 'luochen1990/rainbow', { 'commit': '1c45e0f' } " Rainbow parens. Locked to an older commit that still works fine on my PC. Plug 'vim-airline/vim-airline-themes' @@ -230,9 +231,9 @@ endif Plug 'dracula/vim', { 'as': 'dracula' } -"////////////////////////////// +"///////////////////////////////////////////////// " SYNTAX HIGHLIGHTING -"////////////////////////////// +"///////////////////////////////////////////////// Plug 'rluba/jai.vim' " Jai Plug 'bfrg/vim-cpp-modern' " C/C++ @@ -245,24 +246,20 @@ Plug 'tpope/vim-markdown' " Markdown "Plug 'rust-lang/rust.vim' " Rust "Plug 'jdonaldson/vaxe' " Haxe -"////////////////////////////// +" +" +" call plug#end() filetype plugin indent on -"--------------------------------------------------------------------------------------------------- -"################################################################ -"################################################################ -"################################################################ -"#2 BASE CONFIG -"################################################################ -"################################################################ -"################################################################ +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #2 BASE CONFIG +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" BASIC EDITING CONFIGURATION -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set hidden set history=10000 set expandtab @@ -308,7 +305,6 @@ set scrolloff=3 " keep more context when scrolling off the end set cursorline set cursorcolumn -" " Store swap, backup and undo files in a central spot. I have my settings in a " `vimrc.private` so that my drive paths aren't in this config. If you want to " set them here then add: @@ -329,7 +325,6 @@ augroup backupCmds augroup END set writebackup " Make buckup before overwriting the current buffer. -" " Keep undo history across sessions by storing it in a file. The undo save " location is set in the vimrc.private file. You can also set it here with: " set undodir= @@ -374,6 +369,9 @@ if &term =~ '256color' set t_ut= endif +" Status line +set statusline=%<%f\ (%{&ft})\ %-4(%m%)%=%-19(%3l,%02c%03V%) + " Disable arrow keys. noremap noremap @@ -384,8 +382,11 @@ inoremap inoremap inoremap -"--------------------------------------------------------------- -" Load vimrc.private + +"///////////////////////////////////////////////// +" LOAD PRIVATE VIMRC +"///////////////////////////////////////////////// + " This should be done after above base settings that don't use the global " campo variables. " @@ -395,12 +396,17 @@ if filereadable($HOME . "/.vimrc.private") source $HOME/.vimrc.private endif -" Settings that use the global campo variables. + +" Settings that use the global campo variables: let &colorcolumn=g:campo_max_line_length -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" CUSTOM AUTOCMDS -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #3 CUSTOM AUTOCMDS +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| + augroup campoCmds " Clear all autocmds in the group. autocmd! @@ -489,9 +495,17 @@ augroup campoCmds augroup END -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" MISC KEY MAPS -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #4 KEY MAPPINGS +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| + + +"################################################################################## +" MISC +"################################################################################## " Lowercase the e (have a habit of making it uppercase). :ca E e @@ -515,9 +529,75 @@ nnoremap rv :source $MYVIMRC " the full %/ quickly otherwise it won't replace it. cmap %/ %:p:h/ -"------------------------------------------------------------ -" Remap saving and quiting. -" +" Open a terminal within vim. Use `exit` to close it. +" DISABLING because I don't use this and I want to use the t for opening my todo file. +"if exists(':terminal') +" noremap t :terminal +" tnoremap te +" tnoremap h +" tnoremap j +" tnoremap k +" tnoremap l +" nnoremap h +" nnoremap j +" nnoremap k +" nnoremap l +"endif + +" Jump to other buffers. +noremap +noremap +noremap +noremap + +" 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 +" & +noremap m :vsplit +noremap mm :split + +" Forward delete and replace a word. +noremap d ciw + +" Allow fast pasting by accessing the system clipboard register. +noremap p "+p +" Likely won't need to use this if pasting with p, but just in case here ya go. +noremap pp :set paste! paste? + +" Toggle line numbers. +noremap o :set number! number? + +" Show spell checking. +" You can add new entries to the dict by moving the cursor over the word and pressing `zg`. +noremap j :exec &spell==&spell? "se spell! spelllang=en_us" : "se spell!" +noremap = z= + +" Clear the search buffer (highlighting) when hitting return. +nnoremap :nohlsearch + +" Switch to the previous file. +nnoremap + +" Replace currently selected text with default register without yanking it. +vnoremap p "_dP + +" Switch between C++ source and header files. +noremap v :e %:p:s,.h$,.X123X,:s,.cpp$,.h,:s,.X123X$,.cpp, +"noremap vv :e %:p:s,.h$,.X123X,:s,.c$,.h,:s,.X123X$,.c, +"noremap vvv :e %:p:s,.h$,.X123X,:s,.cc$,.h,:s,.X123X$,.cc, + +" Replace all instances of the highlighted text with whatever you enter. +nnoremap :%s///g + + +"################################################################################## +" SAVING AND QUITING +"################################################################################## + " I used to have a BufWritePost autocommand that ran the ctags generator but " it ends up running multiple times when saving multiple buffers at once. In " order to only call it once for a group of saves I've had to remap the @@ -617,76 +697,10 @@ command! Qa qall " Disable Ex mode. noremap Q -"------------------------------------------------------------ -" Open a terminal within vim. Use `exit` to close it. -" DISABLING because I don't use this and I want to use the t for opening my todo file. -"if exists(':terminal') -" noremap t :terminal -" tnoremap te -" tnoremap h -" tnoremap j -" tnoremap k -" tnoremap l -" nnoremap h -" nnoremap j -" nnoremap k -" nnoremap l -"endif - -" Jump to other buffers. -noremap -noremap -noremap -noremap - -" 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 -" & -noremap m :vsplit -noremap mm :split - -" Forward delete and replace a word. -noremap d ciw - -" Allow fast pasting by accessing the system clipboard register. -noremap p "+p -" Likely won't need to use this if pasting with p, but just in case here ya go. -noremap pp :set paste! paste? - -" Toggle line numbers. -noremap o :set number! number? - -" Show spell checking. -" You can add new entries to the dict by moving the cursor over the word and pressing `zg`. -noremap j :exec &spell==&spell? "se spell! spelllang=en_us" : "se spell!" -noremap = z= - -" Clear the search buffer (highlighting) when hitting return. -nnoremap :nohlsearch - -" Switch to the previous file. -nnoremap - -" Replace currently selected text with default register without yanking it. -vnoremap p "_dP - -" Switch between C++ source and header files. -noremap v :e %:p:s,.h$,.X123X,:s,.cpp$,.h,:s,.X123X$,.cpp, -"noremap vv :e %:p:s,.h$,.X123X,:s,.c$,.h,:s,.X123X$,.c, -"noremap vvv :e %:p:s,.h$,.X123X,:s,.cc$,.h,:s,.X123X$,.cc, - -" Replace all instances of the highlighted text with whatever you enter. -nnoremap :%s///g - - -"//////////////////////////////////////////////////////////////// +"################################################################################## " MULTIPURPOSE TAB KEY -"//////////////////////////////////////////////////////////////// +"################################################################################## function! InsertTabWrapper() let l:col = col('.') - 1 if !l:col || getline('.')[l:col - 1] !~ '\k' @@ -699,32 +713,34 @@ inoremap =InsertTabWrapper() inoremap -"--------------------------------------------------------------------------------------------------- +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #5 PLUGIN CONFIGS +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -"################################################################ -"################################################################ -"################################################################ -"#3 PLUGIN CONFIGS -"################################################################ -"################################################################ -"################################################################ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " LOCAL VIMRC -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## let g:localvimrc_sandbox = 0 let g:localvimrc_ask = 0 -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## +" LION (TEXT ALIGNMENT) +"################################################################################## +let b:lion_squeeze_spaces = 1 + +"################################################################################## " TAGBAR -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## noremap :TagbarToggle " Sort tags by their order in the source file. Press 's' to sort them alphabetically. let g:tagbar_sort = 0 -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " GITGUTTER -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## let g:gitgutter_enabled = 1 let g:gitgutter_highlight_lines = 0 nnoremap hh :GitGutterToggle @@ -738,9 +754,9 @@ augroup gitGutterPluginCmds autocmd BufWritePost * GitGutter augroup END -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " 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 @@ -754,16 +770,15 @@ let g:syntastic_check_on_wq = 0 "let g:syntastic_rust_rustc_fname = '' "let g:syntastic_rust_checkers = ['rustc'] -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " RIPGREP -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## let g:rg_highlight = 1 let g:rg_window_height = g:quickfix_pane_height -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " C-TAGS -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - +"################################################################################## " Set extra paths to use when searching for ctags files. By default the current " directory is always checked. You can use this to combine tag lookups from " different projects, e.g. set it to the Jai directory and you can look up @@ -783,9 +798,9 @@ function! g:SetExtraCtagsPaths(paths_array) let &tags=l:list endfunction -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " CTRL-P -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " keybindings: " " leader-f = open CtrlP in tag searching mode. @@ -850,40 +865,39 @@ let g:ctrlp_switch_buffer = 'et' " If a file is already open, open it again in a let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$' let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard'] " If a git repo, use checked in files (ignore things in .gitignore); fallback to globpath() -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " GIT -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - +"################################################################################## noremap gb :Git blame -w " Ignore whitespace changes; follow renames and copies. command! -bar -bang -nargs=* Blame :Git blame -wCM command! -bar -bang -nargs=* Gblame :Git blame -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 s:light_rainbow = ['red', 'green', 'magenta', 'cyan', 'yellow', 'white', 'gray', 'blue'] let s:dark_rainbow = ['darkblue', 'red', 'black', 'darkgreen', 'darkyellow', 'darkred', 'darkgray'] @@ -916,57 +930,17 @@ function! ReloadRainbow() endif endfunction -"--------------------------------------------------------------------------------------------------- -"################################################################ -"################################################################ -"################################################################ -"#4 VISUALS -"################################################################ -"################################################################ -"################################################################ +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #6 VISUALS (COLORS, HIGHLIGHTING) +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" 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.65) -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 -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"########################################################################### exec "autocmd ColorScheme " . g:campo_dark_theme . " call ReloadRainbow()" exec "autocmd ColorScheme " . g:campo_light_theme . " call ReloadRainbow()" @@ -1014,7 +988,6 @@ else call ChangeLightDarkMode('dark', 1) endif - " Open the current color scheme for editing. function! EditColorScheme() let l:path = g:vim_dir . '/colors/' . s:theme . '.vim' @@ -1027,9 +1000,9 @@ endfunction command -nargs=0 EditColorScheme call EditColorScheme() -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " 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 @@ -1072,19 +1045,18 @@ augroup vimrc_annotated_notes \ containedin=.*Comment,vimCommentTitle augroup END -"--------------------------------------------------------------------------------------------------- -"################################################################ -"################################################################ -"################################################################ -"#5 CUSTOM FUNCTIONS / COMMANDS -"################################################################ -"################################################################ -"################################################################ +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +" #7 CUSTOM FUNCTIONS & COMMANDS +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +"||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| + + +"################################################################################## +" COMPILING CODE +"################################################################################## -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" BUILD COMMANDS -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " AsyncRun status line let g:airline_section_error = airline#section#create_right(['%{g:asyncrun_status}']) @@ -1108,9 +1080,9 @@ let errormarker_warninggroup = "BuildWarn" let errormarker_infogroup = "BuildInfo" -""""""""""""""""""""""""" -" Custom error formats -""""""""""""""""""""""""" +"///////////////////////////////////////////////// +" CUSTOM ERROR FORMATS +"///////////////////////////////////////////////// " @note: You can debug the error parsing by running :ShowErrorEntries " This will print the valid entries. You'll know parsing is correct when the @@ -1127,17 +1099,18 @@ function! ShowErrorEntries() endfunction command -nargs=0 ShowErrorEntries call ShowErrorEntries() - " Jai " " Z:\path\main.jai:100,10: Error: Undeclared identifier 's1'. set errorformat=\\\ %#%f:%l\\,%c:\ %t%[A-z]%#:\ %m + " Microsoft compiler: cl.exe " " Z:\path\main.cpp(2808): error C2220: the following warning is treated as an error set errorformat+=\\\ %#%f(%l):\ %#%t%[A-z]%#\ %[A-z]%#%n:\ %m + " Microsoft MSBuild errors " " @note I got this off the Internet and haven't tested it yet. @@ -1145,15 +1118,17 @@ set errorformat+=\\\ %#%f(%l):\ %#%t%[A-z]%#\ %[A-z]%#%n:\ %m " Z:\path\main.cpp(2808): error C2220: the following warning is treated as an error set errorformat+=\\\ %#%f(%l\\,%c):\ %m + " Microsoft HLSL compiler: fxc.exe " " @note I got this off the Internet and haven't tested it yet. " @todo Add an example set errorformat+=\\\ %#%f(%l\\\,%c-%*[0-9]):\ %#%t%[A-z]%#\ %m -""""""""""""""""""""""""" -" Build functions -""""""""""""""""""""""""" + +"///////////////////////////////////////////////// +" BUILD FUNCTIONS +"///////////////////////////////////////////////// function! HideBuildResultsAndClearErrors() RemoveErrorMarkers @@ -1269,9 +1244,9 @@ nnoremap :cp nnoremap :cp -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" SEARCH -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## +" TEXT SEARCH +"################################################################################## " Search using ripgrep (first install with Rust: cargo install ripgrep). function! Search(path, search_args, case_insensitive=0) @@ -1297,25 +1272,28 @@ function! Search(path, search_args, case_insensitive=0) exec l:cmd endfunction -""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Search in current directory. -""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"///////////////////////////////////////////////// +" SEARCH IN CURRENT DIRECTORY +"///////////////////////////////////////////////// + " Case insensitive: noremap s :call Search('.', g:campo_custom_search_args, 1) " Case sensitive: noremap ss :call Search('.', g:campo_custom_search_args) -""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" # Search in directory containing the active file. -""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"///////////////////////////////////////////////// +" SEARCH IN DIRECTORY CONTAINING THE ACTIVE FILE +"///////////////////////////////////////////////// + " Case insensitive: noremap sf :call Search(expand('%:p:h'), g:campo_custom_search_args, 1) " Case sensitive: noremap ssf :call Search(expand('%:p:h'), g:campo_custom_search_args) -""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Search in Jai folders -""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"///////////////////////////////////////////////// +" SEARCH IN JAI FOLDERS +"///////////////////////////////////////////////// + " Case insensitive: noremap sg :call Search(g:campo_jai_path, g:campo_custom_search_args, 1) noremap sm :call Search(g:campo_jai_path . '/modules', g:campo_custom_search_args, 1) @@ -1333,9 +1311,10 @@ noremap sse :call Search(g:campo_jai_path . '/examples', g:campo_custom_ nnoremap o (&buftype is# "quickfix" ? "\|:lopen" : "o") nnoremap p (&buftype is# "quickfix" ? "\|:copen" : "p") -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" SEARCH & REPLACE -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +"################################################################################## +" TEXT SEARCH & REPLACE +"################################################################################## " @warning I've stopped using this because it sometimes locks up vim and I " have to force exit the process then clean up the swap files. @@ -1402,9 +1381,10 @@ noremap r :call GlobalReplaceIt(0) noremap rr :call GlobalReplaceIt(1) -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## " RENAME CURRENT FILE -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +"################################################################################## + function! RenameFile() let l:old_name = expand('%') let l:new_name = input('New file name: ', expand('%'), 'file') @@ -1419,6 +1399,27 @@ function! RenameFile() endfunction noremap n :call RenameFile() -"--------------------------------------------------------------------------------------------------- + +"################################################################################## +" 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.65) +endfunction +nnoremap c :call CenterPane() + +function! RemoveCenterPane() + wincmd w + close +endfunction +nnoremap cw :call RemoveCenterPane() + +"----------------------------------------------------------------------------------------------------------------------- let g:campo_vimrc_initialized = 1