💾 Archived View for tilde.club › ~filip › tech › dotfiles › .vimrc captured on 2024-03-21 at 16:27:53.

View Raw

More Information

⬅️ Previous capture (2022-07-16)

-=-=-=-=-=-=-

" GENERAL
let skip_defaults_vim=1
set nocompatible   " do not force vi compatibility
set encoding=UTF-8 " always use utf-8 encoding
set viminfo="NONE" " no viminfo file
set viewdir=~/.cache/vim/view
set noswapfile     " no swap file
set shortmess+=c   " avoid all |hit-enter| promts
set autoread       " automatically change the file if it has been changed outside vim
set backspace=2    " the same as `set backspace=indent,eol,start`
set noshowmatch    " do not jump to a matching bracket
set hidden         " don't unload a buffer when no longer shown in a window
set updatetime=50  " default is 4000ms
set noerrorbells   " no error message bells
set spelllang=en   " British English
set lazyredraw     " do not redraw screen while executing macros
set nowrap
set textwidth=0
set clipboard=unnamedplus " global clipboard
set iskeyword+=-   " treat dash separated words as a word text object"

" TAB AND INDENTATION
set tabstop=4 softtabstop=4
set shiftwidth=4
"set expandtab
set smartindent

" AUTOCOMPLETE
"" Tab completion
set wildmenu
set wildmode=longest,list,full
"" Omnicomplete (C-d start; <CR> accept; C-e cancel)
filetype plugin on
set omnifunc=syntaxcomplete#Complete
set completeopt=menuone,noinsert,preview
inoremap <C-d> <C-x><C-o>
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"

" GUI
colorscheme nord
"" Syntax
syntax on
au FileType * setlocal formatoptions-=cro " disable automatic commenting on newline
au BufRead,BufNewFile *.gmi,*.gemini,*.gemtext set filetype=gemtext
au BufRead,BufNewFile *.tex set filetype=tex
"" Cursor
set guicursor=
if exists('$TMUX')
	let &t_SI="\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
	let &t_SR="\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
	let &t_EI="\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
else
	let &t_SI.="\e[2 q" "SI = INSERT mode
	let &t_SR.="\e[2 q" "SR = REPLACE mode
	let &t_EI.="\e[2 q" "EI = NORMAL mode (ELSE)
