aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'vim/plugin')
-rw-r--r--vim/plugin/put_date.vim11
-rw-r--r--vim/plugin/spellfile_local.vim19
-rw-r--r--vim/plugin/utc.vim31
3 files changed, 55 insertions, 6 deletions
diff --git a/vim/plugin/put_date.vim b/vim/plugin/put_date.vim
new file mode 100644
index 00000000..29cf886e
--- /dev/null
+++ b/vim/plugin/put_date.vim
@@ -0,0 +1,11 @@
+if exists('loaded_put_date')
+ finish
+endif
+let loaded_put_date = 1
+
+" Define a :PutDate command that inserts a line into the buffer with an
+" RFC-2822 date string, using the system strftime() implementation. Allow it
+" to accept a range which defaults to the current line.
+"
+command! -range PutDate
+ \ <line1>put =strftime('%a, %d %b %Y %T %z')
diff --git a/vim/plugin/spellfile_local.vim b/vim/plugin/spellfile_local.vim
index 583df986..0ded3fc1 100644
--- a/vim/plugin/spellfile_local.vim
+++ b/vim/plugin/spellfile_local.vim
@@ -3,7 +3,7 @@ if exists('loaded_spellfile_local')
endif
let loaded_spellfile_local = 1
-EnsureDir $MYVIM/cache/spell
+Establish $MYVIM/cache/spell
let spellfile = join([
\ substitute(v:lang, '_.*', '', ''),
@@ -11,9 +11,9 @@ let spellfile = join([
\ ], '.') . '.add'
execute 'set spellfile=$MYVIM/cache/spell/'.spellfile
-EnsureDir $MYVIM/cache/spell/local
+Establish $MYVIM/cache/spell/local
-function! AddLocalSpellfile() abort
+function! AddLocalSpellFile() abort
let spellfile = join([
\ substitute(expand('%:p'), '[^0-9A-Za-z_.-]', '%', 'g'),
\ substitute(v:lang, '_.*', '', ''),
@@ -21,6 +21,13 @@ function! AddLocalSpellfile() abort
\ ], '.') . '.add'
setlocal spellfile<
execute 'setlocal spellfile+=$MYVIM/cache/spell/local/'.spellfile
-endfunction!
-autocmd vimrc BufRead *
- \ call AddLocalSpellfile() | nnoremap <buffer> zG 2zg
+ nnoremap <buffer> zG 2zg
+endfunction
+
+command! AddLocalSpellFile
+ \ call AddLocalSpellFile()
+
+augroup spellfile_local
+ autocmd BufRead *
+ \ AddLocalSpellFile
+augroup END
diff --git a/vim/plugin/utc.vim b/vim/plugin/utc.vim
new file mode 100644
index 00000000..39eebad8
--- /dev/null
+++ b/vim/plugin/utc.vim
@@ -0,0 +1,31 @@
+if exists('loaded_utc')
+ finish
+endif
+let loaded_utc = 1
+
+" Define a :UTC command wrapper, implemented with a script-local function of
+" the same name. Use expand('$TZ') to ensure we're getting the value of the
+" current timezone from the environment, and cache that in a local variable
+" just long enough to manipulate the environment into using UTC for a command.
+"
+" While this is a tidy way to abstract the operation for the map, I don't like
+" the function implementation much at all. It works OK in stable versions of
+" Vim, but changing an environment variable just long enough to affect the
+" outcome of a command as a side effect seems a bit gross.
+"
+" Worse, the whole thing presently seems to be broken in v8.1.1487; the
+" timezone first chosen seems to 'stick' permanently, and the mapping each
+" produce timestamps in that zone. I haven't worked out why this happens yet.
+" Using the new getenv() and setenv() functions does not seem to fix it. It
+" works fine in Debian GNU/Linux's packaged v8.0.x.
+
+function! s:UTC(command) abort
+ let tz = expand('$TZ')
+ let $TZ = 'UTC' | execute a:command | let $TZ = tz
+endfunction
+
+" The :UTC command itself completes another command name, and accepts one
+" required argument, which it passes in quoted form to the helper function.
+"
+command! -complete=command -nargs=1 UTC
+ \ call s:UTC(<q-args>)