Vim run control

Listing my Vim run control file here. It’s simple and effective for what I do everyday. I added persistent undo after an article pointed this out recently; it’s a remarkable feature I have not known for all my time learning and using Vim.

" ckunte's .vimrc file
set shell=/usr/bin/fish
set nocompatible

" -- Autocommands (grouped to avoid duplication on reload) --
augroup vimrc_autoreload
  autocmd!
  autocmd BufWritePost $MYVIMRC source $MYVIMRC
augroup END

augroup vimrc_cursorline
  autocmd!
  " Highlight cursor line only in insert mode
  autocmd InsertEnter * set cul
  autocmd InsertLeave * set nocul
augroup END

augroup vimrc_filetype
  autocmd!
  autocmd BufRead,BufNewFile *.md setlocal spell spelllang=en_gb
augroup END

" -- Cursor shape by mode --
let &t_SI .= "\e[6 q" " SI = INSERT mode
let &t_SR .= "\e[4 q" " SR = REPLACE mode
let &t_EI .= "\e[2 q" " EI = NORMAL mode

" -- Copy / paste --
set pastetoggle=<F2>
set clipboard+=unnamedplus

" -- Indent selection with < / > without losing selection --
vnoremap < <gv
vnoremap > >gv

" -- Display --
set number
set ttyfast
set laststatus=2
set ruler
set showmode
set showcmd
set title
set scrolloff=3
set wrap
set linebreak

" -- Files --
" NOTE: `binary`+`noeol` disables autoindent/textwidth for ALL files, not
" just ones missing a trailing newline. Only uncomment if you really want
" that tradeoff globally; otherwise handle per-file.
" set binary noeol
set modeline modelines=4

" -- Indentation --
set autoindent
set tabstop=4 softtabstop=4 shiftwidth=4 shiftround expandtab
set backspace=indent,eol,start

" -- Search --
set hlsearch
set ignorecase
set incsearch

" -- Editing behaviour --
set mouse=a
set nostartofline
set spelllang=en_gb
set complete+=kspell

" Correct misspelled word on the fly with Ctrl+L
inoremap <C-l> <c-g>u<Esc>[s1z=`]a<c-g>u

" -- Persistent undo --
set undofile
set undodir=~/.vim/undo
set undolevels=10000
set undoreload=10000

" -- Abbreviations --
abbr <expr> ds strftime('%Y-%m-%d %H:%M')
abbr kr Kind regards,<cr>Chetan

" -- Plugins --
call plug#begin('~/.vim/plugged')
  Plug 'tpope/vim-sensible'
  Plug 'tpope/vim-surround'
  Plug 'jiangmiao/auto-pairs'
  Plug 'itchyny/lightline.vim'
  Plug 'kaarmu/typst.vim'
  Plug 'ckunte/typst-snippets-vim'
call plug#end()

" -- Colour scheme --
" Match the terminal (omarchy theme is dark) and use the real 24-bit palette
" instead of 256-colour approximations.
set background=dark
set termguicolors

augroup vimrc_spell
  autocmd!
  autocmd ColorScheme * hi clear SpellBad | hi clear SpellCap
        \ | hi clear SpellRare | hi clear SpellLocal
        \ | hi SpellBad   cterm=underline gui=undercurl ctermfg=203 guifg=#f7768e
        \ | hi SpellCap   cterm=underline gui=undercurl ctermfg=111 guifg=#7aa2f7
        \ | hi SpellRare  cterm=underline gui=undercurl ctermfg=176 guifg=#bb9af7
        \ | hi SpellLocal cterm=underline gui=undercurl ctermfg=115 guifg=#7dcfff
  hi clear SpellBad
  hi clear SpellCap
  hi clear SpellRare
  hi clear SpellLocal
  hi SpellBad   cterm=underline gui=undercurl ctermfg=203 guifg=#f7768e
  hi SpellCap   cterm=underline gui=undercurl ctermfg=111 guifg=#7aa2f7
  hi SpellRare  cterm=underline gui=undercurl ctermfg=176 guifg=#bb9af7
  hi SpellLocal cterm=underline gui=undercurl ctermfg=115 guifg=#7dcfff
augroup END

augroup vimrc_dim_ui
  autocmd!
  autocmd ColorScheme * hi clear LineNr | hi clear CursorLineNr
        \ | hi clear NonText | hi clear EndOfBuffer | hi clear CursorLine
        \ | hi LineNr      ctermfg=6 guifg=NONE
        \ | hi CursorLineNr term=bold cterm=bold,underline ctermfg=6 gui=bold,underline guifg=NONE
        \ | hi NonText     term=bold cterm=bold ctermfg=9 gui=bold guifg=NONE
        \ | hi link EndOfBuffer NonText
        \ | hi CursorLine  term=underline cterm=underline guibg=NONE
  hi clear LineNr
  hi clear CursorLineNr
  hi clear NonText
  hi clear EndOfBuffer
  hi clear CursorLine
  hi LineNr      ctermfg=6 guifg=NONE
  hi CursorLineNr term=bold cterm=bold,underline ctermfg=6 gui=bold,underline guifg=NONE
  hi NonText     term=bold cterm=bold ctermfg=9 gui=bold guifg=NONE
  hi link EndOfBuffer NonText
augroup END