aboutsummaryrefslogtreecommitdiff
path: root/vim/vimrc
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2020-04-25 19:34:14 +1200
committerTom Ryder <tom@sanctum.geek.nz>2020-04-25 19:34:14 +1200
commit0d1a44c4b4a8a3a8d25a6d3a433dfcd4f408e9f3 (patch)
tree5ab01f553a43bfe353d491614650a0b6d9682c1a /vim/vimrc
parentMerge branch 'release/v8.19.0' (diff)
parentBump VERSION (diff)
downloaddotfiles-0d1a44c4b4a8a3a8d25a6d3a433dfcd4f408e9f3.tar.gz
dotfiles-0d1a44c4b4a8a3a8d25a6d3a433dfcd4f408e9f3.zip
Merge branch 'release/v8.20.0'v8.20.0
* release/v8.20.0: Revert "Remove Vim :helptags generation" Remove Vim :helptags generation Include XDG_{CONFIG,DATA}_DIRS handling in Vim Roll out the beginnings of XDG support for Vim Remove thesaurus install target Correct built paths for Vim cache dirs Use explicitly nullglob Zsh patterns
Diffstat (limited to 'vim/vimrc')
-rw-r--r--vim/vimrc59
1 files changed, 36 insertions, 23 deletions
diff --git a/vim/vimrc b/vim/vimrc
index adbc9f05..27a79a6f 100644
--- a/vim/vimrc
+++ b/vim/vimrc
@@ -93,17 +93,28 @@ scriptencoding utf-8
"
" We do all this with an autoloaded function option#Split().
"
-" If an environment variable MYVIM exists, and it isn’t blank, apply its value
-" as the first value of 'runtimepath', after escaping it appropriately.
-" Otherwise, do it the other way around: the first path in the 'runtimepath'
-" list becomes MYVIM.
-"
-if exists('$MYVIM') && $MYVIM !=# ''
- execute 'set runtimepath^='.option#Escape(option#item#Escape($MYVIM, 1))
-elseif &runtimepath !=# ''
+" We define an environment variable for ~/.vim or ~/vimfiles, by retrieving
+" the first value from the 'runtimepath', correctly split.
+"
+if &runtimepath !=# ''
let $MYVIM = option#Split(&runtimepath)[0]
endif
+" We'll use the XDG directories as machine-local configuration and storage.
+" <https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables>
+"
+"" Config
+for s:configdir in reverse(xdg#ConfigDirs('vim'))
+ execute 'set runtimepath^='
+ \.option#Escape(option#item#Escape(s:configdir))
+endfor
+"" Cache; put this first so that e.g. spellfiles get created in it
+let s:cachedir = xdg#CacheDir('vim')
+execute 'set runtimepath^='
+ \.option#Escape(option#item#Escape(s:cachedir))
+"" Data
+let s:datadir = xdg#DataDirs('vim')[0]
+
" We need a command to reliably establish a full path, whether or not the
" directories already exist. We create a wrapper for the autoloaded function
" path#Create() with similar calling conventions to mkdir(), but with the ‘p’
@@ -133,8 +144,8 @@ command! -bang -bar -complete=dir -nargs=1 CreatePath
"
" <https://github.com/vim/vim/releases/tag/v8.1.0716>
"
-execute 'set viminfo+='.option#Escape('n'.$MYVIM.'/viminfo')
-call path#Create($MYVIM)
+execute 'set viminfo+='.option#Escape('n'.s:cachedir.'/viminfo')
+call path#Create(s:cachedir)
" Speaking of recorded data in viminfo files, the default Vim limit of a mere
" 50 entries for command and search history is pretty stingy. Because I don’t
@@ -180,9 +191,9 @@ set history=10000
"
set backup
execute 'set backupdir^='.option#Escape(option#item#Escape(
- \ $MYVIM.'/backup'.(has#('patch-8.1.251') ? '//' : ''),
+ \ s:cachedir.'/backup'.(has#('patch-8.1.251') ? '//' : ''),
\))
-call path#Create($MYVIM.'/backup')
+call path#Create(s:cachedir.'/backup')
" Files in certain directories on Unix-compatible filesystems should not be
" backed up, for security reasons. This is particularly important if editing
@@ -218,9 +229,10 @@ endif
" option has supported that hint for much longer than 'backupdir' has. We
" apply path#Create() to attempt to create the path, if needed.
"
+let s:swap = s:cachedir.'/swap'
execute 'set directory^='
- \.option#Escape(option#item#Escape($MYVIM.'/swap//'))
-call path#Create($MYVIM.'/swap')
+ \.option#Escape(option#item#Escape(s:swap.'//'))
+call path#Create(s:swap)
" Keep tracked undo history for files permanently, in a dedicated cache
" directory, so that the u/:undo and CTRL-R/:redo commands will work between
@@ -237,9 +249,10 @@ call path#Create($MYVIM.'/swap')
"
if has#('persistent_undo')
set undofile
+ let s:undodir = s:cachedir.'/undo'
execute 'set undodir^='
- \.option#Escape(option#item#Escape($MYVIM.'/undo//'))
- call path#Create($MYVIM.'/undo')
+ \.option#Escape(option#item#Escape(s:undodir.'//'))
+ call path#Create(s:undodir)
endif
" Set up a directory for files generated by :mkview. To date, I think I have
@@ -248,9 +261,10 @@ endif
" ('backupdir', 'directory', 'spell', 'undodir')
"
if has#('mksession')
+ let s:viewdir = s:cachedir.'/view'
execute 'set viewdir='
- \.option#Escape(option#item#Escape($MYVIM.'/view'))
- call path#Create($MYVIM.'/view')
+ \.option#Escape(option#item#Escape(s:viewdir))
+ call path#Create(s:viewdir)
endif
" Now that we have a bit more confidence in our runtime environment, set up
@@ -346,8 +360,8 @@ set spellcapcheck=[.?!]\\%(\ \ \\\|[\\n\\r\\t]\\)
" In much the same way, we add an expected path to a thesaurus, for completion
" with CTRL-X CTRL-T in insert mode, or with ‘t’ added to 'completeopt'. The
" thesaurus data isn’t installed as part of the default ‘install-vim’ target
-" in tejr’s dotfiles, but it can be retrieved and installed with
-" ‘install-vim-thesaurus’.
+" in tejr’s dotfiles, but it can be retrieved from
+" <https://sanctum.geek.nz/ref/thesaurus.txt>.
"
" I got the thesaurus itself from the link in the :help for 'thesaurus' in
" v8.1. It’s from WordNet and MyThes-1. I maintain a mirror on my own
@@ -365,12 +379,11 @@ set spellcapcheck=[.?!]\\%(\ \ \\\|[\\n\\r\\t]\\)
" around this one with 'isfname'; the blacklist is hard-coded.
"
set dictionary^=/usr/share/dict/words
-let s:ref = $MYVIM.'/ref'
try
execute 'set dictionary^='
- \.option#Escape(option#item#Escape(s:ref.'/dictionary.txt'))
+ \.option#Escape(option#item#Escape(s:datadir.'/dictionary.txt'))
execute 'set thesaurus^='
- \.option#Escape(option#item#Escape(s:ref.'/thesaurus.txt'))
+ \.option#Escape(option#item#Escape(s:datadir.'/thesaurus.txt'))
catch /^Vim\%((\a\+)\)\=:E474:/
endtry