" Settings
" Show Line Numbers
set number relativenumber
" Wrap Text
set wrap
" Set Text Encoding
set encoding=utf-8
" Status Bar
set laststatus=2
" No Startup Text
set shortmess=I
" Show Current Command
set showcmd
" Avoid Wrapping A Line In The Middle Of A Word
set linebreak
" Make Searching Better
set hlsearch
set incsearch
vnoremap "+y
map "+P
" Enable Colors In The Terminal
set termguicolors
" Highlight The Line Currently Under Cursor
set cursorline
" Make Update Time Smaller
set updatetime=250
" Enable Mouse
set mouse=a
set mousehide
" Show The File Currently Being Edited
set title
" Confirm You Want To Close Unsaved File
set confirm
" Enable Spellchecking
set spell
" Set History Higher
set history=10000
" Tabs
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
" Make Vim Act Normal In Windows
set nocompatible
" Turn On Syntax
syntax enable
filetype plugin on
let g:is_posix=1
" Enable Autocompletion
set wildmode=longest,list,full
" Make It So When You Split It Goes To The Right
set splitbelow splitright
" Make Hopping Around Split Windows Easier
map wincmd h
map wincmd j
map wincmd k
map wincmd l
" Remap S Which Is Equal To The Command cc To A Find And Replace Function
nnoremap S :%s//g
" Delete Whitespace On Save
autocmd BufWritePre * %s/\s\+$//e
" Backup History
if has('win64') || has('win32') || has('win16')
if !isdirectory('$LOCALAPPDATA\Temp\.vim-undo-dir')
silent! call mkdir('$LOCALAPPDATA\Temp\.vim-undo-dir', '', 0700)
set undodir=$LOCALAPPDATA\Temp\.vim-undo-dir
endif
else
if !isdirectory('/tmp/.vim-undo-dir')
silent! call mkdir('/tmp/.vim-undo-dir', '', 0700)
set undodir=/tmp/.vim-undo-dir
endif
endif
set undofile
" Have GDB Alias
autocmd VimEnter * packadd termdebug
" Grab Coc Settings
if has('win64') || has('win32') || has('win16')
if empty(glob('~\vimfiles\coc-settings.json'))
silent ! powershell -Command "
\ New-Item -Path ~\vimfiles -Name autoload -Type Directory -Force;
\ Invoke-WebRequest
\ -Uri 'https://raw.githubusercontent.com/tbrsvn/vimconfig/main/vimfiles/coc-settings.json'
\ -OutFile ~\vimfiles\coc-settings.json
\ "
endif
else
if empty(glob('~/.vim/coc-settings.json'))
silent !curl -fLo ~/.vim/coc-settings.json --create-dirs
\ https://raw.githubusercontent.com/tbrsvn/vimconfig/main/.vim/coc-settings.json
endif
endif
" Install Vim-Plug If Not Found
if has('win64') || has('win32') || has('win16')
if empty(glob('~\vimfiles\autoload\plug.vim'))
silent ! powershell -Command "
\ New-Item -Path ~\vimfiles -Name autoload -Type Directory -Force;
\ Invoke-WebRequest
\ -Uri 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
\ -OutFile ~\vimfiles\autoload\plug.vim
\ "
endif
else
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
endif
endif
" Plugins
call plug#begin()
Plug 'luochen1990/rainbow'
Plug 'tpope/vim-fugitive'
Plug 'vimwiki/vimwiki'
Plug '907th/vim-auto-save'
Plug 'tpope/vim-surround'
Plug 'yegappan/mru'
Plug 'vim-airline/vim-airline'
Plug 'tpope/vim-commentary'
Plug 'tc50cal/vim-terminal'
Plug 'lervag/vimtex'
Plug 'xianzhon/vim-code-runner'
Plug 'ryanoasis/vim-devicons'
Plug 'pbrisbin/vim-mkdir'
Plug 'mhinz/vim-startify'
Plug 'mbbill/undotree'
Plug 'catppuccin/vim', { 'as': 'catppuccin' }
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']}
Plug 'preservim/nerdtree' |
\ Plug 'Xuyuanp/nerdtree-git-plugin'
call plug#end()
" Run PlugInstall And PlugClean If There Are Missing Plugins
autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
\| PlugInstall --sync | source $MYVIMRC | PlugClean
\| endif
" Theme
colorscheme catppuccin_mocha
set background=dark
" Setup The Plugins
let $LANG='en_US.UTF-8'
let g:rainbow_conf = {
\ 'guifgs': ['#ec9ca4', '#89cedc', '#b6bdf9', '#a4dc94', '#e4cce4', '#8cacf4', '#f4c4c4', '#c4a4f4']
\ }
let g:airline_theme = 'catppuccin_mocha'
let NERDTreeShowHidden=1
let g:NERDTreeDirArrowExpandable='+'
let g:NERDTreeDirArrowCollapsible='~'
silent! autocmd VimEnter * NERDTree | wincmd p
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
let g:rainbow_active = 1
silent! let g:auto_save = 1
let g:coc_disable_startup_warning = 1
let MRU_Auto_Close = 1
let MRU_Use_Current_Window = 1
" Code Runner
let g:CodeRunnerCommandMap = {
\ 'python' : 'python3 $fileName',
\ 'go' : 'go run $fileName',
\ 'perl' : 'perl $fileName',
\ 'lua' : 'lua $fileName',
\ 'ruby' : 'ruby $fileName',
\ 'php' : 'php $fileName',
\ 'javascript' : 'node $fileName'
\ }
nmap r CodeRunner
" Configure Plugin Shortcuts
" MRU
nnoremap m :MRU
" Setup Tab Shortcuts
nnoremap :tabnew:NERDTreeToggle
nnoremap BufferClose
nnoremap BufferPrevious
nnoremap BufferNext
" Undo Tree
nnoremap ut :UndotreeToggle
" Markdown Previewer
nmap MarkdownPreview
nmap MarkdownPreviewStop
nmap MarkdownPreviewToggle
" Nerdtree
nnoremap n :NERDTreeFocus
nnoremap :NERDTree
nnoremap :NERDTreeToggle
nnoremap :NERDTreeFind
" Coc
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
inoremap
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? '' :
\ coc#refresh()
nmap gd (coc-definition)
nmap gy (coc-type-definition)
nmap gi (coc-implementation)
nmap gr (coc-references)
nnoremap o CocOutline
if has('patch-8.1.1564')
set signcolumn=number
else
set signcolumn=no
endif
let g:coc_global_extensions = ['coc-pairs', 'coc-json', 'coc-tsserver', 'coc-html', 'coc-snippets', 'coc-css', 'coc-cssmodules', 'coc-r-lsp', 'coc-discord', 'coc-clangd', 'coc-python', 'coc-java', 'coc-texlab', 'coc-xml', 'coc-yaml']