]> git.sev.monster Git - dotfiles.git/blame - etc/vim/.vimrc
zshrc: more git aliases
[dotfiles.git] / etc / vim / .vimrc
CommitLineData
39d7f74f 1""" paths
2"" config dir in xdg config
afd175d7 3let x = ($XDG_CONFIG_HOME??($HOME.'/.config')).'/vim'
8d4a98e1 4execute 'set runtimepath='.x.','.&runtimepath.','.x.'/after'
5execute 'set packpath='.x.','.&packpath.','.x.'/after'
1b8a4102 6
39d7f74f 7"" state files in xdg state
afd175d7 8let x = ($XDG_STATE_HOME??($HOME.'/.local/state')).'/vim'
4850f4c2 9if !isdirectory(x)
afd175d7 10 call mkdir(x, 'p', 0700)
11endif
afd175d7 12
39d7f74f 13" backup
14" NOTE: keep backup files in vim state dir for both vim and neovim
afd175d7 15let y = x.'/backup'
16if !isdirectory(y)
17 call mkdir(y, 'p', 0700)
8d4a98e1 18endif
afd175d7 19execute 'set backupdir='.y.'//'
58a8dbcc 20set backup backupcopy=yes
afd175d7 21
58a8dbcc 22" NOTE: neovim uses ShaDa (SHAred DAta) format for viminfo and swap, and uses a
39d7f74f 23" different version of undo file, so these types of files when created by
24" vim cannot be used with neovim, and the 'viminfofile', 'directory', and
25" 'undodir' directories cannot be shared.
58a8dbcc 26" NOTE: neovim has a nice default for these directories and files so
27" customizing them is not necessary for it.
28if !has('nvim')
39d7f74f 29 " viminfo
58a8dbcc 30 " NOTE: 'viminfofile' is a deprecated alias for 'shada' in neovim
31 execute 'set viminfofile='.x.'/.viminfo'
32
39d7f74f 33 " swap
58a8dbcc 34 let y = x.'/swap'
35 if !isdirectory(y)
36 call mkdir(y, 'p', 0700)
37 endif
38 execute 'set directory='.y.'//'
39
39d7f74f 40 " undo
58a8dbcc 41 let y = x.'/undo'
42 if !isdirectory(y)
43 call mkdir(y, 'p', 0700)
44 endif
45 execute 'set undodir='.y.'//'
8d4a98e1 46endif
58a8dbcc 47
4850f4c2 48unlet x
afd175d7 49unlet y
1b8a4102 50
0bffb4be 51
39d7f74f 52""" vim-only defaults
53if !has('nvim')
54 " neovim defaults are already set
55 source $VIMRUNTIME/defaults.vim
b3b23234 56
39d7f74f 57 " disable jumping to last edit, we use vim-lastplace instead
58 autocmd! vimStartup
58a8dbcc 59
39d7f74f 60 " packages
61 packadd! matchit
62 packadd! editorconfig " this is now built to [n]vim in but optional
63 packadd! vim-commentary " nvim has built in commenting now
64
65 " options
66 set hlsearch
67 autocmd BufRead * set autoindent
68endif
69
0bffb4be 70
71""" package config
72"" suda
73" https://github.com/lambdalisue/vim-suda/issues/32#issuecomment-829608925
74if ! &diff
75 let g:suda_smart_edit = 1
76endif
77
78
39d7f74f 79""" styling
80" nice default theme
81colorscheme murphy
82
83" always use color column with less intrusive colors
58a8dbcc 84autocmd VimEnter,WinNew * set colorcolumn=80
39d7f74f 85" always use cursor line for better visibility
58a8dbcc 86autocmd VimEnter,WinNew * set cursorline
58a8dbcc 87
39d7f74f 88" unique highlighting for leading spaces and in-line spaces
89" NOTE: this leaves tabs and other special whitespace untouched intentionally
1ac43be8 90autocmd VimEnter,ColorScheme * highlight SpaceInner ctermfg=Grey guifg=#686868
91autocmd VimEnter,ColorScheme * highlight link SpaceOuter NonText
92autocmd VimEnter,WinNew * match SpaceInner / /
93autocmd VimEnter,WinNew * 2match SpaceOuter /\(^ \+\)\|\( \+$\)/
39d7f74f 94
95" always show statusline
96set laststatus=2
97
98" truncate > lastline; lastline is nvim default, sensible.vim may also set it
99set display=truncate
100
101" more context while scrolling
102set scrolloff=5
103set sidescrolloff=8
104
105" show number column on all buffers
106autocmd VimEnter,WinNew * set number
107" use relative numbers in normal modes when focused, but not if number is off
108function! s:SetRelativeNumber(enable)
109 if !getwinvar(winnr(), '&number')
110 return
111 endif
112 if a:enable
113 set relativenumber
114 else
115 set norelativenumber
116 endif
117endfunction
118autocmd InsertEnter,FocusLost,WinLeave * call s:SetRelativeNumber(0)
119autocmd VimEnter,WinNew,
120 \InsertLeave,FocusGained,WinEnter * call s:SetRelativeNumber(1)
121
122" always show custom listchars
58a8dbcc 123autocmd VimEnter,WinNew * set list
1b8a4102 124set listchars=tab:├─,extends:»,precedes:«,space:·,trail:∙,nbsp:■
58a8dbcc 125
0bffb4be 126
39d7f74f 127""" editor
128" always save undo file for all file buffers
129autocmd BufRead * set undofile
ddcfe43c 130
ec9f2140 131" explicitly use modeline, even on systems where it's disabled by system vimrc
6ebc1fca 132autocmd BufRead * set modeline
ec9f2140 133" should be default disabled but just in case
134set nomodelineexpr
135
39d7f74f 136"" indent
137" always use shiftwidth instead of tabsize
138set smarttab
139" filetype preferences
58a8dbcc 140autocmd FileType python set softtabstop=4 shiftwidth=4 expandtab
141autocmd FileType markdown set softtabstop=4 shiftwidth=4 expandtab
142autocmd FileType javascript set softtabstop=2 shiftwidth=2 expandtab
143autocmd FileType json set softtabstop=2 shiftwidth=2 expandtab
144autocmd FileType html set softtabstop=2 shiftwidth=2 expandtab
e69caf64 145let g:EditorConfig_enable_for_new_buf = 1
58a8dbcc 146
39d7f74f 147"" syntax
fbdf3d0e 148autocmd Syntax php syn clear phpHereDoc phpNowDoc
b3b23234 149
39d7f74f 150"" mappings
151" use more accessible escapes, as C-n and C-o are shadowed by some terminals
b3b23234 152if has('nvim')
153 tnoremap <C-\>n <C-\><C-N>
154 tnoremap <C-\>o <C-\><C-O>
155endif
156
39d7f74f 157" move windows any time
b3b23234 158if has('nvim')
159 " terminal
160 tnoremap <A-h> <C-\><C-N><C-w>h
161 tnoremap <A-j> <C-\><C-N><C-w>j
162 tnoremap <A-k> <C-\><C-N><C-w>k
163 tnoremap <A-l> <C-\><C-N><C-w>l
164endif
165" insert
166inoremap <A-h> <C-\><C-N><C-w>h
167inoremap <A-j> <C-\><C-N><C-w>j
168inoremap <A-k> <C-\><C-N><C-w>k
169inoremap <A-l> <C-\><C-N><C-w>l
170" normal
171nnoremap <A-h> <C-w>h
172nnoremap <A-j> <C-w>j
173nnoremap <A-k> <C-w>k
174nnoremap <A-l> <C-w>l
39d7f74f 175
176"" CTRL-L to clear highlighting and also update diff
177" NOTE: sensible.vim and nvim already do this, so copy sensible.vim
178" functionality if it hasn't been set or we aren't nvim. taken from
179" sensible.vim by Tim Pope, under Vim license; see :help license
180" https://github.com/tpope/vim-sensible/blob/0ce2d843d6f588bb0c8c7eec6449171615dc56d9/plugin/sensible.vim#L57
181if !has('nvim') && maparg('<C-L>', 'n') ==# ''
182 nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
183endif
This page took 0.129086 seconds and 4 git commands to generate.