diff options
-rw-r--r-- | runtime/autoload/man.vim | 27 | ||||
-rw-r--r-- | runtime/ftplugin/man.vim | 24 | ||||
-rw-r--r-- | runtime/syntax/man.vim | 3 |
3 files changed, 30 insertions, 24 deletions
diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim index 5c44e8c98a..563180c79b 100644 --- a/runtime/autoload/man.vim +++ b/runtime/autoload/man.vim @@ -50,11 +50,11 @@ function! man#open_page(count, count1, mods, ...) abort return endtry call s:push_tag() - let bufname = fnameescape('man://'.name.(empty(sect)?'':'('.sect.')')) + 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 _ @@ -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 4ed21e146e..b8acd901a8 100644 --- a/runtime/ftplugin/man.vim +++ b/runtime/ftplugin/man.vim @@ -1,31 +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 - 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) +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 |