diff options
-rw-r--r-- | runtime/autoload/man.vim | 27 | ||||
-rw-r--r-- | runtime/ftplugin/man.vim | 20 | ||||
-rw-r--r-- | runtime/syntax/man.vim | 3 |
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 |