Calvin Waterbury asked on Sunday, October 01, 2006 3:00 PM about
  an "Outline" feature:

  > The "Outline" feature is mainly intended to produce a much
  > larger work, like a book**.  The format that is in my present
  > editor has a "gutter" on the side which has listed the headings
  > of the "chapters."  The active text ed window only displays the
  > contents of the heading selected.

  One way would be via folds but this won't have the "gutter" (see
  the file "notes.vim" below).

  The exact feature (with "gutter") can be implemented with some
  VimL scripting.

  > I realize and know how I can implement a work-around, but if
  > this is available or can be created, then it would be desirable.

  What is your work-around?

  --Suresh

"Here's my $VIM/vimfiles/ftplugin/notes.vim file:

    if exists("b:did_ftplugin")
      finish
    endif
    let b:did_ftplugin = 1  " Don't load another plugin for this buffer
    
    "mapping to underline
    "nmap <buffer>  <localleader>u $a:<esc>Yp$x^v$r-
    nmap <buffer>  <localleader>u Yp$x^v$r- 
    
    nmap <buffer> <F5>  :syn off\|syn on<cr>
    
    setlocal spell
    setlocal smartindent
    
    setlocal foldexpr=MyNotesFoldLevel(v:lnum) 
    setlocal foldmethod=expr 
    setlocal foldtext=getline(v:foldstart) 
    setlocal foldcolumn=0 
    setlocal fillchars=fold:\ 
    
    if !exists("*s:MyNotesFoldLevel")
    function! MyNotesFoldLevel(acline)
    
       let cline = a:acline
    
       let text   = getline(cline)
    
       "a blank line inherits its foldlevel
       if(text =~ '^\s*$') | return '=' | endif
    
       if(cline == 1) | return (indent(cline) + 1)/3 | endif
    
       let textm1  = getline(cline-1)
    
       "interior line of a para 
       if(textm1 !~ '^\s*$') 
           if(getline(cline+1) =~ '^\s*$') | return '=' | endif
           " see if this line starts a hanging indent!
           if(indent(cline) < indent(cline+1)) | return '>'. 
((indent(cline)+1)/3) | endif
           return '='  
       endif 
    
       "find the nearest non-blank line above 
       let i = 2
       let textm = getline(cline-i)
       while(textm =~ '^\s*$')  " will always exit from while
           let i = i + 1
           let textm = getline(cline-i)
       endwhile
    
       "this line and preceding non-trivial line have different indents
       if(indent(cline) != indent(cline-i)) | return '>'. ((indent(cline)+1)/3) 
| endif
    
       "preceding non-trivial line is single line para
       let i = i + 1
       let textm = getline(cline-i)
       if(textm =~ '^\s*$') | return '>'. ((indent(cline)+1)/3) | endif
    
       "this line starts a hanging indent
       if(indent(cline) < indent(cline+1)) | return '>'. ((indent(cline)+1)/3) 
| endif
       "TODO:  maybe preceding should be '>=' (after computing what = would 
entail)
    
       return '='
    
    endfunction
    
    endif
    
finish

Reply via email to