2 "" config dir in xdg config
3 let x = ($XDG_CONFIG_HOME??($HOME.'/.config')).'/vim'
4 execute 'set runtimepath='.x.','.&runtimepath.','.x.'/after'
5 execute 'set packpath='.x.','.&packpath.','.x.'/after'
7 "" state files in xdg state
8 let x = ($XDG_STATE_HOME??($HOME.'/.local/state')).'/vim'
10 call mkdir(x, 'p', 0700)
14 " NOTE: keep backup files in vim state dir for both vim and neovim
17 call mkdir(y, 'p', 0700)
19 execute 'set backupdir='.y.'//'
20 set backup backupcopy=yes
22 " NOTE: neovim uses ShaDa (SHAred DAta) format for viminfo and swap, and uses a
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.
26 " NOTE: neovim has a nice default for these directories and files so
27 " customizing them is not necessary for it.
30 " NOTE: 'viminfofile' is a deprecated alias for 'shada' in neovim
31 execute 'set viminfofile='.x.'/.viminfo'
36 call mkdir(y, 'p', 0700)
38 execute 'set directory='.y.'//'
43 call mkdir(y, 'p', 0700)
45 execute 'set undodir='.y.'//'
54 " neovim defaults are already set
55 source $VIMRUNTIME/defaults.vim
57 " disable jumping to last edit, we use vim-lastplace instead
62 packadd! editorconfig " this is now built to [n]vim in but optional
63 packadd! vim-commentary " nvim has built in commenting now
67 autocmd BufRead * set autoindent
73 " https://github.com/lambdalisue/vim-suda/issues/32#issuecomment-829608925
75 let g:suda_smart_edit = 1
83 " always use color column with less intrusive colors
84 autocmd VimEnter,WinNew * set colorcolumn=80
85 " always use cursor line for better visibility
86 autocmd VimEnter,WinNew * set cursorline
88 " unique highlighting for leading spaces and in-line spaces
89 " NOTE: this leaves tabs and other special whitespace untouched intentionally
90 autocmd VimEnter,ColorScheme * highlight SpaceInner ctermfg=Grey guifg=#686868
91 autocmd VimEnter,ColorScheme * highlight link SpaceOuter NonText
92 autocmd VimEnter,WinNew * match SpaceInner / /
93 autocmd VimEnter,WinNew * 2match SpaceOuter /\(^ \+\)\|\( \+$\)/
95 " always show statusline
98 " truncate > lastline; lastline is nvim default, sensible.vim may also set it
101 " more context while scrolling
105 " show number column on all buffers
106 autocmd VimEnter,WinNew * set number
107 " use relative numbers in normal modes when focused, but not if number is off
108 function! s:SetRelativeNumber(enable)
109 if !getwinvar(winnr(), '&number')
118 autocmd InsertEnter,FocusLost,WinLeave * call s:SetRelativeNumber(0)
119 autocmd VimEnter,WinNew,
120 \InsertLeave,FocusGained,WinEnter * call s:SetRelativeNumber(1)
122 " always show custom listchars
123 autocmd VimEnter,WinNew * set list
124 set listchars=tab:├─,extends:»,precedes:«,space:·,trail:∙,nbsp:■
128 " always save undo file for all file buffers
129 autocmd BufRead * set undofile
131 " explicitly use modeline, even on systems where it's disabled by system vimrc
132 autocmd BufRead * set modeline
133 " should be default disabled but just in case
137 " always use shiftwidth instead of tabsize
139 " filetype preferences
140 autocmd FileType python set softtabstop=4 shiftwidth=4 expandtab
141 autocmd FileType markdown set softtabstop=4 shiftwidth=4 expandtab
142 autocmd FileType javascript set softtabstop=2 shiftwidth=2 expandtab
143 autocmd FileType json set softtabstop=2 shiftwidth=2 expandtab
144 autocmd FileType html set softtabstop=2 shiftwidth=2 expandtab
145 let g:EditorConfig_enable_for_new_buf = 1
148 autocmd Syntax php syn clear phpHereDoc phpNowDoc
151 " use more accessible escapes, as C-n and C-o are shadowed by some terminals
153 tnoremap <C-\>n <C-\><C-N>
154 tnoremap <C-\>o <C-\><C-O>
157 " move windows any time
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
166 inoremap <A-h> <C-\><C-N><C-w>h
167 inoremap <A-j> <C-\><C-N><C-w>j
168 inoremap <A-k> <C-\><C-N><C-w>k
169 inoremap <A-l> <C-\><C-N><C-w>l
171 nnoremap <A-h> <C-w>h
172 nnoremap <A-j> <C-w>j
173 nnoremap <A-k> <C-w>k
174 nnoremap <A-l> <C-w>l
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
181 if !has('nvim') && maparg('<C-L>', 'n') ==# ''
182 nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>