let mapleader ="," 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 'tpope/vim-surround' " surround for parentheses, brackets, quotes, XML tags etc Plug 'tpope/vim-fugitive' " git helper Plug 'preservim/nerdtree' " file tree Plug 'jreybert/vimagit' " git diffing with :Magit Plug 'lukesmithxyz/vimling' " toggle deadkeys, IPA, prose-mode Plug 'junegunn/goyo.vim' " prose mode but better Plug 'vimwiki/vimwiki' " take notes in vimwiki Plug 'michal-h21/vimwiki-sync' " sync notes to git repo Plug 'itchyny/calendar.vim' " integrate calendar into vimwiki (todo) Plug 'vim-airline/vim-airline' " status bar Plug 'tpope/vim-commentary' " comment out word / line with 'gc' Plug 'ap/vim-css-color' " show css colors Plug 'editorconfig/editorconfig-vim' " editor-config extension for vim Plug 'scrooloose/syntastic' " syntax checker Plug 'airblade/vim-gitgutter' " show git diff insertions / deletions Plug 'junegunn/vim-emoji' " emoji autocomplete + emojis in gitgutter Plug 'rrethy/vim-illuminate' " highlight other uses of the current word under the cursor " Plug 'jupyter-vim/jupyter-vim' " one day we'll start using jupyter in vim Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " fuzzy-finder call plug#end() " show invisibles set fileencoding=utf-8 set list set listchars=tab:→\ ,nbsp:␣,trail:•,precedes:«,extends:» " TODO: remove line below or line above " set listchars=tab:→\ ,trail:␣,extends:…,eol:⏎ " vim-emoji setup set completefunc=emoji#complete let g:gitgutter_sign_added = emoji#for('small_blue_diamond') let g:gitgutter_sign_modified = emoji#for('small_orange_diamond') let g:gitgutter_sign_removed = emoji#for('small_red_triangle') let g:gitgutter_sign_modified_removed = emoji#for('collision') " syntastic recommended settings set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%* let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 let g:syntastic_python_checkers = ['python', 'flake8'] let g:syntastic_python_python_exec = 'python3' " VimWiki setup let g:vimwiki_sync_branch = "main" let g:vimwiki_sync_commit_message = '$USER @ $HOST' let g:sync_taskwarrior = 0 let g:vimwiki_markdown_link_ext = 1 " explicitly add .md extension in vimwiki let wiki_1 = {} let wiki_1.path = '~/.local/share/nvim/vimwiki/' let wiki_1.syntax = 'markdown' let wiki_1.ext = 'md' let wiki_2 = {} let wiki_2.path = '~/methodology/' let wiki_2.syntax = 'markdown' let wiki_2.ext = 'md' let wiki_3 = {} let wiki_3.path = '~/administration/' let wiki_3.syntax = 'markdown' let wiki_3.ext = 'md' let g:vimwiki_list = [wiki_1, wiki_2, wiki_3] " Calendar setup let g:calendar_first_day = 'monday' " set monday as first day of week let g:calendar_week_number = 1 " add weeknumber " LARBS inspired below set title set bg=light set go=a set mouse=a set nohlsearch set clipboard+=unnamedplus set noshowmode set noruler set laststatus=0 set noshowcmd " Some basics: nnoremap c "_c set nocompatible filetype plugin on syntax on set encoding=utf-8 set number relativenumber " Enable autocompletion: set wildmode=longest,list,full " Disables automatic commenting on newline: autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o " Perform dot commands over visual blocks: vnoremap . :normal . " Goyo plugin makes text more readable when writing prose: map f :Goyo \| set bg=light \| set linebreak " Spell-check set to o, 'o' for 'orthography': map o :setlocal spell! spelllang=en_us " Splits open at the bottom and right, which is non-retarded, unlike vim defaults. set splitbelow splitright " Nerd tree map n :NERDTreeToggle autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif if has('nvim') let NERDTreeBookmarksFile = stdpath('data') . '/NERDTreeBookmarks' else let NERDTreeBookmarksFile = '~/.vim' . '/NERDTreeBookmarks' endif " vimling: nm d :call ToggleDeadKeys() imap d :call ToggleDeadKeys()a nm i :call ToggleIPA() imap i :call ToggleIPA()a nm q :call ToggleProse() " Shortcutting split navigation, saving a keypress: map h map j map k map l " Replace ex mode with gq map Q gq " Check file in shellcheck: map s :!clear && shellcheck -x % " Open my bibliography file in split map b :vsp$BIB map r :vsp$REFER " Replace all is aliased to S. nnoremap S :%s//g " Compile document, be it groff/LaTeX/markdown/etc. map c :w! \| !compiler "%" " Open corresponding .pdf/.html or preview map p :!opout % " Runs a script that cleans out tex build files whenever I close out of a .tex file. autocmd VimLeave *.tex !texclear % " Ensure files are read as what I want: let g:vimwiki_ext2syntax = {'.Rmd': 'markdown', '.rmd': 'markdown','.md': 'markdown', '.markdown': 'markdown', '.mdown': 'markdown'} map v :VimwikiIndex " let g:vimwiki_list = [{'path': '~/.local/share/nvim/vimwiki', 'syntax': 'markdown', 'ext': '.md'}] autocmd BufRead,BufNewFile /tmp/calcurse*,~/.calcurse/notes/* set filetype=markdown autocmd BufRead,BufNewFile *.ms,*.me,*.mom,*.man set filetype=groff autocmd BufRead,BufNewFile *.tex set filetype=tex " Save file as sudo on files that require root permission cnoremap w!! execute 'silent! write !sudo tee % >/dev/null' edit! " Enable Goyo by default for mutt writing autocmd BufRead,BufNewFile /tmp/neomutt* let g:goyo_width=80 autocmd BufRead,BufNewFile /tmp/neomutt* :Goyo | set bg=light autocmd BufRead,BufNewFile /tmp/neomutt* map ZZ :Goyo\|x! autocmd BufRead,BufNewFile /tmp/neomutt* map ZQ :Goyo\|q! " Automatically deletes all trailing whitespace and newlines at end of file on save. & reset cursor position autocmd BufWritePre * let currPos = getpos(".") autocmd BufWritePre * %s/\s\+$//e autocmd BufWritePre * %s/\n\+\%$//e autocmd BufWritePre *.[ch] %s/\%$/\r/e autocmd BufWritePre * cal cursor(currPos[1], currPos[2]) " When shortcut files are updated, renew bash and ranger configs with new material: autocmd BufWritePost bm-files,bm-dirs !shortcuts " Run xrdb whenever Xdefaults or Xresources are updated. autocmd BufRead,BufNewFile Xresources,Xdefaults,xresources,xdefaults set filetype=xdefaults autocmd BufWritePost Xresources,Xdefaults,xresources,xdefaults !xrdb % " Recompile dwmblocks on config edit. autocmd BufWritePost ~/.local/src/dwmblocks/config.h !cd ~/.local/src/dwmblocks/; sudo make install && { killall -q dwmblocks;setsid -f dwmblocks } " Turns off highlighting on the bits of code that are changed " so the line that is changed is highlighted but the actual text " that has changed stands out on the line and is readable. if &diff highlight! link DiffText MatchParen endif " Function for toggling the bottom statusbar: let s:hidden_all = 0 function! ToggleHiddenAll() if s:hidden_all == 0 let s:hidden_all = 1 set noshowmode set noruler set laststatus=0 set noshowcmd else let s:hidden_all = 0 set showmode set ruler set laststatus=2 set showcmd endif endfunction nnoremap h :call ToggleHiddenAll() " Load command shortcuts generated from bm-dirs and bm-files via shortcuts script. " Here leader is ";". " So ":vs ;cfz" will expand into ":vs /home//.config/zsh/.zshrc" " if typed fast without the timeout. " source ~/.config/nvim/shortcuts.vim