Anonymous avatar Anonymous committed 2f79b28

import from ns9tks's repo.

Comments (0)

Files changed (4)

+"=============================================================================
+" Copyright (c) 2007-2009 Takeshi NISHIDA
+"
+"=============================================================================
+" LOAD GUARD {{{1
+
+if !l9#guardScriptLoading(expand('<sfile>:p'), 0, 0, [])
+  finish
+endif
+
+" }}}1
+"=============================================================================
+" GLOBAL FUNCTIONS: {{{1
+
+"
+function acp#enable()
+  call acp#disable()
+
+  augroup AcpGlobalAutoCommand
+    autocmd!
+    autocmd InsertEnter * unlet! s:posLast s:lastUncompletable
+    autocmd InsertLeave * call s:finishPopup(1)
+  augroup END
+
+  if g:acp_mappingDriven
+    call s:mapForMappingDriven()
+  else
+    autocmd AcpGlobalAutoCommand CursorMovedI * call s:feedPopup()
+  endif
+
+  nnoremap <silent> i i<C-r>=<SID>feedPopup()<CR>
+  nnoremap <silent> a a<C-r>=<SID>feedPopup()<CR>
+  nnoremap <silent> R R<C-r>=<SID>feedPopup()<CR>
+endfunction
+
+"
+function acp#disable()
+  call s:unmapForMappingDriven()
+  augroup AcpGlobalAutoCommand
+    autocmd!
+  augroup END
+  nnoremap i <Nop> | nunmap i
+  nnoremap a <Nop> | nunmap a
+  nnoremap R <Nop> | nunmap R
+endfunction
+
+"
+function acp#lock()
+  let s:lockCount += 1
+endfunction
+
+"
+function acp#unlock()
+  let s:lockCount -= 1
+  if s:lockCount < 0
+    let s:lockCount = 0
+    throw "AutoComplPop: not locked"
+  endif
+endfunction
+
+"
+function acp#meetsForSnipmate(context)
+  if g:acp_behaviorSnipmateLength < 0
+    return 0
+  endif
+  let matches = matchlist(a:context, '\(^\|\s\|\<\)\(\u\{' .
+        \                            g:acp_behaviorSnipmateLength . ',}\)$')
+  return !empty(matches) && !empty(s:getMatchingSnipItems(matches[2]))
+endfunction
+
+"
+function acp#meetsForKeyword(context)
+  if g:acp_behaviorKeywordLength < 0
+    return 0
+  endif
+  let matches = matchlist(a:context, '\(\k\{' . g:acp_behaviorKeywordLength . ',}\)$')
+  if empty(matches)
+    return 0
+  endif
+  for ignore in g:acp_behaviorKeywordIgnores
+    if stridx(ignore, matches[1]) == 0
+      return 0
+    endif
+  endfor
+  return 1
+endfunction
+
+"
+function acp#meetsForFile(context)
+  if g:acp_behaviorFileLength < 0
+    return 0
+  endif
+  if has('win32') || has('win64')
+    let separator = '[/\\]'
+  else
+    let separator = '\/'
+  endif
+  if a:context !~ '\f' . separator . '\f\{' . g:acp_behaviorFileLength . ',}$'
+    return 0
+  endif
+  return a:context !~ '[*/\\][/\\]\f*$\|[^[:print:]]\f*$'
+endfunction
+
+"
+function acp#meetsForRubyOmni(context)
+  if !has('ruby')
+    return 0
+  endif
+  if g:acp_behaviorRubyOmniMethodLength >= 0 &&
+        \ a:context =~ '[^. \t]\(\.\|::\)\k\{' .
+        \              g:acp_behaviorRubyOmniMethodLength . ',}$'
+    return 1
+  endif
+  if g:acp_behaviorRubyOmniSymbolLength >= 0 &&
+        \ a:context =~ '\(^\|[^:]\):\k\{' .
+        \              g:acp_behaviorRubyOmniSymbolLength . ',}$'
+    return 1
+  endif
+  return 0
+endfunction
+
+"
+function acp#meetsForPythonOmni(context)
+  return has('python') && g:acp_behaviorPythonOmniLength >= 0 &&
+        \ a:context =~ '\k\.\k\{' . g:acp_behaviorPythonOmniLength . ',}$'
+endfunction
+
+"
+function acp#meetsForPerlOmni(context)
+  return g:acp_behaviorPerlOmniLength >= 0 &&
+        \ a:context =~ '\w->\k\{' . g:acp_behaviorPerlOmniLength . ',}$'
+endfunction
+
+"
+function acp#meetsForXmlOmni(context)
+  return g:acp_behaviorXmlOmniLength >= 0 &&
+        \ a:context =~ '\(<\|<\/\|<[^>]\+ \|<[^>]\+=\"\)\k\{' .
+        \              g:acp_behaviorXmlOmniLength . ',}$'
+endfunction
+
+"
+function acp#meetsForHtmlOmni(context)
+  return g:acp_behaviorHtmlOmniLength >= 0 &&
+        \ a:context =~ '\(<\|<\/\|<[^>]\+ \|<[^>]\+=\"\)\k\{' .
+        \              g:acp_behaviorHtmlOmniLength . ',}$'
+endfunction
+
+"
+function acp#meetsForCssOmni(context)
+  if g:acp_behaviorCssOmniPropertyLength >= 0 &&
+        \ a:context =~ '\(^\s\|[;{]\)\s*\k\{' .
+        \              g:acp_behaviorCssOmniPropertyLength . ',}$'
+    return 1
+  endif
+  if g:acp_behaviorCssOmniValueLength >= 0 &&
+        \ a:context =~ '[:@!]\s*\k\{' .
+        \              g:acp_behaviorCssOmniValueLength . ',}$'
+    return 1
+  endif
+  return 0
+endfunction
+
+"
+function acp#completeSnipmate(findstart, base)
+  if a:findstart
+    let s:posSnipmateCompletion = len(matchstr(s:getCurrentText(), '.*\U'))
+    return s:posSnipmateCompletion
+  endif
+  let lenBase = len(a:base)
+  let items = filter(GetSnipsInCurrentScope(),
+        \            'strpart(v:key, 0, lenBase) ==? a:base')
+  return map(sort(items(items)), 's:makeSnipmateItem(v:val[0], v:val[1])')
+endfunction
+
+"
+function acp#onPopupCloseSnipmate()
+  let word = s:getCurrentText()[s:posSnipmateCompletion :]
+  for trigger in keys(GetSnipsInCurrentScope())
+    if word ==# trigger
+      call feedkeys("\<C-r>=TriggerSnippet()\<CR>", "n")
+      return 0
+    endif
+  endfor
+  return 1
+endfunction
+
+"
+function acp#onPopupPost()
+  " to clear <C-r>= expression on command-line
+  echo ''
+  if pumvisible()
+    inoremap <silent> <expr> <C-h> acp#onBs()
+    inoremap <silent> <expr> <BS>  acp#onBs()
+    " a command to restore to original text and select the first match
+    return (s:behavsCurrent[s:iBehavs].command =~# "\<C-p>" ? "\<C-n>\<Up>"
+          \                                                 : "\<C-p>\<Down>")
+  endif
+  let s:iBehavs += 1
+  if len(s:behavsCurrent) > s:iBehavs 
+    call s:setCompletefunc()
+    return printf("\<C-e>%s\<C-r>=acp#onPopupPost()\<CR>",
+          \       s:behavsCurrent[s:iBehavs].command)
+  else
+    let s:lastUncompletable = {
+          \   'word': s:getCurrentWord(),
+          \   'commands': map(copy(s:behavsCurrent), 'v:val.command')[1:],
+          \ }
+    call s:finishPopup(0)
+    return "\<C-e>"
+  endif
+endfunction
+
+"
+function acp#onBs()
+  " using "matchstr" and not "strpart" in order to handle multi-byte
+  " characters
+  if call(s:behavsCurrent[s:iBehavs].meets,
+        \ [matchstr(s:getCurrentText(), '.*\ze.')])
+    return "\<BS>"
+  endif
+  return "\<C-e>\<BS>"
+endfunction
+
+" }}}1
+"=============================================================================
+" LOCAL FUNCTIONS: {{{1
+
+"
+function s:mapForMappingDriven()
+  call s:unmapForMappingDriven()
+  let s:keysMappingDriven = [
+        \ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+        \ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+        \ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+        \ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+        \ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+        \ '-', '_', '~', '^', '.', ',', ':', '!', '#', '=', '%', '$', '@', '<', '>', '/', '\',
+        \ '<Space>', '<C-h>', '<BS>', ]
+  for key in s:keysMappingDriven
+    execute printf('inoremap <silent> %s %s<C-r>=<SID>feedPopup()<CR>',
+          \        key, key)
+  endfor
+endfunction
+
+"
+function s:unmapForMappingDriven()
+  if !exists('s:keysMappingDriven')
+    return
+  endif
+  for key in s:keysMappingDriven
+    execute 'iunmap ' . key
+  endfor
+  let s:keysMappingDriven = []
+endfunction
+
+"
+function s:getCurrentWord()
+  return matchstr(s:getCurrentText(), '\k*$')
+endfunction
+
+"
+function s:getCurrentText()
+  return strpart(getline('.'), 0, col('.') - 1)
+endfunction
+
+"
+function s:getPostText()
+  return strpart(getline('.'), col('.') - 1)
+endfunction
+
+"
+function s:isModifiedSinceLastCall()
+  if exists('s:posLast')
+    let posPrev = s:posLast
+    let nLinesPrev = s:nLinesLast
+    let textPrev = s:textLast
+  endif
+  let s:posLast = getpos('.')
+  let s:nLinesLast = line('$')
+  let s:textLast = getline('.')
+  if !exists('posPrev')
+    return 1
+  elseif posPrev[1] != s:posLast[1] || nLinesPrev != s:nLinesLast
+    return (posPrev[1] - s:posLast[1] == nLinesPrev - s:nLinesLast)
+  elseif textPrev ==# s:textLast
+    return 0
+  elseif posPrev[2] > s:posLast[2]
+    return 1
+  elseif has('gui_running') && has('multi_byte')
+    " NOTE: auto-popup causes a strange behavior when IME/XIM is working
+    return posPrev[2] + 1 == s:posLast[2]
+  endif
+  return posPrev[2] != s:posLast[2]
+endfunction
+
+"
+function s:makeCurrentBehaviorSet()
+  let modified = s:isModifiedSinceLastCall()
+  if exists('s:behavsCurrent[s:iBehavs].repeat') && s:behavsCurrent[s:iBehavs].repeat
+    let behavs = [ s:behavsCurrent[s:iBehavs] ]
+  elseif exists('s:behavsCurrent[s:iBehavs]')
+    return []
+  elseif modified
+    let behavs = copy(exists('g:acp_behavior[&filetype]')
+          \           ? g:acp_behavior[&filetype]
+          \           : g:acp_behavior['*'])
+  else
+    return []
+  endif
+  let text = s:getCurrentText()
+  call filter(behavs, 'call(v:val.meets, [text])')
+  let s:iBehavs = 0
+  if exists('s:lastUncompletable') &&
+        \ stridx(s:getCurrentWord(), s:lastUncompletable.word) == 0 &&
+        \ map(copy(behavs), 'v:val.command') ==# s:lastUncompletable.commands
+    let behavs = []
+  else
+    unlet! s:lastUncompletable
+  endif
+  return behavs
+endfunction
+
+"
+function s:feedPopup()
+  " NOTE: CursorMovedI is not triggered while the popup menu is visible. And
+  "       it will be triggered when popup menu is disappeared.
+  if s:lockCount > 0 || pumvisible() || &paste
+    return ''
+  endif
+  if exists('s:behavsCurrent[s:iBehavs].onPopupClose')
+    if !call(s:behavsCurrent[s:iBehavs].onPopupClose, [])
+      call s:finishPopup(1)
+      return ''
+    endif
+  endif
+  let s:behavsCurrent = s:makeCurrentBehaviorSet()
+  if empty(s:behavsCurrent)
+    call s:finishPopup(1)
+    return ''
+  endif
+  " In case of dividing words by symbols (e.g. "for(int", "ab==cd") while a
+  " popup menu is visible, another popup is not available unless input <C-e>
+  " or try popup once. So first completion is duplicated.
+  call insert(s:behavsCurrent, s:behavsCurrent[s:iBehavs])
+  call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
+        \ '&spell', 0)
+  call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
+        \ '&completeopt', 'menuone' . (g:acp_completeoptPreview ? ',preview' : ''))
+  call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
+        \ '&complete', g:acp_completeOption)
+  call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
+        \ '&ignorecase', g:acp_ignorecaseOption)
+  " NOTE: With CursorMovedI driven, Set 'lazyredraw' to avoid flickering.
+  "       With Mapping driven, set 'nolazyredraw' to make a popup menu visible.
+  call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
+        \ '&lazyredraw', !g:acp_mappingDriven)
+  " NOTE: 'textwidth' must be restored after <C-e>.
+  call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP1,
+        \ '&textwidth', 0)
+  call s:setCompletefunc()
+  call feedkeys(s:behavsCurrent[s:iBehavs].command . "\<C-r>=acp#onPopupPost()\<CR>", 'n')
+  return '' " this function is called by <C-r>=
+endfunction
+
+"
+function s:finishPopup(fGroup1)
+  inoremap <C-h> <Nop> | iunmap <C-h>
+  inoremap <BS>  <Nop> | iunmap <BS>
+  let s:behavsCurrent = []
+  call l9#tempvariables#end(s:TEMP_VARIABLES_GROUP0)
+  if a:fGroup1
+    call l9#tempvariables#end(s:TEMP_VARIABLES_GROUP1)
+  endif
+endfunction
+
+"
+function s:setCompletefunc()
+  if exists('s:behavsCurrent[s:iBehavs].completefunc')
+    call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
+          \ '&completefunc', s:behavsCurrent[s:iBehavs].completefunc)
+  endif
+endfunction
+
+"
+function s:makeSnipmateItem(key, snip)
+  if type(a:snip) == type([])
+    let descriptions = map(copy(a:snip), 'v:val[0]')
+    let snipFormatted = '[MULTI] ' . join(descriptions, ', ')
+  else
+    let snipFormatted = substitute(a:snip, '\(\n\|\s\)\+', ' ', 'g')
+  endif
+  return  {
+        \   'word': a:key,
+        \   'menu': strpart(snipFormatted, 0, 80),
+        \ }
+endfunction
+
+"
+function s:getMatchingSnipItems(base)
+  let key = a:base . "\n"
+  if !exists('s:snipItems[key]')
+    let s:snipItems[key] = items(GetSnipsInCurrentScope())
+    call filter(s:snipItems[key], 'strpart(v:val[0], 0, len(a:base)) ==? a:base')
+    call map(s:snipItems[key], 's:makeSnipmateItem(v:val[0], v:val[1])')
+  endif
+  return s:snipItems[key]
+endfunction
+
+" }}}1
+"=============================================================================
+" INITIALIZATION {{{1
+
+let s:TEMP_VARIABLES_GROUP0 = "AutoComplPop0"
+let s:TEMP_VARIABLES_GROUP1 = "AutoComplPop1"
+let s:lockCount = 0
+let s:behavsCurrent = []
+let s:iBehavs = 0
+let s:snipItems = {}
+
+" }}}1
+"=============================================================================
+" vim: set fdm=marker:
+*acp.txt*       補完メニューの自動ポップアップ
+
+        Copyright (c) 2007-2009 Takeshi NISHIDA
+
+AutoComplPop                                              *autocomplpop* *acp*
+
+概要                            |acp-introduction|
+インストール                    |acp-installation|
+使い方                          |acp-usage|
+コマンド                        |acp-commands|
+オプション                      |acp-options|
+SPECIAL THANKS                  |acp-thanks|
+CHANGELOG                       |acp-changelog|
+あばうと                        |acp-about|
+
+
+==============================================================================
+概要                                                *acp-introduction*
+
+このプラグインは、インサートモードで文字を入力したりカーソルを動かしたときに補
+完メニューを自動的に開くようにします。しかし、続けて文字を入力するのを妨げたり
+はしません。
+
+
+==============================================================================
+インストール                                                *acp-installation*
+
+ZIPファイルをランタイムディレクトリに展開します。
+
+以下のようにファイルが配置されるはずです。
+>
+        <your runtime directory>/plugin/acp.vim
+        <your runtime directory>/doc/acp.txt
+        ...
+<
+もしランタイムディレクトリが多数のプラグインでごちゃごちゃになるのが嫌なら、各
+プラグインを個別のディレクトリに配置し、そのディレクトリのパスを 'runtimepath'
+に追加してください。アンインストールも楽になります。
+
+その後、ヘルプを有効にするためにタグファイルを更新してください。詳しくは
+|add-local-help|を参照してください。
+
+必要なもの: ~
+
+- L9 library (vimscript #3252)
+
+
+==============================================================================
+使い方                                                              *acp-usage*
+
+このプラグインがインストールされていれば、自動ポップアップは vim の開始時から
+有効になります。
+
+カーソル直前のテキストに応じて、利用する補完の種類を切り替えます。デフォルトの
+補完動作は次の通りです:
+
+        補完モード      filetype    カーソル直前のテキスト ~
+        キーワード補完  *           2文字のキーワード文字
+        ファイル名補完  *           ファイル名文字 + パスセパレータ
+                                    + 0文字以上のファイル名文字
+        オムニ補完      ruby        ".", "::" or 単語を構成する文字以外 + ":"
+        オムニ補完      python      "."
+        オムニ補完      xml         "<", "</" or ("<" + ">"以外の文字列 + " ")
+        オムニ補完      html/xhtml  "<", "</" or ("<" + ">"以外の文字列 + " ")
+        オムニ補完      css         (":", ";", "{", "^", "@", or "!")
+                                    + 0個または1個のスペース
+
+さらに、設定を行うことで、ユーザー定義補完と snipMate トリガー補完
+(|acp-snipMate|) を自動ポップアップさせることができます。
+
+これらの補完動作はカスタマイズ可能です。
+
+                                                                *acp-snipMate*
+snipMate トリガー補完 ~
+
+snipMate トリガー補完では、snipMate プラグイン
+(http://www.vim.org/scripts/script.php?script_id=2540) が提供するスニペットの
+トリガーを補完してそれを展開することができます。
+
+この自動ポップアップを有効にするには、次の関数を plugin/snipMate.vim に追加す
+る必要があります:
+>
+  fun! GetSnipsInCurrentScope()
+    let snips = {}
+    for scope in [bufnr('%')] + split(&ft, '\.') + ['_']
+      call extend(snips, get(s:snippets, scope, {}), 'keep')
+      call extend(snips, get(s:multi_snips, scope, {}), 'keep')
+    endfor
+    return snips
+  endf
+<
+そして|g:acp_behaviorSnipmateLength|オプションを 1 にしてください。
+
+この自動ポップアップには制限があり、カーソル直前の単語は大文字英字だけで構成さ
+れていなければなりません。
+
+                                                               *acp-perl-omni*
+Perl オムニ補完 ~
+
+AutoComplPop は perl-completion.vim
+(http://www.vim.org/scripts/script.php?script_id=2852) をサポートしています。
+
+この自動ポップアップを有効にするには、|g:acp_behaviorPerlOmniLength|オプション
+を 0 以上にしてください。
+
+
+==============================================================================
+コマンド                                                        *acp-commands*
+
+                                                                  *:AcpEnable*
+:AcpEnable
+        自動ポップアップを有効にします。
+
+                                                                 *:AcpDisable*
+:AcpDisable
+        自動ポップアップを無効にします。
+
+                                                                    *:AcpLock*
+:AcpLock
+        自動ポップアップを一時的に停止します。
+
+        別のスクリプトへの干渉を回避する目的なら、このコマンドと|:AcpUnlock| 
+        を利用することを、|:AcpDisable|と|:AcpEnable| を利用するよりも推奨しま
+        す。
+
+                                                                  *:AcpUnlock*
+:AcpUnlock
+        |:AcpLock| で停止された自動ポップアップを再開します。
+
+
+==============================================================================
+オプション                                                          *acp-options*
+
+                                                    *g:acp_enableAtStartup*  >
+  let g:acp_enableAtStartup = 1
+<
+        真なら vim 開始時から自動ポップアップが有効になります。
+
+                                                      *g:acp_mappingDriven*  >
+  let g:acp_mappingDriven = 0
+<
+        真なら|CursorMovedI|イベントではなくキーマッピングで自動ポップアップを
+        行うようにします。カーソルを移動するたびに補完が行われることで重いなど
+        の不都合がある場合に利用してください。ただし他のプラグインとの相性問題
+        や日本語入力での不具合が発生する可能性があります。(逆も然り。)
+
+                                                   *g:acp_ignorecaseOption*  >
+  let g:acp_ignorecaseOption = 1
+<
+        自動ポップアップ時に、'ignorecase' に一時的に設定する値
+
+                                                     *g:acp_completeOption*  >
+  let g:acp_completeOption = '.,w,b,k'
+<
+        自動ポップアップ時に、'complete' に一時的に設定する値
+
+                                                 *g:acp_completeoptPreview*  >
+  let g:acp_completeoptPreview = 0
+<
+        真なら自動ポップアップ時に、 'completeopt' へ "preview" を追加します。
+
+                                        *g:acp_behaviorUserDefinedFunction*  >
+  let g:acp_behaviorUserDefinedFunction = ''
+<
+        ユーザー定義補完の|g:acp_behavior-completefunc|。空ならこの補完は行わ
+        れません。。
+
+                                         *g:acp_behaviorUserDefinedMeets*  >
+  let g:acp_behaviorUserDefinedMeets = ''
+<
+        ユーザー定義補完の|g:acp_behavior-meets|。空ならこの補完は行われません
+        。
+
+                                             *g:acp_behaviorSnipmateLength*  >
+  let g:acp_behaviorSnipmateLength = -1
+<
+        snipMate トリガー補完の自動ポップアップを行うのに必要なカーソルの直前
+        のパターン。
+
+                                             *g:acp_behaviorKeywordCommand*  >
+  let g:acp_behaviorKeywordCommand = "\<C-n>"
+<
+        キーワード補完のコマンド。このオプションには普通 "\<C-n>" か "\<C-p>"
+        を設定します。
+
+                                              *g:acp_behaviorKeywordLength*  >
+  let g:acp_behaviorKeywordLength = 2
+<
+        キーワード補完の自動ポップアップを行うのに必要なカーソルの直前のキーワ
+        ード文字数。負数ならこの補完は行われません。
+
+                                             *g:acp_behaviorKeywordIgnores*  >
+  let g:acp_behaviorKeywordIgnores = []
+<
+        文字列のリスト。カーソル直前の単語がこれらの内いずれかの先頭部分にマッ
+        チする場合、この補完は行われません。
+
+        例えば、 "get" で始まる補完キーワードが多過ぎて、"g", "ge", "get" を入
+        力したときの自動ポップアップがレスポンスの低下を引き起こしている場合、
+        このオプションに ["get"] を設定することでそれを回避することができます。
+
+                                                 *g:acp_behaviorFileLength*  >
+  let g:acp_behaviorFileLength = 0
+<
+        ファイル名補完の自動ポップアップを行うのに必要なカーソルの直前のキーワ
+        ード文字数。負数ならこの補完は行われません。
+
+                                       *g:acp_behaviorRubyOmniMethodLength*  >
+  let g:acp_behaviorRubyOmniMethodLength = 0
+<
+        メソッド補完のための、Ruby オムニ補完の自動ポップアップを行うのに必要
+        なカーソルの直前のキーワード文字数。負数ならこの補完は行われません。
+
+                                       *g:acp_behaviorRubyOmniSymbolLength*  >
+  let g:acp_behaviorRubyOmniSymbolLength = 1
+<
+        シンボル補完のための、Ruby オムニ補完の自動ポップアップを行うのに必要
+        なカーソルの直前のキーワード文字数。負数ならこの補完は行われません。
+
+                                           *g:acp_behaviorPythonOmniLength*  >
+  let g:acp_behaviorPythonOmniLength = 0
+<
+        Python オムニ補完の自動ポップアップを行うのに必要なカーソルの直前のキ
+        ーワード文字数。負数ならこの補完は行われません。
+
+                                             *g:acp_behaviorPerlOmniLength*  >
+  let g:acp_behaviorPerlOmniLength = -1
+<
+        Perl オムニ補完の自動ポップアップを行うのに必要なカーソルの直前のキー
+        ワード文字数。負数ならこの補完は行われません。
+
+        See also: |acp-perl-omni|
+
+                                              *g:acp_behaviorXmlOmniLength*  >
+  let g:acp_behaviorXmlOmniLength = 0
+<
+        XML オムニ補完の自動ポップアップを行うのに必要なカーソルの直前のキーワ
+        ード文字数。負数ならこの補完は行われません。
+
+                                             *g:acp_behaviorHtmlOmniLength*  >
+  let g:acp_behaviorHtmlOmniLength = 0
+<
+        HTML オムニ補完の自動ポップアップを行うのに必要なカーソルの直前のキー
+        ワード文字数。負数ならこの補完は行われません。
+
+                                      *g:acp_behaviorCssOmniPropertyLength*  >
+  let g:acp_behaviorCssOmniPropertyLength = 1
+<
+        プロパティ補完のための、CSS オムニ補完の自動ポップアップを行うのに必要
+        なカーソルの直前のキーワード文字数。負数ならこの補完は行われません。
+
+                                         *g:acp_behaviorCssOmniValueLength*  >
+  let g:acp_behaviorCssOmniValueLength = 0
+<
+        値補完のための、CSS オムニ補完の自動ポップアップを行うのに必要なカーソ
+        ルの直前のキーワード文字数。負数ならこの補完は行われません。
+
+                                                           *g:acp_behavior*  >
+  let g:acp_behavior = {}
+<
+
+        これは内部仕様がわかっている人向けのオプションで、他のオプションでの設
+        定より優先されます。 
+
+        |Dictionary|型で、キーはファイルタイプに対応します。 '*' はデフォルト
+        を表します。値はリスト型です。補完候補が得られるまでリストの先頭アイテ
+        ムから順に評価します。各要素は|Dictionary|で詳細は次の通り:
+
+        "command":                                    *g:acp_behavior-command*
+          補完メニューをポップアップするためのコマンド。
+
+        "completefunc":                          *g:acp_behavior-completefunc*
+          'completefunc' に設定する関数。 "command" が "<C-x><C-u>" のときだけ
+          意味があります。
+
+        "meets":                                        *g:acp_behavior-meets*
+          この補完を行うかどうかを判断する関数の名前。この関数はカーソル直前の
+          テキストを引数に取り、補完を行うなら非 0 の値を返します。
+
+        "onPopupClose":                          *g:acp_behavior-onPopupClose*
+          この補完のポップアップメニューが閉じられたときに呼ばれる関数の名前。
+          この関数が 0 を返した場合、続いて行われる予定の補完は抑制されます。
+
+        "repeat":                                      *g:acp_behavior-repeat*
+          真なら最後の補完が自動的に繰り返されます。
+
+
+==============================================================================
+あばうと                                *acp-about* *acp-contact* *acp-author*
+
+作者:       Takeshi NISHIDA <ns9tks@DELETE-ME.gmail.com>
+ライセンス: MIT Licence
+URL:        http://www.vim.org/scripts/script.php?script_id=1879
+            http://bitbucket.org/ns9tks/vim-autocomplpop/
+
+バグや要望など ~
+
+こちらへどうぞ: http://bitbucket.org/ns9tks/vim-autocomplpop/issues/
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
+
+*acp.txt*       Automatically opens popup menu for completions.
+
+        Copyright (c) 2007-2009 Takeshi NISHIDA
+
+AutoComplPop                                              *autocomplpop* *acp*
+
+INTRODUCTION                    |acp-introduction|
+INSTALLATION                    |acp-installation|
+USAGE                           |acp-usage|
+COMMANDS                        |acp-commands|
+OPTIONS                         |acp-options|
+SPECIAL THANKS                  |acp-thanks|
+CHANGELOG                       |acp-changelog|
+ABOUT                           |acp-about|
+
+
+==============================================================================
+INTRODUCTION                                                *acp-introduction*
+
+With this plugin, your vim comes to automatically opens popup menu for
+completions when you enter characters or move the cursor in Insert mode. It
+won't prevent you continuing entering characters.
+
+
+==============================================================================
+INSTALLATION                                                *acp-installation*
+
+Put all files into your runtime directory. If you have the zip file, extract
+it to your runtime directory.
+
+You should place the files as follows:
+>
+        <your runtime directory>/plugin/acp.vim
+        <your runtime directory>/doc/acp.txt
+        ...
+<
+If you are disgusted to make your runtime directory confused with a lot of
+plugins, put each of the plugins into a directory individually and just add
+the directory path to 'runtimepath'. It's easy to uninstall plugins.
+
+Then update your help tags files to enable help for this plugin. See
+|add-local-help| for details.
+
+Requirements: ~
+
+- L9 library (vimscript #3252)
+
+
+==============================================================================
+USAGE                                                              *acp-usage*
+
+Once this plugin is installed, auto-popup is enabled at startup by default.
+
+Which completion method is used depends on the text before the cursor. The
+default behavior is as follows:
+
+        kind      filetype    text before the cursor ~
+        Keyword   *           two keyword characters
+        Filename  *           a filename character + a path separator 
+                              + 0 or more filename character
+        Omni      ruby        ".", "::" or non-word character + ":"
+                              (|+ruby| required.)
+        Omni      python      "." (|+python| required.)
+        Omni      xml         "<", "</" or ("<" + non-">" characters + " ")
+        Omni      html/xhtml  "<", "</" or ("<" + non-">" characters + " ")
+        Omni      css         (":", ";", "{", "^", "@", or "!")
+                              + 0 or 1 space
+
+Also, you can make user-defined completion and snipMate's trigger completion
+(|acp-snipMate|) auto-popup if the options are set.
+
+These behavior are customizable.
+
+                                                                *acp-snipMate*
+snipMate's Trigger Completion ~
+
+snipMate's trigger completion enables you to complete a snippet trigger
+provided by snipMate plugin
+(http://www.vim.org/scripts/script.php?script_id=2540) and expand it.
+
+
+To enable auto-popup for this completion, add following function to
+plugin/snipMate.vim:
+>
+  fun! GetSnipsInCurrentScope()
+    let snips = {}
+    for scope in [bufnr('%')] + split(&ft, '\.') + ['_']
+      call extend(snips, get(s:snippets, scope, {}), 'keep')
+      call extend(snips, get(s:multi_snips, scope, {}), 'keep')
+    endfor
+    return snips
+  endf
+<
+And set |g:acp_behaviorSnipmateLength| option to 1.
+
+There is the restriction on this auto-popup, that the word before cursor must
+consist only of uppercase characters.
+
+                                                               *acp-perl-omni*
+Perl Omni-Completion ~
+
+AutoComplPop supports perl-completion.vim
+(http://www.vim.org/scripts/script.php?script_id=2852).
+
+To enable auto-popup for this completion, set |g:acp_behaviorPerlOmniLength|
+option to 0 or more.
+
+
+==============================================================================
+COMMANDS                                                        *acp-commands*
+
+                                                                  *:AcpEnable*
+:AcpEnable
+        enables auto-popup.
+
+                                                                 *:AcpDisable*
+:AcpDisable
+        disables auto-popup.
+
+                                                                    *:AcpLock*
+:AcpLock
+        suspends auto-popup temporarily.
+
+        For the purpose of avoiding interruption to another script, it is
+        recommended to insert this command and |:AcpUnlock| than |:AcpDisable|
+        and |:AcpEnable| .
+
+                                                                  *:AcpUnlock*
+:AcpUnlock
+        resumes auto-popup suspended by |:AcpLock| .
+
+
+==============================================================================
+OPTIONS                                                          *acp-options*
+
+                                                    *g:acp_enableAtStartup*  >
+  let g:acp_enableAtStartup = 1
+<
+        If non-zero, auto-popup is enabled at startup.
+
+                                                      *g:acp_mappingDriven*  >
+  let g:acp_mappingDriven = 0
+<
+        If non-zero, auto-popup is triggered by key mappings instead of
+        |CursorMovedI| event. This is useful to avoid auto-popup by moving
+        cursor in Insert mode.
+
+                                                   *g:acp_ignorecaseOption*  >
+  let g:acp_ignorecaseOption = 1
+<
+        Value set to 'ignorecase' temporarily when auto-popup.
+
+                                                     *g:acp_completeOption*  >
+  let g:acp_completeOption = '.,w,b,k'
+<
+        Value set to 'complete' temporarily when auto-popup.
+
+                                                 *g:acp_completeoptPreview*  >
+  let g:acp_completeoptPreview = 0
+<
+        If non-zero, "preview" is added to 'completeopt' when auto-popup.
+
+                                        *g:acp_behaviorUserDefinedFunction*  >
+  let g:acp_behaviorUserDefinedFunction = ''
+<
+        |g:acp_behavior-completefunc| for user-defined completion. If empty,
+        this completion will be never attempted.
+
+                                           *g:acp_behaviorUserDefinedMeets*  >
+  let g:acp_behaviorUserDefinedMeets = ''
+<
+        |g:acp_behavior-meets| for user-defined completion. If empty, this
+        completion will be never attempted.
+
+                                             *g:acp_behaviorSnipmateLength*  >
+  let g:acp_behaviorSnipmateLength = -1
+<
+        Pattern before the cursor, which are needed to attempt
+        snipMate-trigger completion.
+
+                                             *g:acp_behaviorKeywordCommand*  >
+  let g:acp_behaviorKeywordCommand = "\<C-n>"
+<
+        Command for keyword completion. This option is usually set "\<C-n>" or
+        "\<C-p>".
+
+                                              *g:acp_behaviorKeywordLength*  >
+  let g:acp_behaviorKeywordLength = 2
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt keyword completion. If negative value, this completion will be
+        never attempted.
+
+                                             *g:acp_behaviorKeywordIgnores*  >
+  let g:acp_behaviorKeywordIgnores = []
+<
+        List of string. If a word before the cursor matches to the front part
+        of one of them, keyword completion won't be attempted.
+
+        E.g., when there are too many keywords beginning with "get" for the
+        completion and auto-popup by entering "g", "ge", or "get" causes
+        response degradation, set ["get"] to this option and avoid it.
+
+                                                 *g:acp_behaviorFileLength*  >
+  let g:acp_behaviorFileLength = 0
+<
+        Length of filename characters before the cursor, which are needed to
+        attempt filename completion. If negative value, this completion will
+        be never attempted.
+
+                                       *g:acp_behaviorRubyOmniMethodLength*  >
+  let g:acp_behaviorRubyOmniMethodLength = 0
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt ruby omni-completion for methods. If negative value, this
+        completion will be never attempted.
+
+                                       *g:acp_behaviorRubyOmniSymbolLength*  >
+  let g:acp_behaviorRubyOmniSymbolLength = 1
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt ruby omni-completion for symbols. If negative value, this
+        completion will be never attempted.
+
+                                           *g:acp_behaviorPythonOmniLength*  >
+  let g:acp_behaviorPythonOmniLength = 0
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt python omni-completion. If negative value, this completion
+        will be never attempted.
+
+                                             *g:acp_behaviorPerlOmniLength*  >
+  let g:acp_behaviorPerlOmniLength = -1
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt perl omni-completion. If negative value, this completion will
+        be never attempted.
+
+        See also: |acp-perl-omni|
+
+                                              *g:acp_behaviorXmlOmniLength*  >
+  let g:acp_behaviorXmlOmniLength = 0
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt XML omni-completion. If negative value, this completion will
+        be never attempted.
+
+                                             *g:acp_behaviorHtmlOmniLength*  >
+  let g:acp_behaviorHtmlOmniLength = 0
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt HTML omni-completion. If negative value, this completion will
+        be never attempted.
+
+                                      *g:acp_behaviorCssOmniPropertyLength*  >
+  let g:acp_behaviorCssOmniPropertyLength = 1
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt CSS omni-completion for properties. If negative value, this
+        completion will be never attempted.
+
+                                         *g:acp_behaviorCssOmniValueLength*  >
+  let g:acp_behaviorCssOmniValueLength = 0
+<
+        Length of keyword characters before the cursor, which are needed to
+        attempt CSS omni-completion for values. If negative value, this
+        completion will be never attempted.
+
+                                                           *g:acp_behavior*  >
+  let g:acp_behavior = {}
+<
+        This option is for advanced users. This setting overrides other
+        behavior options. This is a |Dictionary|. Each key corresponds to a
+        filetype. '*' is default. Each value is a list. These are attempted in
+        sequence until completion item is found. Each element is a
+        |Dictionary| which has following items:
+
+        "command":                                    *g:acp_behavior-command*
+          Command to be fed to open popup menu for completions.
+
+        "completefunc":                          *g:acp_behavior-completefunc*
+          'completefunc' will be set to this user-provided function during the
+          completion. Only makes sense when "command" is "<C-x><C-u>".
+
+        "meets":                                        *g:acp_behavior-meets*
+          Name of the function which dicides whether or not to attempt this
+          completion. It will be attempted if this function returns non-zero.
+          This function takes a text before the cursor.
+
+        "onPopupClose":                          *g:acp_behavior-onPopupClose*
+          Name of the function which is called when popup menu for this
+          completion is closed. Following completions will be suppressed if
+          this function returns zero.
+
+        "repeat":                                      *g:acp_behavior-repeat*
+          If non-zero, the last completion is automatically repeated.
+
+
+==============================================================================
+SPECIAL THANKS                                                    *acp-thanks*
+
+- Daniel Schierbeck
+- Ingo Karkat
+
+
+==============================================================================
+CHANGELOG                                                      *acp-changelog*
+
+3.0: [TODO]
+  - From this version, L9 library (vimscript #3252) is required.
+
+2.14.1
+  - Changed the way of auto-popup for avoiding an issue about filename
+    completion.
+  - Fixed a bug that popup menu was opened twice when auto-popup was done.
+
+2.14
+  - Added the support for perl-completion.vim.
+
+2.13
+  - Changed to sort snipMate's triggers.
+  - Fixed a bug that a wasted character was inserted after snipMate's trigger
+    completion.
+
+2.12.1
+  - Changed to avoid a strange behavior with Microsoft IME.
+
+2.12
+  - Added g:acp_behaviorKeywordIgnores option.
+  - Added g:acp_behaviorUserDefinedMeets option and removed
+    g:acp_behaviorUserDefinedPattern.
+  - Changed to do auto-popup only when a buffer is modified.
+  - Changed the structure of g:acp_behavior option.
+  - Changed to reflect a change of behavior options (named g:acp_behavior*)
+    any time it is done.
+  - Fixed a bug that completions after omni completions or snipMate's trigger
+    completion were never attempted when no candidate for the former
+    completions was found.
+
+2.11.1
+  - Fixed a bug that a snipMate's trigger could not be expanded when it was
+    completed.
+
+2.11
+  - Implemented experimental feature which is snipMate's trigger completion.
+
+2.10
+  - Improved the response by changing not to attempt any completion when
+    keyword characters are entered after a word which has been found that it
+    has no completion candidate at the last attempt of completions.
+  - Improved the response by changing to close popup menu when <BS> was
+    pressed and the text before the cursor would not match with the pattern of
+    current behavior.
+
+2.9
+  - Changed default behavior to support XML omni completion.
+  - Changed default value of g:acp_behaviorKeywordCommand option.
+    The option with "\<C-p>" cause a problem which inserts a match without
+    <CR> when 'dictionary' has been set and keyword completion is done.
+  - Changed to show error message when incompatible with a installed vim.
+
+2.8.1
+  - Fixed a bug which inserted a selected match to the next line when
+    auto-wrapping (enabled with 'formatoptions') was performed.
+
+2.8
+  - Added g:acp_behaviorUserDefinedFunction option and
+    g:acp_behaviorUserDefinedPattern option for users who want to make custom
+    completion auto-popup.
+  - Fixed a bug that setting 'spell' on a new buffer made typing go crazy.
+
+2.7
+  - Changed naming conventions for filenames, functions, commands, and options 
+    and thus renamed them.
+  - Added g:acp_behaviorKeywordCommand option. If you prefer the previous
+    behavior for keyword completion, set this option "\<C-n>".
+  - Changed default value of g:acp_ignorecaseOption option.
+
+  The following were done by Ingo Karkat:
+
+  - ENH: Added support for setting a user-provided 'completefunc' during the
+    completion, configurable via g:acp_behavior. 
+  - BUG: When the configured completion is <C-p> or <C-x><C-p>, the command to
+    restore the original text (in on_popup_post()) must be reverted, too. 
+  - BUG: When using a custom completion function (<C-x><C-u>) that also uses
+    an s:...() function name, the s:GetSidPrefix() function dynamically
+    determines the wrong SID. Now calling s:DetermineSidPrefix() once during
+    sourcing and caching the value in s:SID. 
+  - BUG: Should not use custom defined <C-X><C-...> completion mappings. Now
+    consistently using unmapped completion commands everywhere. (Beforehand,
+    s:PopupFeeder.feed() used mappings via feedkeys(..., 'm'), but
+    s:PopupFeeder.on_popup_post() did not due to its invocation via
+    :map-expr.) 
+
+2.6:
+  - Improved the behavior of omni completion for HTML/XHTML.
+
+2.5:
+  - Added some options to customize behavior easily:
+      g:AutoComplPop_BehaviorKeywordLength
+      g:AutoComplPop_BehaviorFileLength
+      g:AutoComplPop_BehaviorRubyOmniMethodLength
+      g:AutoComplPop_BehaviorRubyOmniSymbolLength
+      g:AutoComplPop_BehaviorPythonOmniLength
+      g:AutoComplPop_BehaviorHtmlOmniLength
+      g:AutoComplPop_BehaviorCssOmniPropertyLength
+      g:AutoComplPop_BehaviorCssOmniValueLength
+
+2.4:
+  - Added g:AutoComplPop_MappingDriven option.
+
+2.3.1:
+  - Changed to set 'lazyredraw' while a popup menu is visible to avoid
+    flickering.
+  - Changed a behavior for CSS.
+  - Added support for GetLatestVimScripts.
+
+2.3:
+  - Added a behavior for Python to support omni completion.
+  - Added a behavior for CSS to support omni completion.
+
+2.2:
+  - Changed not to work when 'paste' option is set.
+  - Fixed AutoComplPopEnable command and AutoComplPopDisable command to
+    map/unmap "i" and "R".
+
+2.1:
+  - Fixed the problem caused by "." command in Normal mode.
+  - Changed to map "i" and "R" to feed completion command after starting
+    Insert mode.
+  - Avoided the problem caused by Windows IME.
+
+2.0:
+  - Changed to use CursorMovedI event to feed a completion command instead of
+    key mapping. Now the auto-popup is triggered by moving the cursor.
+  - Changed to feed completion command after starting Insert mode.
+  - Removed g:AutoComplPop_MapList option.
+
+1.7:
+  - Added behaviors for HTML/XHTML. Now supports the omni completion for
+    HTML/XHTML.
+  - Changed not to show expressions for CTRL-R =.
+  - Changed not to set 'nolazyredraw' while a popup menu is visible.
+
+1.6.1:
+  - Changed not to trigger the filename completion by a text which has
+    multi-byte characters.
+
+1.6:
+  - Redesigned g:AutoComplPop_Behavior option.
+  - Changed default value of g:AutoComplPop_CompleteOption option.
+  - Changed default value of g:AutoComplPop_MapList option.
+
+1.5:
+  - Implemented continuous-completion for the filename completion. And added
+    new option to g:AutoComplPop_Behavior.
+
+1.4:
+  - Fixed the bug that the auto-popup was not suspended in fuzzyfinder.
+  - Fixed the bug that an error has occurred with Ruby-omni-completion unless
+    Ruby interface.
+
+1.3:
+  - Supported Ruby-omni-completion by default.
+  - Supported filename completion by default.
+  - Added g:AutoComplPop_Behavior option.
+  - Added g:AutoComplPop_CompleteoptPreview option.
+  - Removed g:AutoComplPop_MinLength option.
+  - Removed g:AutoComplPop_MaxLength option.
+  - Removed g:AutoComplPop_PopupCmd option.
+
+1.2:
+  - Fixed bugs related to 'completeopt'.
+
+1.1:
+  - Added g:AutoComplPop_IgnoreCaseOption option.
+  - Added g:AutoComplPop_NotEnableAtStartup option.
+  - Removed g:AutoComplPop_LoadAndEnable option.
+1.0:
+  - g:AutoComplPop_LoadAndEnable option for a startup activation is added.
+  - AutoComplPopLock command and AutoComplPopUnlock command are added to
+    suspend and resume.
+  - 'completeopt' and 'complete' options are changed temporarily while
+    completing by this script.
+
+0.4:
+  - The first match are selected when the popup menu is Opened. You can insert
+    the first match with CTRL-Y.
+
+0.3:
+  - Fixed the problem that the original text is not restored if 'longest' is
+    not set in 'completeopt'. Now the plugin works whether or not 'longest' is
+    set in 'completeopt', and also 'menuone'.
+
+0.2:
+  - When completion matches are not found, insert CTRL-E to stop completion.
+  - Clear the echo area.
+  - Fixed the problem in case of dividing words by symbols, popup menu is
+    not opened.
+
+0.1:
+  - First release.
+
+
+==============================================================================
+ABOUT                                   *acp-about* *acp-contact* *acp-author*
+
+Author:  Takeshi NISHIDA <ns9tks@DELETE-ME.gmail.com>
+Licence: MIT Licence
+URL:     http://www.vim.org/scripts/script.php?script_id=1879
+         http://bitbucket.org/ns9tks/vim-autocomplpop/
+
+Bugs/Issues/Suggestions/Improvements ~
+
+Please submit to http://bitbucket.org/ns9tks/vim-autocomplpop/issues/ .
+
+==============================================================================
+ vim:tw=78:ts=8:ft=help:norl:
+
+"=============================================================================
+" Copyright (c) 2007-2009 Takeshi NISHIDA
+"
+" GetLatestVimScripts: 1879 1 :AutoInstall: AutoComplPop
+"=============================================================================
+" LOAD GUARD {{{1
+
+try
+  if !l9#guardScriptLoading(expand('<sfile>:p'), 702, 101, [])
+    finish
+  endif
+catch /E117/
+  echoerr '***** L9 library must be installed! *****'
+  finish
+endtry
+
+" }}}1
+"=============================================================================
+" FUNCTION: {{{1
+
+"
+function s:makeDefaultBehavior()
+  let behavs = {
+        \   '*'      : [],
+        \   'ruby'   : [],
+        \   'python' : [],
+        \   'perl'   : [],
+        \   'xml'    : [],
+        \   'html'   : [],
+        \   'xhtml'  : [],
+        \   'css'    : [],
+        \ }
+  "---------------------------------------------------------------------------
+  if !empty(g:acp_behaviorUserDefinedFunction) &&
+        \ !empty(g:acp_behaviorUserDefinedMeets)
+    for key in keys(behavs)
+      call add(behavs[key], {
+            \   'command'      : "\<C-x>\<C-u>",
+            \   'completefunc' : g:acp_behaviorUserDefinedFunction,
+            \   'meets'        : g:acp_behaviorUserDefinedMeets,
+            \   'repeat'       : 0,
+            \ })
+    endfor
+  endif
+  "---------------------------------------------------------------------------
+  for key in keys(behavs)
+    call add(behavs[key], {
+          \   'command'      : "\<C-x>\<C-u>",
+          \   'completefunc' : 'acp#completeSnipmate',
+          \   'meets'        : 'acp#meetsForSnipmate',
+          \   'onPopupClose' : 'acp#onPopupCloseSnipmate',
+          \   'repeat'       : 0,
+          \ })
+  endfor
+  "---------------------------------------------------------------------------
+  for key in keys(behavs)
+    call add(behavs[key], {
+          \   'command' : g:acp_behaviorKeywordCommand,
+          \   'meets'   : 'acp#meetsForKeyword',
+          \   'repeat'  : 0,
+          \ })
+  endfor
+  "---------------------------------------------------------------------------
+  for key in keys(behavs)
+    call add(behavs[key], {
+          \   'command' : "\<C-x>\<C-f>",
+          \   'meets'   : 'acp#meetsForFile',
+          \   'repeat'  : 1,
+          \ })
+  endfor
+  "---------------------------------------------------------------------------
+  call add(behavs.ruby, {
+        \   'command' : "\<C-x>\<C-o>",
+        \   'meets'   : 'acp#meetsForRubyOmni',
+        \   'repeat'  : 0,
+        \ })
+  "---------------------------------------------------------------------------
+  call add(behavs.python, {
+        \   'command' : "\<C-x>\<C-o>",
+        \   'meets'   : 'acp#meetsForPythonOmni',
+        \   'repeat'  : 0,
+        \ })
+  "---------------------------------------------------------------------------
+  call add(behavs.perl, {
+        \   'command' : "\<C-x>\<C-o>",
+        \   'meets'   : 'acp#meetsForPerlOmni',
+        \   'repeat'  : 0,
+        \ })
+  "---------------------------------------------------------------------------
+  call add(behavs.xml, {
+        \   'command' : "\<C-x>\<C-o>",
+        \   'meets'   : 'acp#meetsForXmlOmni',
+        \   'repeat'  : 1,
+        \ })
+  "---------------------------------------------------------------------------
+  call add(behavs.html, {
+        \   'command' : "\<C-x>\<C-o>",
+        \   'meets'   : 'acp#meetsForHtmlOmni',
+        \   'repeat'  : 1,
+        \ })
+  "---------------------------------------------------------------------------
+  call add(behavs.xhtml, {
+        \   'command' : "\<C-x>\<C-o>",
+        \   'meets'   : 'acp#meetsForHtmlOmni',
+        \   'repeat'  : 1,
+        \ })
+  "---------------------------------------------------------------------------
+  call add(behavs.css, {
+        \   'command' : "\<C-x>\<C-o>",
+        \   'meets'   : 'acp#meetsForCssOmni',
+        \   'repeat'  : 0,
+        \ })
+  "---------------------------------------------------------------------------
+  return behavs
+endfunction
+
+" }}}1
+"=============================================================================
+" INITIALIZATION {{{1
+
+"-----------------------------------------------------------------------------
+call l9#defineVariableDefault('g:acp_enableAtStartup', 1)
+call l9#defineVariableDefault('g:acp_mappingDriven', 0)
+call l9#defineVariableDefault('g:acp_ignorecaseOption', 1)
+call l9#defineVariableDefault('g:acp_completeOption', '.,w,b,k')
+call l9#defineVariableDefault('g:acp_completeoptPreview', 0)
+call l9#defineVariableDefault('g:acp_behaviorUserDefinedFunction', '')
+call l9#defineVariableDefault('g:acp_behaviorUserDefinedMeets', '')
+call l9#defineVariableDefault('g:acp_behaviorSnipmateLength', -1)
+call l9#defineVariableDefault('g:acp_behaviorKeywordCommand', "\<C-n>")
+call l9#defineVariableDefault('g:acp_behaviorKeywordLength', 2)
+call l9#defineVariableDefault('g:acp_behaviorKeywordIgnores', [])
+call l9#defineVariableDefault('g:acp_behaviorFileLength', 0)
+call l9#defineVariableDefault('g:acp_behaviorRubyOmniMethodLength', 0)
+call l9#defineVariableDefault('g:acp_behaviorRubyOmniSymbolLength', 1)
+call l9#defineVariableDefault('g:acp_behaviorPythonOmniLength', 0)
+call l9#defineVariableDefault('g:acp_behaviorPerlOmniLength', -1)
+call l9#defineVariableDefault('g:acp_behaviorXmlOmniLength', 0)
+call l9#defineVariableDefault('g:acp_behaviorHtmlOmniLength', 0)
+call l9#defineVariableDefault('g:acp_behaviorCssOmniPropertyLength', 1)
+call l9#defineVariableDefault('g:acp_behaviorCssOmniValueLength', 0)
+call l9#defineVariableDefault('g:acp_behavior', {})
+"-----------------------------------------------------------------------------
+call extend(g:acp_behavior, s:makeDefaultBehavior(), 'keep')
+"-----------------------------------------------------------------------------
+command! -bar -narg=0 AcpEnable  call acp#enable()
+command! -bar -narg=0 AcpDisable call acp#disable()
+command! -bar -narg=0 AcpLock    call acp#lock()
+command! -bar -narg=0 AcpUnlock  call acp#unlock()
+"-----------------------------------------------------------------------------
+" legacy commands
+command! -bar -narg=0 AutoComplPopEnable  AcpEnable
+command! -bar -narg=0 AutoComplPopDisable AcpDisable
+command! -bar -narg=0 AutoComplPopLock    AcpLock
+command! -bar -narg=0 AutoComplPopUnlock  AcpUnlock
+"-----------------------------------------------------------------------------
+if g:acp_enableAtStartup
+  AcpEnable
+endif
+"-----------------------------------------------------------------------------
+
+" }}}1
+"=============================================================================
+" vim: set fdm=marker:
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.