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