Created
April 13, 2018 13:33
-
-
Save icarofreire/0a82e0a07a151f4c7797212a3b20c637 to your computer and use it in GitHub Desktop.
Um easy-motion vertical indexado com letras no lugar dos numeros das linhas.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| "++++++++++++++++++++++ | |
| " RocketJump -- jump to a visible line using alphabetic signs instead of line numbers | |
| " Author: Danilov Aleksey <[email protected]> | |
| " Version: 1.0 | |
| " Starting ID for signs | |
| if !exists("g:rj_startid") | |
| let g:rj_startid = 888888 | |
| endif | |
| " Sign chars | |
| if !exists("g:rj_chars") | |
| let g:rj_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" | |
| endif | |
| " Adjust command char | |
| if !exists("g:rj_cmdchar") | |
| let g:rj_cmdchar = " " | |
| endif | |
| " Sign highlighting scheme | |
| if !exists("g:rj_signscheme") | |
| let g:rj_signscheme = (has("gui_running")? "guifg=darkred" : "ctermfg=darkred") | |
| endif | |
| exe "highlight rj_signcolor ".g:rj_signscheme | |
| " Initial definition of signs | |
| function! RocketJump_DefineJumpSigns() | |
| let i = 1 | |
| while i < strlen(g:rj_chars) | |
| exe "sign define rj_sign".i." text=".strpart(g:rj_chars, i - 1, 1)." texthl=rj_signcolor" | |
| let i += 1 | |
| endwhile | |
| endfunction | |
| " Jumping with signs | |
| function! RocketJump_PerformJump(visual) range | |
| let relnum = &relativenumber | |
| let number = &number | |
| set norelativenumber | |
| set nonumber | |
| " Placing signs | |
| let id = g:rj_startid | |
| let i = line("w0") | |
| let num = 1 | |
| while i <= line("w$") && num <= strlen(g:rj_chars) | |
| exe "sign place ".id." line=".i." name=rj_sign".num." buffer=".bufnr("%") | |
| let i += 1 | |
| let id += 2 | |
| let num += 1 | |
| endwhile | |
| " Getting user input | |
| echo "Jump to line " | |
| let char = nr2char(getchar()) | |
| let lstart = 0 | |
| " Adjusting signs on demand | |
| while char == g:rj_cmdchar | |
| " Placing new signs | |
| let lstart = !lstart | |
| let id = g:rj_startid + lstart | |
| let i = line("w0") + lstart | |
| let num = 1 | |
| while i <= line("w$") && num <= strlen(g:rj_chars) | |
| exe "sign place ".id." line=".i." name=rj_sign".num." buffer=".bufnr("%") | |
| let i += 1 | |
| let id += 2 | |
| let num += 1 | |
| endwhile | |
| " Removing old signs | |
| let id = g:rj_startid + !lstart | |
| let i = line("w0") + !lstart | |
| while i <= line("w$") | |
| exe "sign unplace ".id." buffer=".bufnr("%") | |
| let i += 1 | |
| let id += 2 | |
| endwhile | |
| let char = nr2char(getchar()) | |
| endwhile | |
| " Jumping to sign | |
| let i = stridx(g:rj_chars, char) | |
| if a:visual | |
| normal! gv | |
| endif | |
| if i >= 0 | |
| exe "sign jump ".(g:rj_startid + lstart + i*2)." buffer=".bufnr("%") | |
| endif | |
| " Removing signs | |
| let id = g:rj_startid + lstart | |
| let i = line("w0") + lstart | |
| while i <= line("w$") | |
| exe "sign unplace ".id." buffer=".bufnr("%") | |
| let i += 1 | |
| let id += 2 | |
| endwhile | |
| let &relativenumber = relnum | |
| let &number = number | |
| endfunction | |
| call RocketJump_DefineJumpSigns() | |
| if !exists("g:rj_nomapping") | |
| noremap <silent> gl :call RocketJump_PerformJump(0) <CR> | |
| noremap <silent> gn V <bar> :call RocketJump_PerformJump(1) <CR> | |
| vnoremap <silent> gl :call RocketJump_PerformJump(1) <CR> | |
| endif | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment