Files
nvim/init.vim
2021-11-23 19:33:07 +00:00

395 lines
13 KiB
VimL

" 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 [<space> and ]<space> 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 <m-e> to wrap the next word/group, <m-p> 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 <C-H> <C-W>-
"Increase window size (Redraws the screen, use :redraw instead)
nnoremap <C-L> <C-W>+
nnoremap <C-S-H> <C-W><C-H>
nnoremap <C-S-L> <C-W><C-L>
nnoremap <C-S-J> <C-W><C-J>
nnoremap <C-S-K> <C-W><C-K>
"Decrease window size (Backspace clone)
inoremap <C-H> <C-W>-
"Increase window size (Replaces leaving `insertmode`, don't use `insertmode`)
inoremap <C-L> <C-W>+
inoremap <C-S-H> <Esc><C-W><C-H>i
inoremap <C-S-L> <Esc><C-W><C-L>i
inoremap <C-S-J> <Esc><C-W><C-J>i
inoremap <C-S-K> <Esc><C-W><C-K>i
" }}}
" Search --- {{{
set hlsearch
set incsearch
set path+=**
" }}}
" Mappings --- {{{
" Editing files - {{{
"Make it easy to edit the vimrc file
nnoremap <Leader>ev :tabedit $MYVIMRC<cr>
"Source the vimrc file
nnoremap <Leader>es :source $MYVIMRC<cr>
" }}}
"Changing unused ctrl bindings
"Turn on git blame
nnoremap <c-s-a> <cmd>GBlame<cr>
"List all tags in the current buffer (replaced pageup, use CTRL-u instead)
nnoremap <c-b> <cmd>BTags<cr>
"List all tags in directory
nnoremap <c-s-b> <cmd>Tags<cr>
"List all the recently opened files (replaced scroll one line up, use "k")
nnoremap <c-e> <cmd>History<cr>
"Search within the current buffer (replaced pagedown, use CTRL-d instead)
nnoremap <c-f> /
"Search within the whole project
nnoremap <c-s-f> <cmd>Rg<cr>
"Move line down (uses vim-unimpaired) (replaced move down, use "j")
nnoremap <c-j> <c-e>
"Move line up (uses vim-unimpaired) (replaced move up, use "k")
nnoremap <c-k> <c-y>
"Does not work because of legacy reasons
" nnoremap <c-m>
"Search marks (replaced "j" clone)
nnoremap <c-n> <cmd>Marks<cr>
"Search version controlled files (replaced move up, use "k")
nnoremap <c-p> <cmd>GFiles<cr>
"Search all files in directory
nnoremap <c-s-p> <cmd>Files<cr>
"Toggle file draw
nnoremap <c-q> <cmd>CHADopen<cr>
"Search all snippets (uses ultisnips)
nnoremap <c-s> <cmd>Snippets<cr>
"Search git history (replaced scroll one line up, use "k")
nnoremap <c-y> <cmd>Commits<cr>
"Search git history within current buffer/selection
nnoremap <c-s-y> <cmd>BCommits<cr>
"Turn on git blame
inoremap <c-s-a> <cmd>GBlame<cr>
"List all tags in the current buffer
inoremap <c-b> <cmd>BTags<cr>
"List all tags in directory
inoremap <c-s-b> <cmd>Tags<cr>
"List all the recently opened files (replaced inserting characters from below)
inoremap <c-e> <cmd>History<cr>
"Search within the current buffer
inoremap <c-f> <Esc>/
"Search within the whole project
inoremap <c-s-f> <cmd>Rg<cr>
"Move line down (uses vim-unimpaired) (replaced <CR> clone)
inoremap <c-j> <Esc>ddpi
"Move line up (uses vim-unimpaired) (replaced start digraph, use command instead)
inoremap <c-k> <Esc>ddkPi
"Does not work because of legacy reasons
" inoremap <c-m> <cmd>Marks<cr>
"Add line below (replaced execute single command in normal)
inoremap <c-o> <Esc>o
"Add line above
inoremap <c-s-o> <Esc>O
"Search version controlled files (replaced autocomplete reverse)
inoremap <c-p> <cmd>GFiles<cr>
"Search all files in directory
inoremap <c-s-p> <cmd>Files<cr>
"Toggle file draw (replaces CTRL-v clone)
nnoremap <c-q> <cmd>CHADopen<cr>
"Search all snippets (uses ultisnips)
inoremap <c-s> <cmd>Snippets<cr>
"Search git history (replaced inserting characters from above)
inoremap <c-y> <cmd>Commits<cr>
"Search git history within current buffer/selection
inoremap <c-s-y> <cmd>BCommits<cr>
"Add simple highlight removal
nnoremap <Leader><space> :nohlsearch<cr>
"Convert tabs to spaces
nnoremap <Leader><Tab> :retab<cr>
"Git mappings
nnoremap ga :Git add %<cr>
nnoremap gb :Git blame<cr>
nnoremap gC :Git commit<cr>
nnoremap gp :Git push<cr>
nnoremap gP :Git pull<cr>
"Map movement keys to Escape
inoremap jj <Esc>
inoremap jk <Esc>
inoremap kk <Esc>
inoremap hh <Esc>
"Delete a line in insert mode
" inoremap <C-d> <Esc>ddi
"Use semicolon instead of colon for commands
nnoremap ; :
nnoremap : ;
"Append the line with a semicolon
inoremap <Leader>; <Esc>mzA;<Esc>`za
nnoremap <Leader>; mzA;<Esc>`za<Esc>
"Easily navigate items in the quickfix menu
nnoremap <Leader>] :cnext<cr>
nnoremap <Leader>[ :cprevious<cr>
"Indent arrays
nnoremap <Leader>{ mzF[`a<cr><Esc>``%i<cr><Esc>`z
nnoremap <Leader>} mzF[`a<cr><Esc>``%i<cr><Esc>`zvi[:s/,\s*/,\r/g<cr>vi[=<Esc>`z:nohlsearch<cr>
"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' <Bar> edit!
command! X execute 'silent! x !doas /usr/bin/tee % >/dev/null' <Bar> edit!
" }}}
" Plugins --- {{{
" Toggle emmet completion using <Tab> with <Leader>em
let g:emmet_completion = 0
function ToggleEmmet()
if g:emmet_completion
echo "Emmet completion off!"
let g:user_emmet_expandabbr_key=','
iunmap <tab>
let g:emmet_completion = 0
else
echo "Emmet completion on!"
let g:user_emmet_expandabbr_key='<Tab>'
imap <expr> <tab> emmet#expandAbbrIntelligent("\<tab>")
let g:emmet_completion = 1
endif
endfunction
nnoremap <Leader>em :call ToggleEmmet()<cr>
" Conceal markdown text
set conceallevel=3
let g:AutoPairsFlyMode = 1
let g:AutoPairsShortcutBackInsert = '<m-b>' " Use <m-b> 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\)', '', '</\(script\|style\)>', 'Wn')
" let b:commentary_format="// %s"
" else
" let b:commentary_format=&commentstring
" endif
" endif
" endfunction
" xnoremap gc :call <SID>set_commentary_format()<CR><Plug>Commentary
" nnoremap gc :call <SID>set_commentary_format()<CR><Plug>Commentary
" onoremap gc :call <SID>set_commentary_format()<CR><Plug>Commentary
" nnoremap gcc :call <SID>set_commentary_format()<CR><Plug>Commentary
" nnoremap cgc :call <SID>set_commentary_format()<CR><Plug>Commentary
" nnoremap cgu :call <SID>set_commentary_format()<CR><Plug>Commentary<Plug>Commentary
" }}}
" Moving around --- {{{
"Use capital H and L to move to the start and end of lines
nnoremap H ^
nnoremap L $
" }}}
" Operator mappings --- {{{
onoremap in( :<C-u>normal! f(vi(<cr>
onoremap il( :<C-u>normal! F)vi(<cr>
onoremap an( :<C-u>normal! f(va(<cr>
onoremap al( :<C-u>normal! F)va(<cr>
onoremap an{ :<C-u>normal! f{vi{<cr>
onoremap al{ :<C-u>normal! F}vi<cr>
" }}}
" 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 <SID>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("\<Esc>") "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 <c-a>.
" - To operate on multiple lines use <c-v> to select the lines, <c-i> to go to
" insert mode, perform edit, press <esc>.
" - Use the command :r to paste the output of a command to the buffer.