68 lines
1.9 KiB
VimL
68 lines
1.9 KiB
VimL
" Description: Omni completion utils
|
|
" Maintainer: Vissale NEANG
|
|
" Last Change: 26 sept. 2007
|
|
|
|
" For sort numbers in list
|
|
function! omni#common#utils#CompareNumber(i1, i2)
|
|
let num1 = eval(a:i1)
|
|
let num2 = eval(a:i2)
|
|
return num1 == num2 ? 0 : num1 > num2 ? 1 : -1
|
|
endfunc
|
|
|
|
" TagList function calling the vim taglist() with try catch
|
|
" The only throwed exception is 'TagList:UserInterrupt'
|
|
" We also force the noignorecase option to avoid linear search when calling
|
|
" taglist()
|
|
function! omni#common#utils#TagList(szTagQuery)
|
|
let result = []
|
|
let bUserIgnoreCase = &ignorecase
|
|
" Forcing noignorecase search => binary search can be used in taglist()
|
|
" if tags in the tag file are sorted
|
|
if bUserIgnoreCase
|
|
set noignorecase
|
|
endif
|
|
try
|
|
let result = taglist(a:szTagQuery)
|
|
catch /^Vim:Interrupt$/
|
|
" Restoring user's setting
|
|
if bUserIgnoreCase
|
|
set ignorecase
|
|
endif
|
|
throw 'TagList:UserInterrupt'
|
|
catch
|
|
"Note: it seems that ctags can generate corrupted files, in this case
|
|
"taglist() will fail to read the tagfile and an exception from
|
|
"has_add() is thrown
|
|
endtry
|
|
|
|
" Restoring user's setting
|
|
if bUserIgnoreCase
|
|
set ignorecase
|
|
endif
|
|
return result
|
|
endfunc
|
|
|
|
" Same as TagList but don't throw exception
|
|
function! omni#common#utils#TagListNoThrow(szTagQuery)
|
|
let result = []
|
|
try
|
|
let result = omni#common#utils#TagList(a:szTagQuery)
|
|
catch
|
|
endtry
|
|
return result
|
|
endfunc
|
|
|
|
" Get the word under the cursor
|
|
function! omni#common#utils#GetWordUnderCursor()
|
|
let szLine = getline('.')
|
|
let startPos = getpos('.')[2]-1
|
|
let startPos = (startPos < 0)? 0 : startPos
|
|
if szLine[startPos] =~ '\w'
|
|
let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1
|
|
endif
|
|
|
|
let startPos = (startPos < 0)? 0 : startPos
|
|
let szResult = matchstr(szLine, '\w\+', startPos)
|
|
return szResult
|
|
endfunc
|