"- | LEADER KEY | ----------------------------------------------------------{{{ let mapleader = " " set timeoutlen=1000 "}}} "- | GENERAL SETTINGS | ----------------------------------------------------{{{ colorscheme slate set t_Co=256 set previewheight=12 " Set the file preview height set splitbelow " Splits go below by default set nocompatible " Disable compatibility with vi which can cause unexpected issues. filetype on " Enable type file detection. Vim will be able to try to detect the type of file in use. filetype plugin on " Enable plugins and load plugin for the detected file type. set filetype=txt " Set filetype to text if none specified. set autochdir "ctags set tags=./tags,tags; "ctags ""filetype indent on " Load an indent file for the detected file type. syntax on " Turn syntax highlighting on. set foldmethod=syntax " Fold based on syntax set scrolloff=5 " Keep at least 5 lines above/below cursor set mouse=a " Enable mouse usage in modes set mousehide " Hide the mouse when typing set number " Add numbers to each line on the left-hand side. set cursorline " Highlight cursor line underneath the cursor horizontally. set cursorcolumn " Highlight cursor line underneath the cursor vertically. set nowrap " Do not wrap lines. Allow long lines to extend as far as the line goes. set colorcolumn=80 " Highlight column for recommended size. set shiftwidth=4 " Set shift width to 4 spaces. set tabstop=2 " Set tab width to 2 columns. set expandtab " Use space characters instead of tabs. set autoindent "Enables automatic indentation for new lines. set smartindent "Provides intelligent indentation based on syntax. set cindent set incsearch " While searching though a file incrementally highlight matching characters as you type. set ignorecase " Ignore capital letters during search. set showmatch " Show matching words during a search. set hlsearch " Use highlighting when doing a search. " Override the ignorecase option if searching for capital letters. " This will allow you to search specifically for capital letters. set smartcase set showcmd " Show partial command you type in the last line of the screen. set showmode " Show the mode you are on the last line. set history=1000 " Set the commands to save in history default number is 20. set wildmenu " Enable auto completion menu after pressing TAB. set wildmode=list:longest " Make wildmenu behave like similar to Bash completion. set path+=** " Provides tab-completion for all file-related tasks " There are certain files that we would never want to edit with Vim. " Wildmenu will ignore files with these extensions. set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx " }}} "- | SPECIFIC FILETYPE SETTINGS | ------------------------------------------{{{ autocmd FileType c,cpp setlocal equalprg=clang-format " This will enable code folding. " Use the marker method of folding augroup filetype_vim autocmd! autocmd FileType vim setlocal foldmethod=marker augroup END augroup txt autocmd! au BufEnter *.txt setlocal spell spelllang=en_us au BufEnter *.txt setlocal wrap au BufEnter *.txt setlocal textwidth=80 augroup END augroup md autocmd! au BufEnter *.md setlocal spell spelllang=en_us augroup END " }}} "- | STATUS LINE | ---------------------------------------------------------{{{ highlight StatusLine ctermfg=black ctermbg=white cterm=bold highlight StatusLineNC ctermfg=black ctermbg=darkgrey " Clear status line when vimrc is reloaded. set statusline= " Status line left side. set statusline+=\ %F\ %M\ %Y\ %R " Use a divider to separate the left side from the right side. set statusline+=%= " Status line right side. set statusline+=\ ascii:\ %b\ hex:\ 0x%B\ row:\ %l\ col:\ %c\ percent:\ %p%% " Show the status on the second to last line. set laststatus=2 " }}} "- | NETRW FILE TREE TOGGLE WITH L-F |--------------------------------------{{{ " let g:netrw_keepdir = 0 let g:netrw_banner = 0 let g:netrw_winsize = 15 let g:netrw_liststyle = 3 let g:netrw_browse_split = 4 let g:netrw_localcopydircmd = 'cp -r' let g:netrw_list_hide = '\(^\|\s\s\)\zs\.\S\+' " Toggle Vexplore with Ctrl-F function! ToggleVExplorer() if exists("t:expl_buf_num") let expl_win_num = bufwinnr(t:expl_buf_num) if expl_win_num != -1 let cur_win_nr = winnr() exec expl_win_num . 'wincmd w' close unlet t:expl_buf_num else unlet t:expl_buf_num endif else exec '1wincmd w' Vexplore let t:expl_buf_num = bufnr("%") endif endfunction nnoremap f :call ToggleVExplorer() function! OpenToRight() :normal v let g:path=expand('%:p') :q! execute 'belowright vnew' g:path :normal endfunction nnoremap o :call OpenToRight() " }}} "- | TOGGLE TERMINAL WITH L-T | --------------------------------------------{{{ let s:term_buf_nr = -1 function! s:ToggleTerminal() abort if s:term_buf_nr == -1 execute "botright terminal" let s:term_buf_nr = bufnr("$") else try execute "bdelete! " . s:term_buf_nr catch let s:term_buf_nr = -1 call ToggleTerminal() return endtry let s:term_buf_nr = -1 endif endfunction nnoremap t :call ToggleTerminal() tnoremap t :call ToggleTerminal() " }}} "- | C-TAGS/DEFINITIONS AND TABS L+D | -------------------------------------{{{ nnoremap d :tab tag nnoremap dn :tabnext nnoremap dp :tabprevious nnoremap dc :tabclose "}}} "- | BUFFERS WITH L-B | ----------------------------------------------------{{{ nnoremap b :set nomore :ls :set more :b nnoremap bn :bnext nnoremap bp :bprevious "}}} "- | WINDOWS WITH L-W | ----------------------------------------------------{{{ nnoremap v :vsplit nnoremap s :split nnoremap c :close nnoremap o :only nnoremap h h nnoremap j j nnoremap k k nnoremap l l "}}}" "- | GLOBAL COPY AND PASTE | -----------------------------------------------{{{ vmap c "+y map v "+p "}}} "- | CODE SNIPPETS/TEMPLATES | ---------------------------------------------{{{ "HTML SNIPPET/TEMPLATE" nnoremap ,html :-1read $HOME/eg/webdev/index.html:11 if has("autocmd") augroup templates autocmd BufNewFile index.html 0r ~/eg/webdev/index.html autocmd BufReadPost index.html normal! 10j augroup END endif "CSS SNIPPET/TEMPLATE" nnoremap ,css :-1read $HOME/eg/webdev/style.css if has("autocmd") augroup templates autocmd BufNewFile style.css 0r ~/eg/webdev/style.css augroup END endif "README SNIPPET/TEMPLATE" nnoremap ,read :-1read $HOME/eg/README.md if has("autocmd") augroup templates autocmd BufNewFile README.md 0r ~/eg/README.md augroup END endif "C SNIPPET/TEMPLATE" function! s:TemplatePost() abort let l:fname = escape(expand('%:t:r'), '\/&') let l:fname_up = toupper(l:fname) let pat = '\c\ if has("autocmd") augroup templates autocmd BufNewFile *.c 0r ~/eg/c_dev/template.c | call s:TemplatePost() augroup END endif nnoremap ,read :-1read $HOME/eg/c_dev/template.h if has("autocmd") augroup templates autocmd BufNewFile *.h 0r ~/eg/c_dev/template.h | call s:TemplatePost() augroup END endif "}}} "{{{ - | ENCLOSE VISUALLY HIGHLIGHTED |--------------------------------------- xnoremap p c(") xnoremap q c""" xnoremap c c{"} xnoremap b c["] "}}}" "- | MINIMALIST TAB COMPLETE PLUGIN | --------------------------------------{{{ inoremap TabComplete() fun! TabComplete() if getline('.')[col('.') - 2] =~ '\K' || pumvisible() return "\" else return "\" endif endfun " Minimalist-AutoCompletePop-Plugin set completeopt=menu,menuone,noinsert inoremap pumvisible() ? "\" : "\" autocmd InsertCharPre * call AutoComplete() fun! AutoComplete() if v:char =~ '\K' \ && getline('.')[col('.') - 4] !~ '\K' \ && getline('.')[col('.') - 3] =~ '\K' \ && getline('.')[col('.') - 2] =~ '\K' " last char \ && getline('.')[col('.') - 1] !~ '\K' call feedkeys("\", 'n') end endfun " }}} "- | MINIMALIST CLOSING TAGS | ---------------------------------------------{{{ inoremap " "" inoremap ' '' inoremap ( () inoremap [ [] inoremap { {} inoremap { {}O inoremap {; {};O " }}} "- | COMMENT BOXS | --------------------------------------------------------{{{ function! Insertcomment() let lnum = line('.') " insert a single-line C-style comment with one space inside call append(lnum - 1, ['/* */']) " move cursor to the inserted line, column 4 (between /* and */) call cursor(lnum, 4) startinsert endfunction nnoremap xc :call Insertcomment() inoremap xc :call Insertcomment() function! InsertCommentLine() let l:lines = [ \ '/* - | COMMENT | ------------------------------------------------------------*/', \ ] call append(line('.')-1, l:lines) normal! g$ " move cursor to the blank line endfunction nnoremap xl :call InsertCommentLine() inoremap xl :call InsertCommentLine() function! Insertcommentbox() let l:lines = [ \ '/* - | comment | --------------------------------------------------------------', \ ' * comment goes here', \ ' * --------------------------------------------------------------------------*/' \ ] call append(line('.')-1, l:lines) normal! j$ " move cursor to the blank line endfunction nnoremap xb :call Insertcommentbox() inoremap xb :call Insertcommentbox() "}}} "- | FOLD SECTIONS | ------------------------------------------------------ {{{ function! InsertFoldBox() let l:lines = [ \ '"- | FOLD | ----------------------------------------------------------------{{{', \ '', \ '"}}}' \ ] call append(line('.')-1, l:lines) normal! j$ " move cursor to the blank line endfunction nnoremap xz :call InsertFoldBox() inoremap xz :call InsertFoldBox() "}}}" "- | CUSTOM HIGHTLIGHTING | ------------------------------------------------{{{ call matchadd('Todo', '\v\BUG:', -1) call matchadd('Todo', '\v\NOTE:', -1) "}}}