]> git.sev.monster Git - dotfiles.git/blame - etc/vim/.vimrc
vimrc: fix modeline aucmd
[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
39d7f74f 51""" vim-only defaults
52if !has('nvim')
53 " neovim defaults are already set
54 source $VIMRUNTIME/defaults.vim
b3b23234 55
39d7f74f 56 " disable jumping to last edit, we use vim-lastplace instead
57 autocmd! vimStartup
58a8dbcc 58
39d7f74f 59 " packages
60 packadd! matchit
61 packadd! editorconfig " this is now built to [n]vim in but optional
62 packadd! vim-commentary " nvim has built in commenting now
63
64 " options
65 set hlsearch
66 autocmd BufRead * set autoindent
67endif
68
69""" styling
70" nice default theme
71colorscheme murphy
72
73" always use color column with less intrusive colors
58a8dbcc 74autocmd VimEnter,WinNew * set colorcolumn=80
39d7f74f 75" always use cursor line for better visibility
58a8dbcc 76autocmd VimEnter,WinNew * set cursorline
58a8dbcc 77
39d7f74f 78" unique highlighting for leading spaces and in-line spaces
79" NOTE: this leaves tabs and other special whitespace untouched intentionally
1ac43be8 80autocmd VimEnter,ColorScheme * highlight SpaceInner ctermfg=Grey guifg=#686868
81autocmd VimEnter,ColorScheme * highlight link SpaceOuter NonText
82autocmd VimEnter,WinNew * match SpaceInner / /
83autocmd VimEnter,WinNew * 2match SpaceOuter /\(^ \+\)\|\( \+$\)/
39d7f74f 84
85" always show statusline
86set laststatus=2
87
88" truncate > lastline; lastline is nvim default, sensible.vim may also set it
89set display=truncate
90
91" more context while scrolling
92set scrolloff=5
93set sidescrolloff=8
94
95" show number column on all buffers
96autocmd VimEnter,WinNew * set number
97" use relative numbers in normal modes when focused, but not if number is off
98function! s:SetRelativeNumber(enable)
99 if !getwinvar(winnr(), '&number')
100 return
101 endif
102 if a:enable
103 set relativenumber
104 else
105 set norelativenumber
106 endif
107endfunction
108autocmd InsertEnter,FocusLost,WinLeave * call s:SetRelativeNumber(0)
109autocmd VimEnter,WinNew,
110 \InsertLeave,FocusGained,WinEnter * call s:SetRelativeNumber(1)
111
112" always show custom listchars
58a8dbcc 113autocmd VimEnter,WinNew * set list
1b8a4102 114set listchars=tab:├─,extends:»,precedes:«,space:·,trail:∙,nbsp:■
58a8dbcc 115
39d7f74f 116""" editor
117" always save undo file for all file buffers
118autocmd BufRead * set undofile
ddcfe43c 119
ec9f2140 120" explicitly use modeline, even on systems where it's disabled by system vimrc
6ebc1fca 121autocmd BufRead * set modeline
ec9f2140 122" should be default disabled but just in case
123set nomodelineexpr
124
39d7f74f 125"" indent
126" always use shiftwidth instead of tabsize
127set smarttab
128" filetype preferences
58a8dbcc 129autocmd FileType python set softtabstop=4 shiftwidth=4 expandtab
130autocmd FileType markdown set softtabstop=4 shiftwidth=4 expandtab
131autocmd FileType javascript set softtabstop=2 shiftwidth=2 expandtab
132autocmd FileType json set softtabstop=2 shiftwidth=2 expandtab
133autocmd FileType html set softtabstop=2 shiftwidth=2 expandtab
e69caf64 134let g:EditorConfig_enable_for_new_buf = 1
58a8dbcc 135
39d7f74f 136"" syntax
58a8dbcc 137autocmd FileType todo set colorcolumn=0
b3b23234 138
39d7f74f 139"" mappings
140" use more accessible escapes, as C-n and C-o are shadowed by some terminals
b3b23234 141if has('nvim')
142 tnoremap <C-\>n <C-\><C-N>
143 tnoremap <C-\>o <C-\><C-O>
144endif
145
39d7f74f 146" move windows any time
b3b23234 147if has('nvim')
148 " terminal
149 tnoremap <A-h> <C-\><C-N><C-w>h
150 tnoremap <A-j> <C-\><C-N><C-w>j
151 tnoremap <A-k> <C-\><C-N><C-w>k
152 tnoremap <A-l> <C-\><C-N><C-w>l
153endif
154" insert
155inoremap <A-h> <C-\><C-N><C-w>h
156inoremap <A-j> <C-\><C-N><C-w>j
157inoremap <A-k> <C-\><C-N><C-w>k
158inoremap <A-l> <C-\><C-N><C-w>l
159" normal
160nnoremap <A-h> <C-w>h
161nnoremap <A-j> <C-w>j
162nnoremap <A-k> <C-w>k
163nnoremap <A-l> <C-w>l
39d7f74f 164
165"" CTRL-L to clear highlighting and also update diff
166" NOTE: sensible.vim and nvim already do this, so copy sensible.vim
167" functionality if it hasn't been set or we aren't nvim. taken from
168" sensible.vim by Tim Pope, under Vim license; see :help license
169" https://github.com/tpope/vim-sensible/blob/0ce2d843d6f588bb0c8c7eec6449171615dc56d9/plugin/sensible.vim#L57
170if !has('nvim') && maparg('<C-L>', 'n') ==# ''
171 nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
172endif
This page took 0.135433 seconds and 4 git commands to generate.