summaryrefslogtreecommitdiff
path: root/.vim/startup/settings.vim
blob: c0f6e4d8353fcb6247fa8f2cc0e4accd79c23df0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
" Color scheme {{{
	colorscheme gruvbox
	let g:gruvbox_contrast_dark = 'hard'
	set background=dark " Setting dark mode
" }}}

" Cursor {{{
	set scrolloff=5 " Screen lines above and below the cursor
	set showmatch   " Cursor jumps to matching opening bracket automatically

	let &t_SI = "\e[5 q" " thin cursor on insert mode
	let &t_SR = "\e[4 q" " underline on replace mode
	let &t_EI = "\e[1 q" " block on normal mode

	set cul                                     " Highlight current cursor line
	autocmd InsertEnter,InsertLeave * set cul!  " Don't highlight current line, when in insert mode
" }}}

" Indentation {{{
	set tabstop=4    " Show tabs as 4 wide
	set shiftwidth=4 " Indent with 4 spaces

	autocmd FileType css,ts setlocal ts=2 sw=2 sts=0 expandtab " Transform tabs in CSS and TS into 2 spaces
	autocmd FileType lisp,scheme,haskell setlocal ts=2 sw=2 sts=0 expandtab
" }}}

" Folding {{{
	autocmd FileType * set foldmethod=syntax " Syntax folding for all
	autocmd FileType vim,text,sh,zsh,xdefaults setlocal foldmethod=marker " Overrides folding to marker for types

	set foldlevel=99 " Open all folds by default
	autocmd FileType vim,sh,zsh,xdefaults setlocal foldlevel=0 " Close all folds by defualt on filetypes

	set foldtext=MyFoldText() " Custom text for a fold
	function MyFoldText()
		let line      = substitute(getline(v:foldstart), "\t", repeat(" ", shiftwidth(0)), "") "  Gets the first fold line and replace tabs with spaces (as many as shiftwidth is set to)
		let linecount = v:foldend - v:foldstart                                                "  Calculates amount of folded lines
		return line . repeat(" ", winwidth('%') - strlen(line) - 10 - strlen(linecount))   
					\ . "  "  . linecount .  "  "                                            "  Shows our line, then a lot of spaces, and at the very end we have line number and arrows
	endfunction
" }}}

set list " Enabled customization of white space characters, so spaces, tabs, EOL, etc. (:h 'list')

" Show tabs as a | with three spaces
" When line extends beyond the screen, use > (and <) characters
set listchars=tab:│\ ,extends:>,precedes:<

autocmd BufReadPre,FileReadPre * call NoWrapIfHasLongLine()
function! NoWrapIfHasLongLine()
	let longestline = system("wc -L " . bufname("%") . " | awk '{print $1}'")
	if longestline > 840
		set nowrap
	endif
endfunction

set backspace=indent,eol,start              " Better backspace functionality

filetype plugin indent on
syntax on             " Syntax highlighting
set number            " Show line numbers to the left
set signcolumn=number " Show signs and numbers on the same column
set mouse=a           " Mouse support
set showcmd
set wildmenu
set wildmode=list:longest,full
set history=1000
set incsearch

autocmd BufRead,BufNewFile * set tw=0 " Sets textwidth to 0 for all files (set with autocmd since just doing "set tw=0" can be overridden)
autocmd BufRead,BufNewFile *.component.css set filetype=css

" Language mapping for (bulgarian) cyrillic characters to english
set langmap=АA,аa,БB,бb,ВW,вw,ГG,гg,ДD,дd,ЕE,еe,ЖV,жv,ЗZ,зz,ИI,иi,ЙJ,йj,КK,кk,ЛL,лl,МM,мm,НN,нn,ОO,оo,ПP,пp,РR,рr,СS,сs,ТT,тt,УU,уu,ФF,фf,ХH,хh,ЦC,цc,Ч~,ч`,Ш{,ш[,Щ},щ],ЪY,ъy,ЬX,ьx,Ю\|,ю\\,ЯQ,яq
set spelllang=en,bg_BG                " Adds Bulgarian to spelling languages