Files
nvim/init.vim

354 lines
12 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`
Plug 'tpope/vim-unimpaired' " A series of bindings for complementary actions [<space> and ]<space> for adding lines before and after
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
" Plug 'ryanoasis/vim-devicons' " Icons for file tree
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-05-11 22:09:22 +01:00
" colorscheme atom-dark
2021-10-08 19:32:15 +01:00
colorscheme guiwal
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)
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
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
nnoremap <Leader>ev :tabedit $MYVIMRC<cr>
"Source the vimrc file
nnoremap <Leader>es :source $MYVIMRC<cr>
" }}}
2021-10-09 22:46:37 +01:00
"Changing unused ctrl bindings
2021-10-09 23:54:58 +01:00
"Turn on git blame
nnoremap <c-s-a> <cmd>GBlame<cr>
2021-10-09 22:46:37 +01:00
"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")
2021-10-09 23:54:58 +01:00
nnoremap <c-j> ddkP
2021-10-09 22:46:37 +01:00
"Move line up (uses vim-unimpaired) (replaced move up, use "k")
2021-10-09 23:54:58 +01:00
nnoremap <c-k> ddp
"Does not work because of legacy reasons
" nnoremap <c-m>
"Search marks (replaced "j" clone)
nnoremap <c-n> <cmd>Marks<cr>
2021-10-09 22:46:37 +01:00
"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>
2021-10-09 23:54:58 +01:00
"Turn on git blame
inoremap <c-s-a> <cmd>GBlame<cr>
2021-10-09 22:46:37 +01:00
"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)
2021-10-09 23:54:58 +01:00
inoremap <c-j> <Esc>ddkPi
2021-10-09 22:46:37 +01:00
"Move line up (uses vim-unimpaired) (replaced start digraph, use command instead)
2021-10-09 23:54:58 +01:00
inoremap <c-k> <Esc>ddpi
"Does not work because of legacy reasons
" inoremap <c-m> <cmd>Marks<cr>
2021-10-09 22:46:37 +01:00
"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)
2021-10-09 23:54:58 +01:00
inoremap <c-y> <cmd>Commits<cr>
2021-10-09 22:46:37 +01:00
"Search git history within current buffer/selection
2021-10-09 23:54:58 +01: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
nnoremap <Leader><space> :nohlsearch<cr>
"Convert tabs to spaces
nnoremap <Leader><Tab> :retab<cr>
"Map movement keys to Escape
inoremap jj <Esc>
inoremap jk <Esc>
inoremap kk <Esc>
inoremap hh <Esc>
"Delete a line in insert mode
2021-10-09 22:46:37 +01: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
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
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
command! W execute 'silent! w !doas /usr/bin/tee % >/dev/null' <Bar> edit!
2021-10-09 22:46:37 +01:00
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=','
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>
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
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"
\ }
\ }
\ }
2021-04-11 23:57:29 +01:00
" }}}
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 --- {{{
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>
2021-10-09 22:46:37 +01:00
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
"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
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/st/dwm/; 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.