aboutsummaryrefslogtreecommitdiff
path: root/vim/.vim/bundle/indentLine/after/plugin/indentLine.vim
blob: fc78278d130ee5c4218b5a9ea02fbc54a853cedd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
" Script Name: indentLine.vim
" Author:      Yggdroot <archofortune@gmail.com>
"
" Description: To show the indention levels with thin vertical lines

scriptencoding utf-8

if ! has("conceal") || exists("g:indentLine_loaded")
    finish
endif
let g:indentLine_loaded = 1


let g:indentLine_char = get(g:,'indentLine_char',(&encoding is# "utf-8" && &term isnot# "linux" ? '¦' : '|'))
let g:indentLine_first_char = get(g:,'indentLine_first_char',(&encoding is# "utf-8" && &term isnot# "linux"  ? '¦' : '|'))
let g:indentLine_indentLevel = get(g:,'indentLine_indentLevel',10)
let g:indentLine_enabled = get(g:,'indentLine_enabled',1)
let g:indentLine_fileType = get(g:,'indentLine_fileType',[])
let g:indentLine_fileTypeExclude = get(g:,'indentLine_fileTypeExclude',[])
let g:indentLine_bufNameExclude = get(g:,'indentLine_bufNameExclude',[])
let g:indentLine_showFirstIndentLevel = get(g:,'indentLine_showFirstIndentLevel',0)
let g:indentLine_maxLines = get(g:,'indentLine_maxLines',3000)
let g:indentLine_setColors = get(g:,'indentLine_setColors',1)
let g:indentLine_faster = get(g:,'indentLine_faster',0)

"{{{1 function! s:InitColor()
function! s:InitColor()
    if ! g:indentLine_setColors
        return
    endif

    if ! exists("g:indentLine_color_term")
        if &background is# "light"
            let term_color = 249
        else
            let term_color = 239
        endif
    else
        let term_color = g:indentLine_color_term
    endif

    if ! exists("g:indentLine_color_gui")
        if &background is# "light"
            let gui_color = "Grey70"
        else
            let gui_color = "Grey30"
        endif
    else
        let gui_color = g:indentLine_color_gui
    endif

    execute "highlight Conceal ctermfg=" . term_color . " ctermbg=NONE"
    execute "highlight Conceal guifg=" . gui_color .  " guibg=NONE"

    if &term is# "linux"
        if &background is# "light"
            let tty_color = exists("g:indentLine_color_tty_light") ? g:indentLine_color_tty_light : 4
        else
            let tty_color = exists("g:indentLine_color_tty_dark") ? g:indentLine_color_tty_dark : 2
        endif
        execute "highlight Conceal cterm=bold ctermfg=" . tty_color .  " ctermbg=NONE"
    endif
endfunction

"{{{1 function! s:SetIndentLine()
function! s:SetIndentLine()
    let b:indentLine_enabled = 1
    let space = &l:shiftwidth is 0 ? &l:tabstop : &l:shiftwidth

    if g:indentLine_showFirstIndentLevel
        execute 'syntax match IndentLine /^ / containedin=ALL conceal cchar=' . g:indentLine_first_char
    endif

    if g:indentLine_faster
        execute 'syntax match IndentLineSpace /^\s\+/ containedin=ALL contains=IndentLine'
        execute 'syntax match IndentLine / \{'.(space-1).'}\zs / contained conceal cchar=' . g:indentLine_char
        execute 'syntax match IndentLine /\t\zs / contained conceal cchar=' . g:indentLine_char
    else
        let pattern = line('$') < g:indentLine_maxLines ? 'v' : 'c'
        for i in range(space+1, space * g:indentLine_indentLevel + 1, space)
            execute 'syntax match IndentLine /\%(^\s\+\)\@<=\%'.i.pattern.' / containedin=ALL conceal cchar=' . g:indentLine_char
        endfor
    endif
endfunction

"{{{1 function! s:ResetWidth(...)
function! s:ResetWidth(...)
    if 0 < a:0
        let &l:shiftwidth = a:1
    endif

    if exists("b:indentLine_enabled")
        syntax clear IndentLine
    endif
    call s:SetIndentLine()
endfunction

"{{{1 function! s:IndentLinesToggle()
function! s:IndentLinesToggle()
    if ! exists("b:indentLine_enabled")
        let b:indentLine_enabled = 0
    endif

    if b:indentLine_enabled
        let b:indentLine_enabled = 0
        syntax clear IndentLine
    else
        call s:SetIndentLine()
    endif
endfunction

"{{{1 function! s:Setup()
function! s:Setup()
    if index(g:indentLine_fileTypeExclude, &filetype) isnot -1
        return
    endif

    if len(g:indentLine_fileType) isnot 0 && index(g:indentLine_fileType, &filetype) is -1
        return
    end

    for name in g:indentLine_bufNameExclude
        if matchstr(bufname(''), name) is bufname('')
            return
        endif
    endfor

    if ! exists("b:indentLine_bufNr")
        let b:indentLine_bufNr = bufnr('%')
        let g:indentLine_bufNr = bufnr('%')
    elseif g:indentLine_bufNr != bufnr('%') && &hidden
        let g:indentLine_bufNr = bufnr('%')
        return
    endif

    if ! exists("g:indentLine_noConcealCursor")
        setlocal concealcursor=inc
    endif
    setlocal conceallevel=2

    if &filetype is# ""
        call s:InitColor()
    endif

    if ! exists("b:indentLine_enabled")
        let b:indentLine_enabled = g:indentLine_enabled
    endif

    if b:indentLine_enabled
        call s:SetIndentLine()
    endif
endfunction

"{{{1 augroup indentLine
augroup indentLine
    autocmd!
    autocmd BufWinEnter * call <SID>Setup()
    autocmd BufRead,BufNewFile,ColorScheme * call <SID>InitColor()
augroup END

"{{{1 commands
command! -nargs=? IndentLinesReset call <SID>ResetWidth(<f-args>)
command! IndentLinesToggle call <SID>IndentLinesToggle()

" vim:et:ts=4:sw=4:fdm=marker:fmr={{{,}}}