]> git.sev.monster Git - dotfiles.git/blame - etc/vim/.vimrc
vim: fork vim-lastplace for suda support
[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
01aaaf66 61 packadd! matchit " included with [n]vim but disabled by default
62 packadd! editorconfig " now included with [n]vim but disabled by default
63 packadd! vim-commentary " nvim has this built in now, vim still needs it
39d7f74f 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
01aaaf66 77" re-enable backup, swap, undo for suda buffers that we can read
78" https://github.com/lambdalisue/vim-suda/issues/25
79function s:SudaSettingsSave()
80 let l:f = expand('<afile>')
81 if stridx(l:f, 'suda://') == 0
82 let g:sev_suda_file = expand('<afile>')
83 let g:sev_suda_backup = &backup
84 let g:sev_suda_swapfile = &swapfile
85 let g:sev_suda_undofile = &undofile
86 endif
87endfunction
88function s:SudaSettingsRestore()
89 if exists('g:sev_suda_file') && filereadable(g:sev_suda_file)
90 if exists('g:sev_suda_backup') && g:sev_suda_backup
91 " XXX: suda.vim uses setlocal for this, even though it's global...
92 setlocal backup
93 endif
94 if exists('g:sev_suda_swapfile') && g:sev_suda_swapfile
95 setlocal swapfile
96 endif
97 if exists('g:sev_suda_undofile') && g:sev_suda_undofile
98 setlocal undofile
99 endif
100 endif
101endfunction
102autocmd BufReadPre * call s:SudaSettingsSave()
103autocmd BufReadPost suda://* call s:SudaSettingsRestore()
0bffb4be 104
105
39d7f74f 106""" styling
107" nice default theme
108colorscheme murphy
109
110" always use color column with less intrusive colors
58a8dbcc 111autocmd VimEnter,WinNew * set colorcolumn=80
39d7f74f 112" always use cursor line for better visibility
58a8dbcc 113autocmd VimEnter,WinNew * set cursorline
58a8dbcc 114
39d7f74f 115" unique highlighting for leading spaces and in-line spaces
116" NOTE: this leaves tabs and other special whitespace untouched intentionally
1ac43be8 117autocmd VimEnter,ColorScheme * highlight SpaceInner ctermfg=Grey guifg=#686868
118autocmd VimEnter,ColorScheme * highlight link SpaceOuter NonText
119autocmd VimEnter,WinNew * match SpaceInner / /
120autocmd VimEnter,WinNew * 2match SpaceOuter /\(^ \+\)\|\( \+$\)/
39d7f74f 121
122" always show statusline
123set laststatus=2
124
125" truncate > lastline; lastline is nvim default, sensible.vim may also set it
126set display=truncate
127
128" more context while scrolling
129set scrolloff=5
130set sidescrolloff=8
131
132" show number column on all buffers
133autocmd VimEnter,WinNew * set number
134" use relative numbers in normal modes when focused, but not if number is off
135function! s:SetRelativeNumber(enable)
136 if !getwinvar(winnr(), '&number')
137 return
138 endif
139 if a:enable
140 set relativenumber
141 else
142 set norelativenumber
143 endif
144endfunction
145autocmd InsertEnter,FocusLost,WinLeave * call s:SetRelativeNumber(0)
146autocmd VimEnter,WinNew,
147 \InsertLeave,FocusGained,WinEnter * call s:SetRelativeNumber(1)
148
149" always show custom listchars
58a8dbcc 150autocmd VimEnter,WinNew * set list
1b8a4102 151set listchars=tab:├─,extends:»,precedes:«,space:·,trail:∙,nbsp:■
58a8dbcc 152
0bffb4be 153
39d7f74f 154""" editor
155" always save undo file for all file buffers
01aaaf66 156autocmd BufReadPre * setlocal undofile
157
ddcfe43c 158
ec9f2140 159" explicitly use modeline, even on systems where it's disabled by system vimrc
6ebc1fca 160autocmd BufRead * set modeline
ec9f2140 161" should be default disabled but just in case
162set nomodelineexpr
163
39d7f74f 164"" indent
165" always use shiftwidth instead of tabsize
166set smarttab
167" filetype preferences
58a8dbcc 168autocmd FileType python set softtabstop=4 shiftwidth=4 expandtab
169autocmd FileType markdown set softtabstop=4 shiftwidth=4 expandtab
170autocmd FileType javascript set softtabstop=2 shiftwidth=2 expandtab
171autocmd FileType json set softtabstop=2 shiftwidth=2 expandtab
172autocmd FileType html set softtabstop=2 shiftwidth=2 expandtab
e69caf64 173let g:EditorConfig_enable_for_new_buf = 1
58a8dbcc 174
39d7f74f 175"" syntax
fbdf3d0e 176autocmd Syntax php syn clear phpHereDoc phpNowDoc
b3b23234 177
39d7f74f 178"" mappings
179" use more accessible escapes, as C-n and C-o are shadowed by some terminals
b3b23234 180if has('nvim')
181 tnoremap <C-\>n <C-\><C-N>
182 tnoremap <C-\>o <C-\><C-O>
183endif
184
39d7f74f 185" move windows any time
b3b23234 186if has('nvim')
187 " terminal
188 tnoremap <A-h> <C-\><C-N><C-w>h
189 tnoremap <A-j> <C-\><C-N><C-w>j
190 tnoremap <A-k> <C-\><C-N><C-w>k
191 tnoremap <A-l> <C-\><C-N><C-w>l
192endif
193" insert
194inoremap <A-h> <C-\><C-N><C-w>h
195inoremap <A-j> <C-\><C-N><C-w>j
196inoremap <A-k> <C-\><C-N><C-w>k
197inoremap <A-l> <C-\><C-N><C-w>l
198" normal
199nnoremap <A-h> <C-w>h
200nnoremap <A-j> <C-w>j
201nnoremap <A-k> <C-w>k
202nnoremap <A-l> <C-w>l
39d7f74f 203
204"" CTRL-L to clear highlighting and also update diff
205" NOTE: sensible.vim and nvim already do this, so copy sensible.vim
206" functionality if it hasn't been set or we aren't nvim. taken from
207" sensible.vim by Tim Pope, under Vim license; see :help license
208" https://github.com/tpope/vim-sensible/blob/0ce2d843d6f588bb0c8c7eec6449171615dc56d9/plugin/sensible.vim#L57
209if !has('nvim') && maparg('<C-L>', 'n') ==# ''
210 nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
211endif
This page took 0.10195 seconds and 4 git commands to generate.