summaryrefslogtreecommitdiffstats
path: root/runtime/plugin/manpager.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/plugin/manpager.vim')
-rw-r--r--runtime/plugin/manpager.vim41
1 files changed, 21 insertions, 20 deletions
diff --git a/runtime/plugin/manpager.vim b/runtime/plugin/manpager.vim
index 9ae2e7357f..dd0d1e8bce 100644
--- a/runtime/plugin/manpager.vim
+++ b/runtime/plugin/manpager.vim
@@ -1,29 +1,30 @@
" Vim plugin for using Vim as manpager.
" Maintainer: Enno Nagel <ennonagel+vim@gmail.com>
-" Last Change: 2017 November 07
+" Last Change: 2018 Feb 04
-" $MAN_PN is supposed to be set by MANPAGER, see ":help manpager.vim".
-if empty($MAN_PN)
- finish
-endif
+command! -nargs=0 MANPAGER call s:ManPager() | delcommand MANPAGER
-command! -nargs=0 MANPAGER call s:MANPAGER() | delcommand MANPAGER
-
-function! s:MANPAGER()
- let page_pattern = '\v\w[-_.:0-9A-Za-z]*'
- let sec_pattern = '\v\w+%(\+\w+)*'
- let pagesec_pattern = '\v(' . page_pattern . ')\((' . sec_pattern . ')\)'
-
- if $MAN_PN is '1'
- let manpage = tolower(matchstr( getline(nextnonblank(1)), '^' . pagesec_pattern ))
- else
- let manpage = expand($MAN_PN)
+function! s:ManPager()
+ set nocompatible
+ if exists('+viminfofile')
+ set viminfofile=NONE
endif
+ set noswapfile
- let page_sec = matchlist(manpage, '^' . pagesec_pattern . '$')
+ setlocal ft=man
+ runtime ftplugin/man.vim
+ setlocal buftype=nofile bufhidden=hide iskeyword+=: modifiable
- bwipe!
+ " Emulate 'col -b'
+ silent keepj keepp %s/\v(.)\b\ze\1?//ge
+
+ " Remove empty lines above the header
+ call cursor(1, 1)
+ let n = search(".*(.*)", "c")
+ if n > 1
+ exe "1," . n-1 . "d"
+ endif
+ setlocal nomodified readonly
- setlocal filetype=man
- exe 'Man' page_sec[2] page_sec[1]
+ syntax on
endfunction