" Plugins --- {{{ 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 autocmd VimEnter * CHADdeps endif let g:polyglot_disabled = ['markdown'] call plug#begin(stdpath('data') . '/plugged') Plug 'rafi/awesome-vim-colorschemes' " Provides a number of pretty themes Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " Fast fuzzy file searching Plug 'junegunn/fzf.vim' Plug 'tpope/vim-fugitive' " Adds git support to vim Plug 'tpope/vim-surround' " Adds motions for dealing with parentheses " Plug 'tpope/vim-commentary' " Easily comment/uncomment lines with `gc` (updated to work with style/script) Plug 'tpope/vim-unimpaired' " A series of bindings for complementary actions [ and ] for adding lines before and after Plug 'tpope/vim-vinegar' " Improvements to the file browser Plug 'jiangmiao/auto-pairs' " Creates closing parentheses when writing the opening, use to wrap the next word/group, to disable Plug 'mattn/emmet-vim' " Emmet support ,em to toggle it Plug 'dylanaraps/wal.vim' " Set the theme to match the system colours Plug 'godlygeek/tabular' " Easy alligning of code based on match, :Tab/| will line up markdown tables Plug 'plasticboy/vim-markdown' " All markdown features (some are disabled by polyglot) Plug 'sheerun/vim-polyglot' " Dynamically loads syntax hilighting from multiple packages Plug 'ms-jpq/chadtree', { 'branch': 'chad', 'do': 'python3 -m chadtree deps' } " A file tree "Plug 'phpactor/phpactor', { 'do': 'composer install', 'for': 'php' } "Plug 'ncm2/ncm2' "Plug 'roxma/nvim-yarp' "autocmd BufEnter * call ncm2#enable_for_buffer() "set completeopt=noinsert,menuone,noselect "Plug 'phpactor/ncm2-phpactor' " " vim-devicons must be last plugin " Plug 'ryanoasis/vim-devicons' " Icons for file tree call plug#end() " }}} " Basic settings ---- {{{ set nocompatible "Use the latest vim settings/options syntax enable "Enable syntax highlighting let mapleader = ',' "The default leader is \, but a comma is much better let localleader = '\\' "The leader to be used for filetype specific mappings set number relativenumber "Show relative line numbers set noerrorbells visualbell t_vb= "Remove the bells set tabstop=4 "Set how many columns a tab counts for set shiftwidth=4 "How many columns text is indented when using reindent set softtabstop=4 "Set columns for tabs in insert mode set expandtab "Use spaces instead of tabs set smartindent "Automatically indent code set ignorecase "Ignores case when searching set smartcase "Doesn't ignore case when the search includes upper case characters set backupdir=/tmp// "Store backup files in the /tmp directory set directory=/tmp// "Store swap files in the /tmp directory set undodir=/tmp// "Store undo history in the /tmp directory set undofile "Store the undo history "set spell "Enable spell checking set autowriteall "Save the file when switching buffers set colorcolumn=80,120 "}}} " Visuals ---- {{{ if isdirectory(system('echo -n "${XDG_CACHE_HOME:-$HOME/.cache}/wal"')) colorscheme guiwal else colorscheme atom-dark endif set t_Co=256 "User 256 colors. This is useful for terminal vim set guifont=Fira_Code:h17 set guioptions-=e "We don't want GUI tabs set termguicolors set guioptions-=l set guioptions-=L set guioptions-=r set guioptions-=R set nowrap "Don't wrap lines around "Set line number Colour to be same as background hi LineNr guibg=bg "Get rid of ugly split borders hi vertsplit guifg=bg guibg=bg " }}} " Split Management --- {{{ set splitbelow set splitright "We'll set simpler mappings to switch between splits "Decrease window size (replaces some weird netrw stuff) nnoremap - "Increase window size (Redraws the screen, use :redraw instead) nnoremap + nnoremap nnoremap nnoremap nnoremap "Decrease window size (Backspace clone) inoremap - "Increase window size (Replaces leaving `insertmode`, don't use `insertmode`) inoremap + inoremap i inoremap i inoremap i inoremap i " }}} " Search --- {{{ set hlsearch set incsearch set path+=** " }}} " Mappings --- {{{ " Editing files - {{{ "Make it easy to edit the vimrc file nnoremap ev :tabedit $MYVIMRC "Source the vimrc file nnoremap es :source $MYVIMRC " }}} "Changing unused ctrl bindings "Turn on git blame nnoremap GBlame "List all tags in the current buffer (replaced pageup, use CTRL-u instead) nnoremap BTags "List all tags in directory nnoremap Tags "List all the recently opened files (replaced scroll one line up, use "k") nnoremap History "Search within the current buffer (replaced pagedown, use CTRL-d instead) nnoremap / "Search within the whole project nnoremap Rg "Move line down (uses vim-unimpaired) (replaced move down, use "j") nnoremap "Move line up (uses vim-unimpaired) (replaced move up, use "k") nnoremap "Does not work because of legacy reasons " nnoremap "Search marks (replaced "j" clone) nnoremap Marks "Search version controlled files (replaced move up, use "k") nnoremap GFiles "Search all files in directory nnoremap Files "Toggle file draw nnoremap CHADopen "Search all snippets (uses ultisnips) nnoremap Snippets "Search git history (replaced scroll one line up, use "k") nnoremap Commits "Search git history within current buffer/selection nnoremap BCommits "Turn on git blame inoremap GBlame "List all tags in the current buffer inoremap BTags "List all tags in directory inoremap Tags "List all the recently opened files (replaced inserting characters from below) inoremap History "Search within the current buffer inoremap / "Search within the whole project inoremap Rg "Move line down (uses vim-unimpaired) (replaced clone) inoremap ddpi "Move line up (uses vim-unimpaired) (replaced start digraph, use command instead) inoremap ddkPi "Does not work because of legacy reasons " inoremap Marks "Add line below (replaced execute single command in normal) inoremap o "Add line above inoremap O "Search version controlled files (replaced autocomplete reverse) inoremap GFiles "Search all files in directory inoremap Files "Toggle file draw (replaces CTRL-v clone) nnoremap CHADopen "Search all snippets (uses ultisnips) inoremap Snippets "Search git history (replaced inserting characters from above) inoremap Commits "Search git history within current buffer/selection inoremap BCommits "Add simple highlight removal nnoremap :nohlsearch "Convert tabs to spaces nnoremap :retab "Git mappings nnoremap ga :Git add % nnoremap gb :Git blame nnoremap gC :Git commit nnoremap gp :Git push nnoremap gP :Git pull "Map movement keys to Escape inoremap jj inoremap jk inoremap kk inoremap hh "Delete a line in insert mode " inoremap ddi "Use semicolon instead of colon for commands nnoremap ; : nnoremap : ; "Append the line with a semicolon inoremap ; mzA;`za nnoremap ; mzA;`za "Easily navigate items in the quickfix menu nnoremap ] :cnext nnoremap [ :cprevious "Indent arrays nnoremap { mzF[`a``%i`z nnoremap } mzF[`a``%i`zvi[:s/,\s*/,\r/gvi[=`z:nohlsearch "A command to properly indent json code command! FormatJSON %!python -m json.tool " Allow saving of files as doas command! W execute 'silent! w !doas /usr/bin/tee % >/dev/null' edit! command! X execute 'silent! x !doas /usr/bin/tee % >/dev/null' edit! " }}} " Plugins --- {{{ " Toggle emmet completion using with em let g:emmet_completion = 0 function ToggleEmmet() if g:emmet_completion echo "Emmet completion off!" let g:user_emmet_expandabbr_key=',' iunmap let g:emmet_completion = 0 else echo "Emmet completion on!" let g:user_emmet_expandabbr_key='' imap emmet#expandAbbrIntelligent("\") let g:emmet_completion = 1 endif endfunction nnoremap em :call ToggleEmmet() " Conceal markdown text set conceallevel=3 let g:AutoPairsFlyMode = 1 let g:AutoPairsShortcutBackInsert = '' " Use to insert the closing parentheses if it jumped ahead by mistake let g:chadtree_settings = { \ 'theme': { \ 'icon_glyph_set': 'devicons', \ 'text_colour_set': 'env', \ 'icon_colour_set': 'github', \ "discrete_colour_map": { \ "black": "#21222c", \ "red": "#ff5555", \ "green": "#50fa7b", \ "yellow": "#f1fa8c", \ "blue": "#bd93f9", \ "magenta": "#ff79c6", \ "cyan": "#8be9fd", \ "white": "#f8f8f2", \ "bright_black": "#6272a4", \ "bright_red": "#ff6e6e", \ "bright_green": "#69ff94", \ "bright_yellow": "#ffffa5", \ "bright_blue": "#d6acff", \ "bright_magenta": "#ff92df", \ "bright_cyan": "#a4ffff", \ "bright_white": "#ffffff" \ } \ } \ } " function s:set_commentary_format() " echo "running command" " if &filetype =~ 'vue\|html\|svelte' " if searchpair('<\(script\|style\)', '', '', 'Wn') " let b:commentary_format="// %s" " else " let b:commentary_format=&commentstring " endif " endif " endfunction " xnoremap gc :call set_commentary_format()Commentary " nnoremap gc :call set_commentary_format()Commentary " onoremap gc :call set_commentary_format()Commentary " nnoremap gcc :call set_commentary_format()Commentary " nnoremap cgc :call set_commentary_format()Commentary " nnoremap cgu :call set_commentary_format()CommentaryCommentary " }}} " Moving around --- {{{ "Use capital H and L to move to the start and end of lines nnoremap H ^ nnoremap L $ " }}} " Operator mappings --- {{{ onoremap in( :normal! f(vi( onoremap il( :normal! F)vi( onoremap an( :normal! f(va( onoremap al( :normal! F)va( onoremap an{ :normal! f{vi{ onoremap al{ :normal! F}vi " }}} " Abbreviations --- {{{ iabbrev adn and iabbrev waht what iabbrev tehn then iabbrev tihs this iabbrev teh the iabbrev Teh The " }}} " Auto-Commands --- {{{ "Automatically source the config files on save. augroup autosourcing autocmd! autocmd BufWritePost $MYVIMRC source % "Source the vimrc file augroup END "Fold vimrc and zshrc files on open augroup autofolding autocmd! autocmd BufReadPost $MYVIMRC :setlocal foldlevelstart=0 autocmd FileType vim setlocal foldmethod=marker autocmd BufReadPost zsh :setlocal foldlevelstart=0 autocmd FileType zsh setlocal foldmethod=marker augroup END "Set commentary formats function s:setcommentary() if &commentstring =~ '/\*\s*%s\s*\*/' let b:commentary_format="// %s" endif endfunction augroup autocomment autocmd! autocmd FileType * call setcommentary() augroup END "Automatically save files augroup autosaving autocmd! autocmd FocusLost * silent! wa "Save all files when moving away from the window augroup END augroup modes autocmd! autocmd FocusLost * call feedkeys("\") "Go to normal mode when moving away autocmd BufNewFile * call feedkeys("i") "Go to insert mode when starting a new file augroup END "Recompile suckless software when updating config augroup suckless autocmd BufWritePost ~/.local/src/dwmblocks/config.h !cd ~/.local/src/dwmblocks/; doas make install && { killall -q dwmblocks;setsid -f dwmblocks } autocmd BufWritePost ~/.local/src/dwm/config.h !cd ~/.local/src/dwm/; doas make clean install autocmd BufWritePost ~/.local/src/st/config.h !cd ~/.local/src/st/; doas make clean install " }}} " Notes and tips " - press 'zz' to instantly center the line where the cursor is located. " - You can increment numbers with . " - To operate on multiple lines use to select the lines, to go to " insert mode, perform edit, press . " - Use the command :r to paste the output of a command to the buffer.