" Manage plugins using vim-plug if ! filereadable(system('echo -n "${XDG_CONFIG_HOME:-$HOME/.config}/nvim/autoload/plug.vim"')) echo "Downloading junegunn/vim-plug to manage plugins..." silent !mkdir -p ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/autoload/ silent !curl "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" > ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/autoload/plug.vim autocmd VimEnter * PlugInstall endif call plug#begin(system('echo -n "${XDG_CONFIG_HOME:-$HOME/.config}/nvim/plugged"')) Plug 'jiangmiao/auto-pairs' Plug 'junegunn/goyo.vim' Plug 'alvan/vim-closetag' Plug 'ap/vim-css-color' Plug 'vimwiki/vimwiki' call plug#end() " Basic options set autochdir " Always change directory to current file set autoindent " Keeps indentation on new lines set hlsearch " Highlight search hits set ignorecase " Case-insensitive search... set linebreak " Word wrap set mouse=a " Because sometimes it's just easier to use the mouse set number relativenumber " Enable relative line numbers set smartcase " ...Unless the search term is capital set splitbelow splitright " Open splits on bottom/right instead of top/left set termguicolors " Enable GUI colors for the terminal to get truecolor set wildmode=longest,list,full " Enable file auto-complete set listchars=tab:⇥\ \,space:· " Highlight tabs and spaces set list " Show whitespace characters defined in listchars syntax on " Enable syntax highlighting " Filetype options autocmd BufRead,BufNewFile *.tex set filetype=tex au Filetype tex let b:autopairs_enabled = 0 au Filetype tex setlocal indentexpr= au BufRead,BufNewFile *.tssg set filetype=tssg " VimWiki options let g:vimwiki_list = [{'path': '~/docs/school/arc/docs/wiki/', 'path_html': '~/docs/school/arc/docs/wiki/site/'}] " Keybindings " Set leader-key to comma let mapleader ="," " Invoke goyo with comma-m nmap m :Goyo 120x " Invoke spellcheck mode with comma-o nmap l :setlocal spell! spelllang=en_us " Invoke spellcheck mode with comma-o nmap c :set cursorcolumn! " Send cursor to top or bottom currently visible line with ctrl-jk " map :call cursor(line('w$'),col('.')) " map :call cursor(line('w0'),col('.')) " Navigate faster than hjkl with ctrl-hjlk nmap 0 nmap nmap nmap $ " Faster split navigation (leader-wasd, as opposed to ctrl-w + hjlk) map a h map s j map w k map d l " Streamlined tab navigation with chromium inspired keybindings nmap gt nmap t :tabnew nmap :tabnew " Copy, paste, and cut with standard bindings map "+y "map "+gp map "+x " Colorscheme for root and normal users (since vimrc is just symlinked to the root user's home) if ($USER) == 'root' colorscheme zellner else if empty($DISPLAY) colorscheme default else set bg=dark let g:gruvbox_contrast_dark = 'hard' colorscheme gruvbox-timmy endif endif " Behaviors exclusive to either the tty or a terminal emulator in a graphical environment function GetTermPID(temu) let pinfo = ['', getpid(), ''] while !(pinfo[2] =~ a:temu) let pinfo = split(system('ps h -o pid,ppid,command= -p' . pinfo[1])) endwhile return pinfo[0] endfunction function SetTermClassName(termpid, name) silent exec "!settitle " . a:termpid . " " . a:name endfunction if empty($DISPLAY) " Clear the tty screen after exiting vim "autocmd QuitPre * :!clear else set cursorline " Highlight current line " Change the terminal emulator's window title and class name to vim let temu = "st" let temupid = GetTermPID(temu) autocmd BufEnter * :set title autocmd VimEnter * call SetTermClassName(temupid, "Vim") autocmd VimLeave * call SetTermClassName(temupid, "st") "let &titleold="st" endif " Set the cursor on a per-mode basis (Not needed in NVIM) "let &t_SI.="\[6 q" " Insert mode "let &t_SR.="\[4 q" " Replace mode "let &t_EI.="\[2 q" " Normal mode "let &t_ti.="\[2 q" " Cursor on startup " Automatically deletes all trailing whitespace on save function DelWS() :let ccc=col('.') " Set current cursor column :let ccl=line('.') " Set current cursor line :%s/\s\+$//e " Find and remove trailing whitespace on each line :call cursor(ccl,ccc) " Move cursor to previous position endfunction autocmd BufWritePre * call DelWS() " Disables automatic commenting on newline: autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o " Perform dot commands over visual blocks: vnoremap . :normal . " Save file as sudo on files that require root permission cnoremap w!! execute 'silent! write !doas tee % >/dev/null' edit! " Plugin options " closetag let g:closetag_filenames = '*.html,*.xhtml,*.phtml' " Get rid of the pointless .viminfo files that clutter the home directory let skip_defaults_vim=1 set viminfo=""