man.vim: do not assume ftplugin is sourced before syntax

Fixes #5574
This commit is contained in:
Anmol Sethi 2016-11-19 01:08:23 -05:00
parent cf52b881d9
commit 7a4d069bcc
No known key found for this signature in database
GPG Key ID: 261F3CEEEE6F9819
3 changed files with 30 additions and 24 deletions

View File

@ -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

View File

@ -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

View File

@ -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