]> git.sev.monster Git - dotfiles.git/blame_incremental - etc/vim/.vimrc
vim: fix vimrc, remove todo plugin, add lastplace
[dotfiles.git] / etc / vim / .vimrc
... / ...
CommitLineData
1""" paths
2"" config dir in xdg config
3let x = ($XDG_CONFIG_HOME??($HOME.'/.config')).'/vim'
4execute 'set runtimepath='.x.','.&runtimepath.','.x.'/after'
5execute 'set packpath='.x.','.&packpath.','.x.'/after'
6
7"" state files in xdg state
8let x = ($XDG_STATE_HOME??($HOME.'/.local/state')).'/vim'
9if !isdirectory(x)
10 call mkdir(x, 'p', 0700)
11endif
12
13" backup
14" NOTE: keep backup files in vim state dir for both vim and neovim
15let y = x.'/backup'
16if !isdirectory(y)
17 call mkdir(y, 'p', 0700)
18endif
19execute 'set backupdir='.y.'//'
20set backup backupcopy=yes
21
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.
28if !has('nvim')
29 " viminfo
30 " NOTE: 'viminfofile' is a deprecated alias for 'shada' in neovim
31 execute 'set viminfofile='.x.'/.viminfo'
32
33 " swap
34 let y = x.'/swap'
35 if !isdirectory(y)
36 call mkdir(y, 'p', 0700)
37 endif
38 execute 'set directory='.y.'//'
39
40 " undo
41 let y = x.'/undo'
42 if !isdirectory(y)
43 call mkdir(y, 'p', 0700)
44 endif
45 execute 'set undodir='.y.'//'
46endif
47
48unlet x
49unlet y
50
51""" vim-only defaults
52if !has('nvim')
53 " neovim defaults are already set
54 source $VIMRUNTIME/defaults.vim
55
56 " disable jumping to last edit, we use vim-lastplace instead
57 autocmd! vimStartup
58
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
74autocmd VimEnter,WinNew * set colorcolumn=80
75" always use cursor line for better visibility
76autocmd VimEnter,WinNew * set cursorline
77
78" unique highlighting for leading spaces and in-line spaces
79" NOTE: this leaves tabs and other special whitespace untouched intentionally
80autocmd VimEnter,ColorScheme * highlight Space ctermfg=Grey guifg=#686868
81autocmd VimEnter,ColorScheme * highlight link SpaceLeading NonText
82autocmd VimEnter,WinNew * match Space / /
83autocmd VimEnter,WinNew * 2match SpaceLeading /\(^ \+\)\|\( \+$\)/
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
113autocmd VimEnter,WinNew * set list
114set listchars=tab:├─,extends:»,precedes:«,space:·,trail:∙,nbsp:■
115
116""" editor
117" always save undo file for all file buffers
118autocmd BufRead * set undofile
119
120"" indent
121" always use shiftwidth instead of tabsize
122set smarttab
123" filetype preferences
124autocmd FileType python set softtabstop=4 shiftwidth=4 expandtab
125autocmd FileType markdown set softtabstop=4 shiftwidth=4 expandtab
126autocmd FileType javascript set softtabstop=2 shiftwidth=2 expandtab
127autocmd FileType json set softtabstop=2 shiftwidth=2 expandtab
128autocmd FileType html set softtabstop=2 shiftwidth=2 expandtab
129let g:EditorConfig_enable_for_new_buf = 1
130
131"" syntax
132autocmd FileType todo set colorcolumn=0
133
134"" mappings
135" use more accessible escapes, as C-n and C-o are shadowed by some terminals
136if has('nvim')
137 tnoremap <C-\>n <C-\><C-N>
138 tnoremap <C-\>o <C-\><C-O>
139endif
140
141" move windows any time
142if has('nvim')
143 " terminal
144 tnoremap <A-h> <C-\><C-N><C-w>h
145 tnoremap <A-j> <C-\><C-N><C-w>j
146 tnoremap <A-k> <C-\><C-N><C-w>k
147 tnoremap <A-l> <C-\><C-N><C-w>l
148endif
149" insert
150inoremap <A-h> <C-\><C-N><C-w>h
151inoremap <A-j> <C-\><C-N><C-w>j
152inoremap <A-k> <C-\><C-N><C-w>k
153inoremap <A-l> <C-\><C-N><C-w>l
154" normal
155nnoremap <A-h> <C-w>h
156nnoremap <A-j> <C-w>j
157nnoremap <A-k> <C-w>k
158nnoremap <A-l> <C-w>l
159
160"" CTRL-L to clear highlighting and also update diff
161" NOTE: sensible.vim and nvim already do this, so copy sensible.vim
162" functionality if it hasn't been set or we aren't nvim. taken from
163" sensible.vim by Tim Pope, under Vim license; see :help license
164" https://github.com/tpope/vim-sensible/blob/0ce2d843d6f588bb0c8c7eec6449171615dc56d9/plugin/sensible.vim#L57
165if !has('nvim') && maparg('<C-L>', 'n') ==# ''
166 nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
167endif
This page took 0.049921 seconds and 4 git commands to generate.