Files
nvim/init.vim

412 lines
13 KiB
VimL
Raw Normal View History

2020-09-16 22:59:48 +01:00
" Plugins --- {{{
2021-04-11 23:57:29 +01:00
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
2021-10-07 20:43:23 +01:00
autocmd VimEnter * CHADdeps
2021-04-11 23:57:29 +01:00
endif
2021-06-20 15:14:57 +01:00
let g:polyglot_disabled = ['markdown']
2020-09-16 22:59:48 +01:00
call plug#begin(stdpath('data') . '/plugged')
2021-10-07 20:43:23 +01:00
Plug 'rafi/awesome-vim-colorschemes' " Provides a number of pretty themes
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " Fast fuzzy file searching
2020-09-16 22:59:48 +01:00
Plug 'junegunn/fzf.vim'
2021-10-09 23:54:58 +01:00
Plug 'tpope/vim-fugitive' " Adds git support to vim
2021-10-07 20:43:23 +01:00
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)
2021-10-07 20:43:23 +01:00
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
2021-10-07 20:43:23 +01:00
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
2021-04-11 23:57:29 +01:00
"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'
2021-10-07 20:43:23 +01:00
"
" vim-devicons must be last plugin
2022-07-18 14:00:06 +01:00
Plug 'ryanoasis/vim-devicons' " Icons for file tree
2021-10-07 20:43:23 +01:00
2020-09-16 22:59:48 +01:00
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
2021-04-11 23:57:29 +01:00
"set spell "Enable spell checking
2020-09-16 22:59:48 +01:00
set autowriteall "Save the file when switching buffers
2021-06-20 15:14:57 +01:00
set colorcolumn=80,120
2020-09-16 22:59:48 +01:00
"}}}
" Visuals ---- {{{
2021-11-23 19:33:07 +00:00
if isdirectory(system('echo -n "${XDG_CACHE_HOME:-$HOME/.cache}/wal"'))
colorscheme guiwal
else
colorscheme atom-dark
endif
2021-10-08 19:32:15 +01:00
set t_Co=256 "User 256 colors. This is useful for terminal vim
2020-09-16 22:59:48 +01:00
set guifont=Fira_Code:h17
set guioptions-=e "We don't want GUI tabs
2021-10-08 19:32:15 +01:00
set termguicolors
2020-09-16 22:59:48 +01:00
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
2021-10-09 22:46:37 +01:00
"Decrease window size (replaces some weird netrw stuff)
2021-12-05 20:36:40 +00:00
nnoremap <C-S-H> <C-W>-
2021-10-09 22:46:37 +01:00
"Increase window size (Redraws the screen, use :redraw instead)
2021-12-05 20:36:40 +00:00
nnoremap <C-S-L> <C-W>+
nnoremap <C-H> <C-W><C-H>
nnoremap <C-L> <C-W><C-L>
2021-10-09 22:46:37 +01:00
nnoremap <C-S-J> <C-W><C-J>
nnoremap <C-S-K> <C-W><C-K>
"Decrease window size (Backspace clone)
2021-12-05 20:36:40 +00:00
inoremap <C-S-H> <C-W>-
2021-10-09 22:46:37 +01:00
"Increase window size (Replaces leaving `insertmode`, don't use `insertmode`)
2021-12-05 20:36:40 +00:00
inoremap <C-S-L> <C-W>+
inoremap <C-H> <Esc><C-W><C-H>i
inoremap <C-L> <Esc><C-W><C-L>i
inoremap <C-J> <Esc><C-W><C-J>i
inoremap <C-K> <Esc><C-W><C-K>i
2020-09-16 22:59:48 +01:00
" }}}
" Search --- {{{
set hlsearch
set incsearch
set path+=**
" }}}
" Mappings --- {{{
" Editing files - {{{
"Make it easy to edit the vimrc file
2021-12-05 20:36:40 +00:00
nnoremap <Leader>ev :tabedit $MYVIMRC<CR>
2020-09-16 22:59:48 +01:00
"Source the vimrc file
2021-12-05 20:36:40 +00:00
nnoremap <Leader>es :source $MYVIMRC<CR>
2020-09-16 22:59:48 +01:00
" }}}
2021-10-09 22:46:37 +01:00
"Changing unused ctrl bindings
2021-10-09 23:54:58 +01:00
"Turn on git blame
2023-01-18 17:09:15 +00:00
nnoremap <C-A> <CMD>Git blame<CR>
2021-10-09 22:46:37 +01:00
"List all tags in the current buffer (replaced pageup, use CTRL-u instead)
2021-12-05 20:36:40 +00:00
nnoremap <C-B> <CMD>BTags<CR>
2021-10-09 22:46:37 +01:00
"List all tags in directory
2023-01-18 17:09:15 +00:00
"nnoremap <C-S-B> <CMD>Tags<CR>
2021-10-09 22:46:37 +01:00
"List all the recently opened files (replaced scroll one line up, use "k")
2021-12-05 20:36:40 +00:00
nnoremap <C-E> <CMD>History<CR>
2021-10-09 22:46:37 +01:00
"Search within the current buffer (replaced pagedown, use CTRL-d instead)
2023-01-18 17:09:15 +00:00
"nnoremap <C-F> /
2021-10-09 22:46:37 +01:00
"Search within the whole project
2023-01-18 17:09:15 +00:00
nnoremap <C-F> <CMD>Rg<CR>
2021-10-09 22:46:37 +01:00
"Move line down (uses vim-unimpaired) (replaced move down, use "j")
2021-12-05 20:36:40 +00:00
nnoremap <C-J> <C-E>
2021-10-09 22:46:37 +01:00
"Move line up (uses vim-unimpaired) (replaced move up, use "k")
2021-12-05 20:36:40 +00:00
nnoremap <C-K> <C-Y>
2021-10-09 23:54:58 +01:00
"Does not work because of legacy reasons
2021-12-05 20:36:40 +00:00
" nnoremap <C-M>
2021-10-09 23:54:58 +01:00
"Search marks (replaced "j" clone)
2021-12-05 20:36:40 +00:00
nnoremap <C-N> <CMD>Marks<CR>
2021-10-09 22:46:37 +01:00
"Search version controlled files (replaced move up, use "k")
2021-12-05 20:36:40 +00:00
nnoremap <C-P> <CMD>GFiles<CR>
2021-10-09 22:46:37 +01:00
"Search all files in directory
2021-12-05 20:36:40 +00:00
nnoremap <C-S-P> <CMD>Files<CR>
2021-10-09 22:46:37 +01:00
"Toggle file draw
2021-12-05 20:36:40 +00:00
nnoremap <C-Q> <CMD>CHADopen<CR>
2021-10-09 22:46:37 +01:00
"Search all snippets (uses ultisnips)
2021-12-05 20:36:40 +00:00
nnoremap <C-S> <CMD>Snippets<CR>
2021-10-09 22:46:37 +01:00
"Search git history (replaced scroll one line up, use "k")
2021-12-05 20:36:40 +00:00
nnoremap <C-Y> <CMD>Commits<CR>
2021-10-09 22:46:37 +01:00
"Search git history within current buffer/selection
2021-12-05 20:36:40 +00:00
nnoremap <C-S-Y> <CMD>BCommits<CR>
2021-10-09 22:46:37 +01:00
2021-10-09 23:54:58 +01:00
"Turn on git blame
2021-12-05 20:36:40 +00:00
inoremap <C-S-A> <CMD>GBlame<CR>
2021-10-09 22:46:37 +01:00
"List all tags in the current buffer
2021-12-05 20:36:40 +00:00
inoremap <C-B> <CMD>BTags<CR>
2021-10-09 22:46:37 +01:00
"List all tags in directory
2021-12-05 20:36:40 +00:00
inoremap <C-S-B> <CMD>Tags<CR>
2021-10-09 22:46:37 +01:00
"List all the recently opened files (replaced inserting characters from below)
2021-12-05 20:36:40 +00:00
inoremap <C-E> <CMD>History<CR>
2021-10-09 22:46:37 +01:00
"Search within the current buffer
2021-12-05 20:36:40 +00:00
inoremap <C-F> <Esc>/
2021-10-09 22:46:37 +01:00
"Search within the whole project
2021-12-05 20:36:40 +00:00
inoremap <C-S-F> <CMD>Rg<CR>
2021-10-09 22:46:37 +01:00
"Move line down (uses vim-unimpaired) (replaced <CR> clone)
2021-12-05 20:36:40 +00:00
inoremap <C-J> <Esc>ddpi
2021-10-09 22:46:37 +01:00
"Move line up (uses vim-unimpaired) (replaced start digraph, use command instead)
2021-12-05 20:36:40 +00:00
inoremap <C-K> <Esc>ddkPi
2021-10-09 23:54:58 +01:00
"Does not work because of legacy reasons
2021-12-05 20:36:40 +00:00
" inoremap <C-M> <CMD>Marks<CR>
2021-10-09 22:46:37 +01:00
"Add line below (replaced execute single command in normal)
2021-12-05 20:36:40 +00:00
inoremap <C-O> <Esc>o
2021-10-09 22:46:37 +01:00
"Add line above
2021-12-05 20:36:40 +00:00
inoremap <C-S-O> <Esc>O
2021-10-09 22:46:37 +01:00
"Search version controlled files (replaced autocomplete reverse)
2021-12-05 20:36:40 +00:00
inoremap <C-P> <CMD>GFiles<CR>
2021-10-09 22:46:37 +01:00
"Search all files in directory
2021-12-05 20:36:40 +00:00
inoremap <C-S-P> <CMD>Files<CR>
2021-10-09 22:46:37 +01:00
"Toggle file draw (replaces CTRL-v clone)
2021-12-05 20:36:40 +00:00
nnoremap <C-Q> <CMD>CHADopen<CR>
2021-10-09 22:46:37 +01:00
"Search all snippets (uses ultisnips)
2021-12-05 20:36:40 +00:00
inoremap <C-S> <CMD>Snippets<CR>
2021-10-09 22:46:37 +01:00
"Search git history (replaced inserting characters from above)
2021-12-05 20:36:40 +00:00
inoremap <C-Y> <CMD>Commits<CR>
2021-10-09 22:46:37 +01:00
"Search git history within current buffer/selection
2021-12-05 20:36:40 +00:00
inoremap <C-S-Y> <CMD>BCommits<CR>
2021-10-09 22:46:37 +01:00
2020-09-16 22:59:48 +01:00
"Add simple highlight removal
2021-12-05 20:36:40 +00:00
nnoremap <Leader><Space> :nohlsearch<CR>
2020-09-16 22:59:48 +01:00
"Convert tabs to spaces
2021-12-05 20:36:40 +00:00
nnoremap <Leader><Tab> :retab<CR>
2020-09-16 22:59:48 +01:00
2021-10-15 21:04:15 +01:00
"Git mappings
2021-12-05 20:36:40 +00:00
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>
2021-10-15 21:04:15 +01:00
2020-09-16 22:59:48 +01:00
"Map movement keys to Escape
inoremap jj <Esc>
inoremap jk <Esc>
inoremap kk <Esc>
inoremap hh <Esc>
"Delete a line in insert mode
2021-12-05 20:36:40 +00:00
" inoremap <C-D> <Esc>ddi
2020-09-16 22:59:48 +01:00
"Use semicolon instead of colon for commands
nnoremap ; :
2021-10-09 22:46:37 +01:00
nnoremap : ;
2020-09-16 22:59:48 +01:00
"Append the line with a semicolon
inoremap <Leader>; <Esc>mzA;<Esc>`za
2021-04-11 23:57:29 +01:00
nnoremap <Leader>; mzA;<Esc>`za<Esc>
2020-09-16 22:59:48 +01:00
"Easily navigate items in the quickfix menu
2021-12-05 20:36:40 +00:00
nnoremap <Leader>] :cnext<CR>
nnoremap <Leader>[ :cprevious<CR>
2020-09-16 22:59:48 +01:00
"Indent arrays
2021-12-05 20:36:40 +00:00
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>
2020-09-16 22:59:48 +01:00
"A command to properly indent json code
2021-05-17 21:08:28 +01:00
command! FormatJSON %!python -m json.tool
2021-07-16 16:53:23 +01:00
" Allow saving of files as doas
2021-12-05 20:36:40 +00:00
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!
2021-05-17 21:08:28 +01:00
2020-09-16 22:59:48 +01:00
" }}}
2021-04-11 23:57:29 +01:00
" Plugins --- {{{
2021-10-09 23:54:58 +01:00
" Toggle emmet completion using <Tab> with <Leader>em
2021-04-11 23:57:29 +01:00
let g:emmet_completion = 0
function ToggleEmmet()
if g:emmet_completion
echo "Emmet completion off!"
let g:user_emmet_expandabbr_key=','
2021-12-05 20:36:40 +00:00
iunmap <Tab>
2021-04-11 23:57:29 +01:00
let g:emmet_completion = 0
else
echo "Emmet completion on!"
let g:user_emmet_expandabbr_key='<Tab>'
2021-12-05 20:36:40 +00:00
imap <Expr> <Tab> emmet#expandAbbrIntelligent("\<Tab>")
2021-04-11 23:57:29 +01:00
let g:emmet_completion = 1
endif
endfunction
2021-12-05 20:36:40 +00:00
nnoremap <Leader>em :call ToggleEmmet()<CR>
2021-06-20 15:14:57 +01:00
" Conceal markdown text
set conceallevel=3
2021-10-07 20:43:23 +01:00
let g:AutoPairsFlyMode = 1
2023-01-18 17:09:15 +00:00
let g:AutoPairsShortcutBackInsert = '<M-b>' " Use <M-B> to insert the closing parentheses if it jumped ahead by mistake
2021-10-07 20:43:23 +01:00
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
2021-04-11 23:57:29 +01:00
" }}}
2023-01-18 17:09:15 +00:00
" PHP --- {{{
" function! RunPHPUnitTest()
" cd %:p:h
" normal! T yw
" let result = system("phpunit --filter " . @" . " " . bufname("%"))
" split __PHPUnit_Result__
" normal! ggdG
" setlocal buftype=nofile
" call append(0, split(result, '\v\n'))
" cd -
" endfunction
" nnoremap <F12> :call RunPHPUnitTest()<cr>
" }}}
2020-09-16 22:59:48 +01:00
" Moving around --- {{{
"Use capital H and L to move to the start and end of lines
nnoremap H ^
nnoremap L $
" }}}
" Operator mappings --- {{{
2021-12-05 20:36:40 +00:00
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>
2020-09-16 22:59:48 +01:00
" }}}
" 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
2020-09-16 22:59:48 +01:00
"Automatically save files
augroup autosaving
autocmd!
autocmd FocusLost * silent! wa "Save all files when moving away from the window
2023-01-18 17:09:15 +00:00
autocmd InsertLeave * silent! wa "Save all files when leaving insert mode
autocmd TextChanged * silent! wa "Save all files when text is changed
2020-09-16 22:59:48 +01:00
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
2021-07-16 16:53:23 +01:00
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
2020-09-16 22:59:48 +01:00
" }}}
" 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.