aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/man.vim27
-rw-r--r--runtime/ftplugin/man.vim20
-rw-r--r--runtime/syntax/man.vim3
3 files changed, 30 insertions, 20 deletions
diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim
index bac88fc99e..563180c79b 100644
--- a/runtime/autoload/man.vim
+++ b/runtime/autoload/man.vim
@@ -52,9 +52,9 @@ function! man#open_page(count, count1, mods, ...) abort
call s:push_tag()
let bufname = 'man://'.name.(empty(sect)?'':'('.sect.')')
if a:mods !~# 'tab' && s:find_man()
- noautocmd execute 'silent edit' bufname
+ noautocmd execute 'silent edit' fnameescape(bufname)
else
- noautocmd execute 'silent' a:mods 'split' bufname
+ noautocmd execute 'silent' a:mods 'split' fnameescape(bufname)
endif
let b:man_sect = sect
call s:read_page(path)
@@ -81,7 +81,7 @@ function! s:read_page(path) abort
let cmd = 'env MANPAGER=cat'.(empty($MANWIDTH) ? ' MANWIDTH='.winwidth(0) : '')
let cmd .= ' '.s:man_cmd.' '.shellescape(a:path)
silent put =system(cmd)
- " remove all the backspaced text
+ " Remove all backspaced characters.
execute 'silent keeppatterns keepjumps %substitute,.\b,,e'.(&gdefault?'':'g')
while getline(1) =~# '^\s*$'
silent keepjumps 1delete _
@@ -157,7 +157,7 @@ endfunction
function! man#pop_tag() abort
if !empty(s:tag_stack)
let tag = remove(s:tag_stack, -1)
- silent execute tag['buf'].'buffer'
+ execute 'silent' tag['buf'].'buffer'
call cursor(tag['lnum'], tag['col'])
endif
endfunction
@@ -259,3 +259,22 @@ function! s:format_candidate(path, sect) abort
return name.'('.sect.')'
endif
endfunction
+
+function! man#init_pager() abort
+ " Remove all backspaced characters.
+ execute 'silent keeppatterns keepjumps %substitute,.\b,,e'.(&gdefault?'':'g')
+ if getline(1) =~# '^\s*$'
+ silent keepjumps 1delete _
+ else
+ keepjumps 1
+ endif
+ " This is not perfect. See `man glDrawArraysInstanced`. Since the title is
+ " all caps it is impossible to tell what the original capitilization was.
+ let ref = tolower(matchstr(getline(1), '^\S\+'))
+ try
+ let b:man_sect = man#extract_sect_and_name_ref(ref)[0]
+ catch
+ let b:man_sect = ''
+ endtry
+ execute 'silent file man://'.fnameescape(ref)
+endfunction
diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim
index f6fefd0155..b8acd901a8 100644
--- a/runtime/ftplugin/man.vim
+++ b/runtime/ftplugin/man.vim
@@ -1,27 +1,15 @@
" Maintainer: Anmol Sethi <anmol@aubble.com>
" Previous Maintainer: SungHyun Nam <goweol@gmail.com>
-if exists('b:did_ftplugin') || &filetype !=# 'man'
+if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
-let s:pager = 0
+let s:pager = !exists('b:man_sect')
-if has('vim_starting')
- let s:pager = 1
- " remove all those backspaces
- silent execute 'keeppatterns keepjumps %substitute,.\b,,e'.(&gdefault?'':'g')
- if getline(1) =~# '^\s*$'
- silent keepjumps 1delete _
- else
- keepjumps 1
- endif
- " This is not perfect. See `man glDrawArraysInstanced`. Since the title is
- " all caps it is impossible to tell what the original capitilization was.
- let ref = tolower(matchstr(getline(1), '^\S\+'))
- let b:man_sect = man#extract_sect_and_name_ref(ref)[0]
- execute 'silent file man://'.ref
+if s:pager
+ call man#init_pager()
endif
setlocal buftype=nofile
diff --git a/runtime/syntax/man.vim b/runtime/syntax/man.vim
index 4a527dd350..819b2adc31 100644
--- a/runtime/syntax/man.vim
+++ b/runtime/syntax/man.vim
@@ -18,6 +18,9 @@ highlight default link manOptionDesc Constant
highlight default link manReference PreProc
highlight default link manSubHeading Function
+if !exists('b:man_sect')
+ call man#init_pager()
+endif
if b:man_sect =~# '^[23]'
syntax include @c $VIMRUNTIME/syntax/c.vim
syntax match manCFuncDefinition display '\<\h\w*\>\ze\(\s\|\n\)*(' contained