aboutsummaryrefslogtreecommitdiff
path: root/vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim')
-rw-r--r--vim/after/ftplugin/html.vim11
-rw-r--r--vim/after/ftplugin/html.vim~35
-rw-r--r--vim/autoload/html.vim7
3 files changed, 50 insertions, 3 deletions
diff --git a/vim/after/ftplugin/html.vim b/vim/after/ftplugin/html.vim
index b5c387fb..5f7155bc 100644
--- a/vim/after/ftplugin/html.vim
+++ b/vim/after/ftplugin/html.vim
@@ -3,11 +3,16 @@ if &filetype !=# 'html'
finish
endif
-" Use tidy(1) for checking and program formatting
+" Use tidy(1) for checking
compiler tidy
-setlocal equalprg=tidy\ -quiet
let b:undo_ftplugin .= '|unlet b:current_compiler'
- \ . '|setlocal equalprg< errorformat< makeprg<'
+ \ . '|setlocal errorformat< makeprg<'
+
+" tidy(1) copes fine with formatting an entire document, but not just part of
+" it; we map \= to do the former, but don't actually set 'equalprg', falling
+" back on the good-enough built-in Vim indentation behavior.
+nnoremap <buffer> <Leader>= :<C-U>call html#TidyBuffer()<CR>
+let b:undo_ftplugin .= '|nunmap <buffer> <Leader>='
" Set up hooks for timestamp updating
augroup html_timestamp
diff --git a/vim/after/ftplugin/html.vim~ b/vim/after/ftplugin/html.vim~
new file mode 100644
index 00000000..5f7155bc
--- /dev/null
+++ b/vim/after/ftplugin/html.vim~
@@ -0,0 +1,35 @@
+" Don't load if the buffer is not actually HTML (e.g. Markdown)
+if &filetype !=# 'html'
+ finish
+endif
+
+" Use tidy(1) for checking
+compiler tidy
+let b:undo_ftplugin .= '|unlet b:current_compiler'
+ \ . '|setlocal errorformat< makeprg<'
+
+" tidy(1) copes fine with formatting an entire document, but not just part of
+" it; we map \= to do the former, but don't actually set 'equalprg', falling
+" back on the good-enough built-in Vim indentation behavior.
+nnoremap <buffer> <Leader>= :<C-U>call html#TidyBuffer()<CR>
+let b:undo_ftplugin .= '|nunmap <buffer> <Leader>='
+
+" Set up hooks for timestamp updating
+augroup html_timestamp
+ autocmd BufWritePre <buffer>
+ \ if exists('b:html_timestamp_check')
+ \| call html#TimestampUpdate()
+ \|endif
+augroup END
+let b:undo_ftplugin .= '|execute ''autocmd! html_timestamp'''
+ \ . '|augroup! html_timestamp'
+
+" Stop here if the user doesn't want ftplugin mappings
+if exists('g:no_plugin_maps') || exists('g:no_html_maps')
+ finish
+endif
+
+" Transform URLs to HTML anchors
+nnoremap <buffer> <LocalLeader>r
+ \ :<C-U>call html#UrlLink()<CR>
+let b:undo_ftplugin .= '|nunmap <buffer> <LocalLeader>r'
diff --git a/vim/autoload/html.vim b/vim/autoload/html.vim
index c3d99706..e0d47e47 100644
--- a/vim/autoload/html.vim
+++ b/vim/autoload/html.vim
@@ -14,6 +14,13 @@ function! html#UrlLink() abort
endfunction
+" Tidy the whole buffer
+function! html#TidyBuffer() abort
+ let l:view = winsaveview()
+ %!tidy -quiet
+ call winrestview(l:view)
+endfunction
+
" Update a timestamp
function! html#TimestampUpdate() abort
if !&modified