endif
""" Cursor settings: 1=blinking block; 2=solid block; 3=blinking underscore; 4=solid underscore; 5=blinking vertical bar; 6=solid vertical bar
"" Line numbers
set relativenumber " relative numbers
set nu             " cursor line global number
"set cul           " cursor line highlight
"" Scroll
set scrolloff=4
"" Visual mode highlight
highlight Visual cterm=reverse ctermbg=NONE
"" Status line
set laststatus=2 " always show the statusline
highlight highlightStatusline ctermfg=darkgrey ctermbg=233
set statusline=%#highlightStatusline#%f\ %y[%{strlen(&fenc)?&fenc:'none'}]%=%l:%c%V\ %P
"" Command line
set cmdheight=1

" SPLITS
set splitbelow
set splitright
"" Navigation
nnoremap <leader>h :split<Enter>
nnoremap <leader>v :vsplit<Enter>
map <C-h> <C-w>h
map <C-j> <C-w>j
map <C-k> <C-w>k
map <C-l> <C-w>l
"" Window resizing
nnoremap <Up>    :resize +2<Enter>
nnoremap <Down>  :resize -2<Enter>
nnoremap <Left>  :vertical resize -2<Enter>
nnoremap <Right> :vertical resize +2<Enter>

" HISTORY
set noswapfile
set nobackup
set undodir=~/.vim/undodir
set undofile

" SEARCH
set incsearch
set smartcase
set ignorecase
set nohlsearch

" MACROS
let @w="/haha\<Esc>xxxx\<Insert>"

" SCHEME
augroup SCHEME
	autocmd!
	autocmd BufRead,BufNewFile *.ss syntax keyword Statement lambda conceal cchar=λ
	autocmd BufRead,BufNewFile *.ss syntax keyword Statement define conceal cchar=Δ
	autocmd BufRead,BufNewFile *.ss hi! link Conceal Statement
	autocmd BufRead,BufNewFile *.ss set conceallevel=2
	autocmd BufRead,BufNewFile *.ss set concealcursor=nvi
augroup END

" KEY MAPPINGS
"" <ESC>
au VimEnter * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
au VimLeave * silent! !xmodmap -e 'clear Lock' -e 'keycode 0x42 = Caps_Lock'
imap jj <Esc>

"" <leader>
let g:mapleader = " " " set leader key as <Space>
"" General
nnoremap <leader><Space> /<+++><CR>5x<Insert>
vnoremap . :normal .<CR>
vnoremap < <gv
vnoremap > >gv
""" navigation in INSERT mode
inoremap <C-h> <C-o>h
inoremap <C-j> <C-o>j
inoremap <C-k> <C-o>k
inoremap <C-l> <C-o>l
""" delete to null register
vnoremap <leader>d "_d
""" open directory tree
nnoremap <leader>ex	:wincmd v<bar> :Ex <bar> :vertical resize 30<CR>
""" wrap
nnoremap <leader>tw :call ToggleWrap()<CR>
""" spell
nnoremap <leader>ts :let &spell=!&spell<CR>
"" Quotes
nnoremap <leader>qs a‘’<ESC><Insert>
nnoremap <leader>qd a“”<ESC><Insert>
nnoremap <leader>qa a»«<ESC><Insert>
"" XML
autocmd FileType xml let @t="\<Insert><<+++>></<+++>>\<ESC>"
autocmd FileType xml nnoremap <leader>t "xdawi<<ESC>"xpa></<ESC>"xpa><ESC>cit
autocmd FileType xml nnoremap <leader>e o<entry><CR><Tab><id><+++></id><CR><title><+++></title><CR><updated><+++></updated><CR><link href="<+++>" rel="alternate"/><CR><Backspace></entry><ESC>5k
"" Shell
""" echo
autocmd FileType sh nnoremap <leader>e aecho ""<ESC><Insert>
""" printf
autocmd FileType sh nnoremap <leader>p aprintf ""<ESC><Insert>
""" if [[ ]]
autocmd FileType sh nnoremap <leader>[ aif [[ ]]; then<Enter><Backspace>fi<ESC><UP>f]<Insert>
""" if (( ))
autocmd FileType sh nnoremap <leader>( aif (( )); then<Enter><Backspace>fi<ESC><UP>f)<Insert>
""" for number
autocmd FileType sh nnoremap <leader>for afor ((i=;i<;i++)); do<Enter><Backspace>done<ESC>kf=<Right><Insert>
""" iterate over values
autocmd FileType sh nnoremap <leader>fval afor item in "${[@]}"; do<Enter><Backspace>done<ESC>kf{a
""" iterate over keys
autocmd FileType sh nnoremap <leader>fkey afor item in "${![@]}"; do<Enter><Backspace>done<ESC>kf!a
""" read file line by line
autocmd FileType sh nnoremap <leader>read awhile read line; do<Enter><Backspace>done < $
"" LaTeX
autocmd FileType tex nnoremap <leader>na i\documentclass[12pt]{article}<CR><CR>\usepackage[utf8]{inputenc}<CR>\usepackage[T1]{fontenc}<CR>\usepackage[english]{babel}<CR>\usepackage{csquotes}<CR><CR>\usepackage{amsmath,amssymb,amsfonts,amsthm,amscd}<CR>\usepackage{latexsym}<CR>\usepackage{tikz,graphicx,subfigure}<CR>\usepackage{subfigure}<CR>\usepackage{url}<CR><CR>%\usepackage{biblatex}<CR>%\addbibresource{}<CR><CR>\numberwithin{equation}{section}<CR>\newtheorem{defin}[equation]{Definition}<CR>\newtheorem{thm}[equation]{Theorem}<CR>\newtheorem{prop}[equation]{Proposition}<CR>\newtheorem{lem}[equation]{Lemma}<CR>\newtheorem{cor}[equation]{Corollary}<CR>\newtheorem{exam}[equation]{Example}<CR>\newtheorem{rem}[equation]{Remark}<CR>\newtheorem{obs}[equation]{Observation}<CR>\newtheorem{quest}[equation]{Question}<CR>\newtheorem{prob}[equation]{Problem}<CR>\newtheorem{conj}[equation]{Conjecture}<CR><CR>\title{<+++>}<CR>\author{<+++>}<CR>\date{<+++>}<CR><CR>\begin{document}<CR><CR>\maketitle<CR><CR>\begin{abstract}<+++>\end{abstract}<CR><CR>%\printbibliography[title={References}]<CR><CR>\end{document}<ESC>41k
autocmd FileType tex nnoremap <leader>b b"xdEa\begin{<ESC>"xpa}\end{<ESC>"xpa}<ESC>F\i
"" BibTex
au BufRead,BufNewFile *.bib nnoremap <leader>a a@article{,<Enter><Tab>author={},<Enter>title={},<Enter>abstract={},<Enter>journal={},<Enter>volume={},<Enter>number={},<Enter>pages={},<Enter>month=,<Enter>year={},<Enter>issn={},<Enter>url={},<Enter>doi={},<Enter>keywords={},<Enter>}<ESC>14kf,<Insert>
au BufRead,BufNewFile *.bib nnoremap <leader>b a@book{,<Enter><Tab>author={},<Enter>title={},<Enter>year={},<Enter>publisher={},<Enter>address={},<Enter>isbn={},<Enter>url={},<Enter>doi={},<Enter>keywords={},<Enter>}<Esc>10kf,<Insert>
au BufRead,BufNewFile *.bib nnoremap <leader>c a@inbook{,<Enter><Tab>author={},<Enter>title={},<Enter>chapter={},<Enter>publisher={},<Enter>year={},<Enter>keywords={},<Enter>}<Esc>7kf,<Insert>

vnoremap <leader>ss "cy :call RunCode("c","ss")<CR>
vnoremap <leader>pp "cy :call RunCode("c","perl")<CR>
vnoremap <leader>ll "cy :call RunCode("c","lua")<CR>
"inoremap ( ()<Esc>i

fun Testtest()
	let l:xxx =<< trim END
	of
	mice
	and
	men
END
	echo l:xxx
endfun
" AUTOCMD
"" Functions
fun! TrimWhitespace()
	let l:save = winsaveview()
	keeppatterns %s/\s\+$//e
	call winrestview(l:save)
endfun
fun! ToggleWrap()
	if (&wrap)
		set nowrap
	else
		set wrap linebreak
	endif
endfun
fun RunCode(register,language)
	let l:tempname = tempname()
	if (a:language == "ss")
		call writefile(getreg(a:register,1,1), l:tempname)
		echom "= SCHEME RESULT BEGIN ="
		echom system("csi -s " . l:tempname)
		echom "== SCHEME RESULT END =="
		call delete(l:tempname)
	endif
	if (a:language == "perl")
		call writefile(getreg(a:register,1,1), l:tempname)
		echom "= PERL RESULT BEGIN ="
		echo system("perl " . l:tempname)
		echom "== PERL RESULT END =="
		call delete(l:tempname)
	endif
	if (a:language == "lua")
		call writefile(getreg(a:register,1,1), l:tempname)
		echom "= LUA RESULT BEGIN ="
		echo system("lua " . l:tempname)
		echom "== LUA RESULT END =="
		call delete(l:tempname)
	endif
endfun
"" Commands
augroup TRIM_WHITESPACES
	autocmd!
	autocmd BufWritePre * :call TrimWhitespace()
augroup END
augroup REMEMBER_FOLDS
	autocmd!
	autocmd BufWinLeave * mkview
	autocmd BufWinEnter * silent! loadview
augroup END