From a199184c4c0ab393d2a0b8d3567a81adb3262419 Mon Sep 17 00:00:00 2001 From: Randy Jordan Date: Sun, 3 Nov 2024 14:26:25 -0600 Subject: [PATCH] Vim config --- .vimrc | 257 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 .vimrc diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..cbcec55 --- /dev/null +++ b/.vimrc @@ -0,0 +1,257 @@ +"GENERAL SETTINGS---------------------------------------------------------- {{{ + +colorscheme slate +set t_Co=256 +set previewheight=3 +set splitbelow +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=4 " Set tab width to 4 columns. +set expandtab " Use space characters instead of tabs. + + +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 + +" }}} + +"SPLITS/WINDOWS/TABS/BUFFERS---------------------------------------------{{{ + " Resize split windows using arrow keys by pressing: + " CTRL+UP, CTRL+DOWN, CTRL+LEFT, or CTRL+RIGHT. + nnoremap ,v :vsplit + nnoremap ,h :split + noremap + + noremap - + noremap > + noremap < + "Switch buffers by tab,shift tab for previous. + nnoremap :if &modifiable && !&readonly && &modified :write :endif:bnext + nnoremap :if &modifiable && !&readonly && &modified :write :endif:bprevious +"}}} + +nnoremap :ptag +nnoremap :pclose + +" NETRW FILE TREE TOGGLE WITH CTRL-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 + +map :call ToggleVExplorer() + +function! OpenToRight() + :normal v + let g:path=expand('%:p') + :q! + execute 'belowright vnew' g:path + :normal +endfunction +" }}} + +"TOGGLE TERMINAL WITH CTRL-T----------------------------------------------- {{{ + let mapleader=" " + 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 :call ToggleTerminal() +tnoremap N:call ToggleTerminal() + +" }}} + +"LIST BUFFERS WITH CTRL-B---------------------------------------------------{{{ + nnoremap :set nomore :ls :set more :b + +"}}} + +"COPY AND PASTE----------------------------------------------------------{{{ + vmap "+y + map "+p +"}}} + +"CODE SNIPPETS/TEMPLATES ---------------------------------------------------{{{ + "HTML SNIPPET/TEMPLATE" + nnoremap ,html :-1read $HOME/eg/index.html:11 + if has("autocmd") + augroup templates + autocmd BufNewFile index.html 0r ~/eg/index.html + autocmd BufReadPost index.html normal! 10j + augroup END + endif + + "CSS SNIPPET/TEMPLATE" + nnoremap ,css :-1read $HOME/eg/style.css + if has("autocmd") + augroup templates + autocmd BufNewFile style.css 0r ~/eg/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 + + + +"}}} + +" 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 + +" }}} + +" FILE SETTINGS------------------------------------------------------------ {{{ + +" 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 +" }}}