Added hicursorwords v0.1
This commit is contained in:
parent
abc3358a4e
commit
bce734f742
1
README.md
Normal file
1
README.md
Normal file
@ -0,0 +1 @@
|
||||
From http://www.vim.org/scripts/script.php?script_id=4306
|
119
plugin/hicursorwords.vim
Normal file
119
plugin/hicursorwords.vim
Normal file
@ -0,0 +1,119 @@
|
||||
" HiCursorWords -- Highlights words under the cursor.
|
||||
"
|
||||
" Maintainer: Shuhei Kubota <kubota.shuhei+vim@gmail.com>
|
||||
" Description:
|
||||
" This script highlights words under the cursor like many IDEs.
|
||||
"
|
||||
" This doesn't provide scope-aware highlighting nor language specific one.
|
||||
" You can control highlighting by highlighting group names.
|
||||
"
|
||||
" Variables:
|
||||
"
|
||||
" (A right hand side value is a default value.)
|
||||
"
|
||||
" g:HiCursorWords_delay = 200
|
||||
" A delay for highlighting in milliseconds.
|
||||
" Smaller value may cause your machine slow down.
|
||||
"
|
||||
" g:HiCursorWords_hiGroupRegexp = ''
|
||||
" If empty, all words are highlighted.
|
||||
" If not empty, only the specified highlight group is highlighted.
|
||||
" (my memo: 'Identifier\|vimOperParen')
|
||||
"
|
||||
" To investigate highlight group name, the next variable may help you.
|
||||
"
|
||||
" g:HiCursorWords_debugEchoHiName = 0
|
||||
" If not 0, echoes the highlight group name under the cursor.
|
||||
"
|
||||
" Hightlight groups:
|
||||
"
|
||||
" (Do :highlight! as you like.)
|
||||
"
|
||||
" WordUnderTheCursor
|
||||
"
|
||||
"
|
||||
|
||||
if !exists('g:HiCursorWords_delay')
|
||||
let g:HiCursorWords_delay = 200
|
||||
endif
|
||||
|
||||
if !exists('g:HiCursorWords_hiGroupRegexp')
|
||||
let g:HiCursorWords_hiGroupRegexp = ''
|
||||
endif
|
||||
|
||||
if !exists('g:HiCursorWords_debugEchoHiName')
|
||||
let g:HiCursorWords_debugEchoHiName = 0
|
||||
endif
|
||||
|
||||
|
||||
highlight! link WordUnderTheCursor Underlined
|
||||
|
||||
augroup HiCursorWords
|
||||
autocmd!
|
||||
autocmd CursorMoved,CursorMovedI * call s:HiCursorWords__startHilighting()
|
||||
augroup END
|
||||
|
||||
|
||||
function! s:HiCursorWords__getHiName(linenum, colnum)
|
||||
let hiname = synIDattr(synID(a:linenum, a:colnum, 0), "name")
|
||||
let hiname = s:HiCursorWords__resolveHiName(hiname)
|
||||
return hiname
|
||||
endfunction
|
||||
|
||||
function! s:HiCursorWords__resolveHiName(hiname)
|
||||
redir => resolved
|
||||
silent execute 'highlight ' . a:hiname
|
||||
redir END
|
||||
|
||||
if stridx(resolved, 'links to') == -1
|
||||
return a:hiname
|
||||
endif
|
||||
|
||||
return substitute(resolved, '\v(.*) links to ([^ ]+).*$', '\2', '')
|
||||
endfunction
|
||||
|
||||
function! s:HiCursorWords__getWordUnderTheCursor(linestr, linenum, colnum)
|
||||
"let word = substitute(a:linestr, '.*\(\<\k\{-}\%' . a:colnum . 'c\k\{-}\>\).*', '\1', '') "expand('<word>')
|
||||
let word = matchstr(a:linestr, '\k*\%' . a:colnum . 'c\k\+')
|
||||
if a:linestr == word
|
||||
return ''
|
||||
endif
|
||||
return '\V\<' . word . '\>'
|
||||
endfunction
|
||||
|
||||
function! s:HiCursorWords__execute()
|
||||
if exists("w:HiCursorWords__matchId")
|
||||
call matchdelete(w:HiCursorWords__matchId)
|
||||
unlet w:HiCursorWords__matchId
|
||||
endif
|
||||
|
||||
let linestr = getline('.')
|
||||
let linenum = line('.')
|
||||
let colnum = col('.')
|
||||
|
||||
if g:HiCursorWords_debugEchoHiName
|
||||
echo s:HiCursorWords__getHiName(linenum, colnum)
|
||||
endif
|
||||
|
||||
let word = s:HiCursorWords__getWordUnderTheCursor(linestr, linenum, colnum)
|
||||
if strlen(word) != 0
|
||||
if strlen(g:HiCursorWords_hiGroupRegexp) != 0
|
||||
\ && match(s:HiCursorWords__getHiName(linenum, colnum), g:HiCursorWords_hiGroupRegexp) == -1
|
||||
return
|
||||
endif
|
||||
let w:HiCursorWords__matchId = matchadd('WordUnderTheCursor', word, 0)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:HiCursorWords__startHilighting()
|
||||
let b:HiCursorWords__oldUpdatetime = &updatetime
|
||||
let &updatetime = g:HiCursorWords_delay
|
||||
augroup HiCursorWordsUpdate
|
||||
autocmd!
|
||||
autocmd CursorHold,CursorHoldI *
|
||||
\ let &updatetime = b:HiCursorWords__oldUpdatetime
|
||||
\ | call s:HiCursorWords__execute()
|
||||
augroup END
|
||||
endfunction
|
||||
|
||||
" vim: set et ft=vim sts=4 sw=4 ts=4 tw=78 :
|
Loading…
Reference in New Issue
Block a user