├── .gitattributes ├── .github └── FUNDING.yml ├── .gitignore ├── LICENSE ├── README.md ├── after ├── plugin │ └── indentLine.vim └── syntax │ └── indentLine.vim ├── doc └── indentLine.txt └── glyph └── indentLine-dotted-guide.eps /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | - https://github.com/Yggdroot/SponsorMe/blob/main/README.md#donate 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | .project 7 | .metadata 8 | bin/ 9 | tmp/ 10 | *.tmp 11 | *.bak 12 | *.swp 13 | *~.nib 14 | local.properties 15 | .classpath 16 | .settings/ 17 | .loadpath 18 | 19 | # External tool builders 20 | .externalToolBuilders/ 21 | 22 | # Locally stored "Eclipse launch configurations" 23 | *.launch 24 | 25 | # CDT-specific 26 | .cproject 27 | 28 | # PDT-specific 29 | .buildpath 30 | 31 | 32 | ################# 33 | ## Visual Studio 34 | ################# 35 | 36 | ## Ignore Visual Studio temporary files, build results, and 37 | ## files generated by popular Visual Studio add-ons. 38 | 39 | # User-specific files 40 | *.suo 41 | *.user 42 | *.sln.docstates 43 | 44 | # Build results 45 | [Dd]ebug/ 46 | [Rr]elease/ 47 | *_i.c 48 | *_p.c 49 | *.ilk 50 | *.meta 51 | *.obj 52 | *.pch 53 | *.pdb 54 | *.pgc 55 | *.pgd 56 | *.rsp 57 | *.sbr 58 | *.tlb 59 | *.tli 60 | *.tlh 61 | *.tmp 62 | *.vspscc 63 | .builds 64 | *.dotCover 65 | 66 | ## TODO: If you have NuGet Package Restore enabled, uncomment this 67 | #packages/ 68 | 69 | # Visual C++ cache files 70 | ipch/ 71 | *.aps 72 | *.ncb 73 | *.opensdf 74 | *.sdf 75 | 76 | # Visual Studio profiler 77 | *.psess 78 | *.vsp 79 | 80 | # ReSharper is a .NET coding add-in 81 | _ReSharper* 82 | 83 | # Installshield output folder 84 | [Ee]xpress 85 | 86 | # DocProject is a documentation generator add-in 87 | DocProject/buildhelp/ 88 | DocProject/Help/*.HxT 89 | DocProject/Help/*.HxC 90 | DocProject/Help/*.hhc 91 | DocProject/Help/*.hhk 92 | DocProject/Help/*.hhp 93 | DocProject/Help/Html2 94 | DocProject/Help/html 95 | 96 | # Click-Once directory 97 | publish 98 | 99 | # Others 100 | [Bb]in 101 | [Oo]bj 102 | sql 103 | TestResults 104 | *.Cache 105 | ClientBin 106 | stylecop.* 107 | ~$* 108 | *.dbmdl 109 | Generated_Code #added for RIA/Silverlight projects 110 | 111 | # Backup & report files from converting an old project file to a newer 112 | # Visual Studio version. Backup files are not needed, because we have git ;-) 113 | _UpgradeReport_Files/ 114 | Backup*/ 115 | UpgradeLog*.XML 116 | 117 | 118 | 119 | ############ 120 | ## Windows 121 | ############ 122 | 123 | # Windows image file caches 124 | Thumbs.db 125 | 126 | # Folder config file 127 | Desktop.ini 128 | 129 | 130 | ############# 131 | ## Python 132 | ############# 133 | 134 | *.py[co] 135 | 136 | # Packages 137 | *.egg 138 | *.egg-info 139 | dist 140 | build 141 | eggs 142 | parts 143 | bin 144 | var 145 | sdist 146 | develop-eggs 147 | .installed.cfg 148 | 149 | # Installer logs 150 | pip-log.txt 151 | 152 | # Unit test / coverage reports 153 | .coverage 154 | .tox 155 | 156 | #Translations 157 | *.mo 158 | 159 | #Mr Developer 160 | .mr.developer.cfg 161 | 162 | # Mac crap 163 | .DS_Store 164 | 165 | 166 | ############# 167 | ## Vim 168 | ############# 169 | 170 | # Exclude auto generated vim doc tags. 171 | doc/tags 172 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Yggdroot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | indentLine 2 | ========== 3 | 4 | This plugin is used for displaying thin vertical lines at each indentation level for code indented with spaces. For code indented with tabs I think there is no need to support it, because you can use `:set list lcs=tab:\|\ (here is a space)`. 5 | 6 | ## Requirements 7 | This plugin takes advantage of the newly provided `conceal` feature in Vim 7.3, so this plugin will not work with lower versions of Vim. 8 | 9 | MacOS users: The copy of Vim provided in MacOS may not have the conceal feature enabled (check with `echo has('conceal')`), which will prevent the plugin from loading. To fix this, we recommend using the homebrew version of Vim. 10 | 11 | ## Installation 12 | If you are using VIM version 8 or higher you can use its built-in package management; see `:help packages` for more information. Just run these commands in your terminal: 13 | ```bash 14 | git clone https://github.com/Yggdroot/indentLine.git ~/.vim/pack/vendor/start/indentLine 15 | vim -u NONE -c "helptags ~/.vim/pack/vendor/start/indentLine/doc" -c "q" 16 | ``` 17 | 18 | Otherwise, these are some of the other options: 19 | 20 | * To install the plugin just put the plugin files in your `~/.vim` (Linux) or `~/vimfiles` (Windows). 21 | 22 | * If you use a plugin manager you can put the whole directory into your `~/.vim/bundle/` directory ([Pathogen][pathogen]) or add the line `Plugin 'Yggdroot/indentLine'` to your `.vimrc` ([Vundle][vundle]). 23 | 24 | ## Customization 25 | To apply customization, apply the variable definitions to your `.vimrc` file. 26 | 27 | **Change Character Color** 28 | 29 | indentLine will overwrite 'conceal' color with grey by default. If you want to highlight conceal color with your colorscheme, disable by: 30 | ```vim 31 | let g:indentLine_setColors = 0 32 | ``` 33 | 34 | Or you can use the same colors as another highlight group. To use the same colors that are used for tab indents, use the 'SpecialKey' group: 35 | ```vim 36 | let g:indentLine_defaultGroup = 'SpecialKey' 37 | ``` 38 | 39 | Or you can customize conceal color by: 40 | ```vim 41 | " Vim 42 | let g:indentLine_color_term = 239 43 | 44 | " GVim 45 | let g:indentLine_color_gui = '#A4E57E' 46 | 47 | " none X terminal 48 | let g:indentLine_color_tty_light = 7 " (default: 4) 49 | let g:indentLine_color_dark = 1 " (default: 2) 50 | 51 | " Background (Vim, GVim) 52 | let g:indentLine_bgcolor_term = 202 53 | let g:indentLine_bgcolor_gui = '#FF5F00' 54 | ``` 55 | 56 | **Change Indent Char** 57 | 58 | Vim and GVim 59 | ```vim 60 | let g:indentLine_char = 'c' 61 | ``` 62 | where `'c'` can be any ASCII character. You can also use one of `¦`, `┆`, `│`, `⎸`, or `▏` to display more beautiful lines. However, these characters will only work with files whose encoding is UTF-8. 63 | 64 | or 65 | ```vim 66 | let g:indentLine_char_list = ['|', '¦', '┆', '┊'] 67 | ``` 68 | each indent level has a distinct character. 69 | 70 | **Change Conceal Behaviour** 71 | 72 | This plugin enables the Vim `conceal` feature which automatically hides stretches of text based on syntax highlighting. This setting will apply to all syntax items. 73 | 74 | For example, users utilizing the built in json.vim syntax file will no longer see quotation marks in their JSON files 75 | (see below how to disable conceal for JSON without disabling indentLine). 76 | 77 | indentLine will overwrite your "concealcursor" and "conceallevel" with default value: 78 | 79 | ```vim 80 | let g:indentLine_concealcursor = 'inc' 81 | let g:indentLine_conceallevel = 2 82 | ``` 83 | 84 | You can customize these settings, but the plugin will not function if `conceallevel` is not set to 1 or 2. 85 | 86 | If you want to keep your conceal setting, put this line to your vim dotfile: 87 | ```vim 88 | let g:indentLine_setConceal = 0 89 | ``` 90 | 91 | See the [VIM Reference Manual](http://vimdoc.sourceforge.net/htmldoc/version7.html#new-conceal) for more information on the `conceal` feature. 92 | 93 | 94 | **Disabling conceal for JSON and Markdown without disabling indentLine plugin** 95 | 96 | Even though this plugin requires conceal to be enabled for it to work, it is 97 | possible to disable conceal for JSON and Markdown files and still get the 98 | indentLine plugin to show indent lines for those files. 99 | 100 | Builtin [json.vim](https://github.com/vim/vim/blob/master/runtime/syntax/json.vim) 101 | and [markdown.vim](https://github.com/vim/vim/blob/master/runtime/syntax/markdown.vim) 102 | syntax allow disabling conceal by setting the following vars: 103 | 104 | * JSON 105 | ```vim 106 | let g:vim_json_conceal=0 107 | ``` 108 | 109 | * Markdown 110 | ```vim 111 | let g:markdown_syntax_conceal=0 112 | ``` 113 | 114 | If you use other syntax plugins for those file types, you will need to check 115 | their docs, as they may use different vars or have different ways to configure 116 | this. 117 | 118 | **Disable by default** 119 | ```vim 120 | let g:indentLine_enabled = 0 121 | ``` 122 | 123 | ### Commands 124 | `:IndentLinesToggle` toggles lines on and off. 125 | 126 | ### Font patching 127 | If you find all the standard unicode and ASCII characters too obtrusive, you might consider patching your font with the [indentLine-dotted-guide.eps][glyph] glyph provided. [FontForge][fontforge] makes the process amazingly simple: 128 | 129 | 1. Download and install FontForge. 130 | 2. Locate and open your terminal/gVim font. 131 | 3. Open the font in FontForge, choose __Goto__ from the __View__ menu and select _Private Use Area_ from the drop down box. 132 | 4. In the private use area, locate a blank spot for the glyph. Make a note of the code, e.g. `U+E0A3`. 133 | 5. Double-click the selected code point to open the font drawing tool. 134 | 6. From the __File__ menu, select __Import...__ and locate the _indentLine-dotted-guide.eps_ file. 135 | 7. Once imported, choose __File__ -> __Generate Fonts__ and choose a location and file type for the new font. 136 | 137 | Once completed, your new font will contain the more subtle dotted guide and all you have to do is set that glyph to `g:indentLine_char` in your `.vimrc` file. 138 | 139 | [glyph]: glyph/indentLine-dotted-guide.eps 140 | [fontforge]: http://fontforge.github.io/ 141 | 142 | ## Self promotion 143 | If you think this script is helpful, follow the [GitHub repository][repository], and don't forget to vote for it on Vim.org! ([vimscript #4354][script]). 144 | 145 | [pathogen]: https://github.com/tpope/vim-pathogen 146 | [vundle]: https://github.com/gmarik/vundle 147 | [repository]: https://github.com/Yggdroot/indentLine 148 | [script]: http://www.vim.org/scripts/script.php?script_id=4354 149 | 150 | ## Screenshots 151 | 152 | ### Vertical bars 153 | ![Screenshot](http://i.imgur.com/KVi0T.jpg) 154 | 155 | ### Patched font 156 | ![Screenshot](http://i.imgur.com/2ZA7oaZ.png) 157 | 158 | ### Leading Spaces 159 | ![Screenshot](http://i.imgur.com/tLYkb79.png) 160 | 161 | ![Screenshot](http://i.imgur.com/07Atrrs.png) 162 | 163 | ## License 164 | - MIT 165 | -------------------------------------------------------------------------------- /after/plugin/indentLine.vim: -------------------------------------------------------------------------------- 1 | " Script Name: indentLine.vim 2 | " Author: Yggdroot 3 | " 4 | " Description: To show the indention levels with thin vertical lines 5 | 6 | scriptencoding utf-8 7 | 8 | if !has("conceal") 9 | echoerr "conceal is invalid. To use the plugin, please enable the conceal" 10 | finish 11 | endif 12 | 13 | if exists("g:indentLine_loaded") 14 | finish 15 | endif 16 | let g:indentLine_loaded = 1 17 | 18 | let g:indentLine_newVersion = get(g:,'indentLine_newVersion',v:version > 704 || v:version == 704 && has("patch792")) 19 | 20 | let g:indentLine_char = get(g:, 'indentLine_char', (&encoding ==# "utf-8" && &term isnot# "linux" ? '¦' : '|')) 21 | let g:indentLine_char_list = get(g:, 'indentLine_char_list', []) 22 | let g:indentLine_first_char = get(g:, 'indentLine_first_char', (&encoding ==# "utf-8" && &term isnot# "linux" ? '¦' : '|')) 23 | let g:indentLine_indentLevel = get(g:, 'indentLine_indentLevel', 20) 24 | let g:indentLine_enabled = get(g:, 'indentLine_enabled', 1) 25 | let g:indentLine_fileType = get(g:, 'indentLine_fileType', []) 26 | let g:indentLine_fileTypeExclude = get(g:, 'indentLine_fileTypeExclude', ['leaderf']) 27 | let g:indentLine_bufNameExclude = get(g:, 'indentLine_bufNameExclude', []) 28 | let g:indentLine_bufTypeExclude = get(g:, 'indentLine_bufTypeExclude', []) 29 | let g:indentLine_showFirstIndentLevel = get(g:, 'indentLine_showFirstIndentLevel', 0) 30 | let g:indentLine_maxLines = get(g:, 'indentLine_maxLines', 3000) 31 | let g:indentLine_setColors = get(g:, 'indentLine_setColors', 1) 32 | let g:indentLine_setConceal = get(g:, 'indentLine_setConceal', 1) 33 | let g:indentLine_defaultGroup = get(g:, 'indentLine_defaultGroup', "") 34 | let g:indentLine_faster = get(g:, 'indentLine_faster', 0) 35 | let g:indentLine_leadingSpaceChar = get(g:, 'indentLine_leadingSpaceChar', (&encoding ==# "utf-8" && &term isnot# "linux" ? '˰' : '.')) 36 | let g:indentLine_leadingSpaceEnabled = get(g:, 'indentLine_leadingSpaceEnabled', 0) 37 | let g:indentLine_mysyntaxfile = fnamemodify(expand(""), ":p:h:h")."/syntax/indentLine.vim" 38 | 39 | "{{{1 function! s:InitColor() 40 | function! s:InitColor() 41 | if !g:indentLine_setColors 42 | return 43 | endif 44 | 45 | let default_term_bg = "NONE" 46 | let default_gui_bg = "NONE" 47 | if &background ==# "light" 48 | let default_term_fg = 249 49 | let default_gui_fg = "Grey70" 50 | else 51 | let default_term_fg = 239 52 | let default_gui_fg = "Grey30" 53 | endif 54 | 55 | if g:indentLine_defaultGroup != "" 56 | let default_id = synIDtrans(hlID(g:indentLine_defaultGroup)) 57 | let default_term_fg = synIDattr(default_id, "fg", "cterm") == "" ? default_term_fg : synIDattr(default_id, "fg", "cterm") 58 | let default_term_bg = synIDattr(default_id, "bg", "cterm") == "" ? default_term_bg : synIDattr(default_id, "bg", "cterm") 59 | let default_gui_fg = synIDattr(default_id, "fg", "gui") == "" ? default_gui_fg : synIDattr(default_id, "fg", "gui") 60 | let default_gui_bg = synIDattr(default_id, "bg", "gui") == "" ? default_gui_bg : synIDattr(default_id, "bg", "gui") 61 | endif 62 | 63 | if !exists("g:indentLine_color_term") 64 | let term_color = default_term_fg 65 | else 66 | let term_color = g:indentLine_color_term 67 | endif 68 | 69 | if !exists("g:indentLine_bgcolor_term") 70 | let term_bgcolor = default_term_bg 71 | else 72 | let term_bgcolor = g:indentLine_bgcolor_term 73 | endif 74 | 75 | if !exists("g:indentLine_color_gui") 76 | let gui_color = default_gui_fg 77 | else 78 | let gui_color = g:indentLine_color_gui 79 | endif 80 | 81 | if !exists("g:indentLine_bgcolor_gui") 82 | let gui_bgcolor = default_gui_bg 83 | else 84 | let gui_bgcolor = g:indentLine_bgcolor_gui 85 | endif 86 | 87 | execute "highlight Conceal cterm=NONE ctermfg=" . term_color . " ctermbg=" . term_bgcolor 88 | execute "highlight Conceal gui=NONE guifg=" . gui_color . " guibg=" . gui_bgcolor 89 | 90 | if &term ==# "linux" 91 | if &background ==# "light" 92 | let tty_color = exists("g:indentLine_color_tty_light") ? g:indentLine_color_tty_light : 4 93 | else 94 | let tty_color = exists("g:indentLine_color_tty_dark") ? g:indentLine_color_tty_dark : 2 95 | endif 96 | execute "highlight Conceal cterm=bold ctermfg=" . tty_color . " ctermbg=NONE" 97 | endif 98 | endfunction 99 | 100 | "{{{1 function! s:SetConcealOption() 101 | function! s:SetConcealOption() 102 | if !g:indentLine_setConceal 103 | return 104 | endif 105 | if !(exists("b:indentLine_ConcealOptionSet") && b:indentLine_ConcealOptionSet) 106 | let b:indentLine_ConcealOptionSet = 1 107 | let b:indentLine_original_concealcursor = &l:concealcursor 108 | let b:indentLine_original_conceallevel = &l:conceallevel 109 | let &l:concealcursor = exists("g:indentLine_concealcursor") ? g:indentLine_concealcursor : "inc" 110 | let &l:conceallevel = exists("g:indentLine_conceallevel") ? g:indentLine_conceallevel : "2" 111 | endif 112 | endfunction 113 | 114 | "{{{1 function! s:ResetConcealOption() 115 | function! s:ResetConcealOption() 116 | if exists("b:indentLine_ConcealOptionSet") && b:indentLine_ConcealOptionSet 117 | if exists("b:indentLine_original_concealcursor") 118 | let &l:concealcursor = b:indentLine_original_concealcursor 119 | endif 120 | if exists("b:indentLine_original_conceallevel") 121 | let &l:conceallevel = b:indentLine_original_conceallevel 122 | endif 123 | let b:indentLine_ConcealOptionSet = 0 124 | endif 125 | endfunction 126 | 127 | "{{{1 function! s:DisableOnDiff() 128 | function! s:DisableOnDiff() 129 | if &diff 130 | call s:IndentLinesDisable() 131 | call s:LeadingSpaceDisable() 132 | endif 133 | endfunction 134 | 135 | "{{{1 function! s:VimEnter() 136 | function! s:VimEnter() 137 | let init_winnr = winnr() 138 | noautocmd windo call s:DisableOnDiff() 139 | noautocmd exec init_winnr . "wincmd w" 140 | endfunction 141 | 142 | "{{{1 function! s:ToggleOnDiff() 143 | function! s:ToggleOnDiff() 144 | if &diff 145 | call s:IndentLinesDisable() 146 | call s:LeadingSpaceDisable() 147 | else 148 | call s:Setup() 149 | endif 150 | endfunction 151 | 152 | "{{{1 function! s:IndentLinesEnable() 153 | function! s:IndentLinesEnable() 154 | let s:indentSpace = get(g:, 'indentLine_indentSpace', &l:shiftwidth == 0 ? &l:tabstop : &l:shiftwidth) 155 | if g:indentLine_newVersion 156 | if exists("b:indentLine_enabled") && b:indentLine_enabled == 0 157 | return 158 | endif 159 | 160 | if !exists("w:indentLine_indentLineId") 161 | let w:indentLine_indentLineId = [] 162 | endif 163 | 164 | call s:SetConcealOption() 165 | 166 | if g:indentLine_showFirstIndentLevel 167 | call add(w:indentLine_indentLineId, matchadd('Conceal', '^ ', 0, -1, {'conceal': g:indentLine_first_char})) 168 | endif 169 | 170 | let n = len(g:indentLine_char_list) 171 | let level = 0 172 | for i in range(s:indentSpace+1, s:indentSpace * g:indentLine_indentLevel + 1, s:indentSpace) 173 | if n > 0 174 | let char = g:indentLine_char_list[level % n] 175 | let level += 1 176 | else 177 | let char = g:indentLine_char 178 | endif 179 | call add(w:indentLine_indentLineId, matchadd('Conceal', '^\s\+\zs\%'.i.'v ', 0, -1, {'conceal': char})) 180 | endfor 181 | 182 | return 183 | endif 184 | 185 | if exists("b:indentLine_enabled") && b:indentLine_enabled 186 | return 187 | else 188 | let b:indentLine_enabled = 1 189 | endif 190 | 191 | call s:SetConcealOption() 192 | 193 | let g:mysyntaxfile = g:indentLine_mysyntaxfile 194 | 195 | if g:indentLine_showFirstIndentLevel 196 | execute 'syntax match IndentLine /^ / containedin=ALL conceal cchar=' . g:indentLine_first_char 197 | endif 198 | 199 | if g:indentLine_faster 200 | execute 'syntax match IndentLineSpace /^\s\+/ containedin=ALL contains=IndentLine' 201 | execute 'syntax match IndentLine / \{'.(s:indentSpace-1).'}\zs / contained conceal cchar=' . g:indentLine_char 202 | execute 'syntax match IndentLine /\t\zs / contained conceal cchar=' . g:indentLine_char 203 | else 204 | let pattern = line('$') < g:indentLine_maxLines ? 'v' : 'c' 205 | for i in range(s:indentSpace+1, s:indentSpace * s:indentLine_indentLevel + 1, s:indentSpace) 206 | execute 'syntax match IndentLine /\%(^\s\+\)\@<=\%'.i.pattern.' / containedin=ALL conceal cchar=' . g:indentLine_char 207 | endfor 208 | endif 209 | endfunction 210 | 211 | "{{{1 function! s:IndentLinesDisable() 212 | function! s:IndentLinesDisable() 213 | if g:indentLine_newVersion 214 | if exists("w:indentLine_indentLineId") && ! empty(w:indentLine_indentLineId) 215 | for id in w:indentLine_indentLineId 216 | try 217 | call matchdelete(id) 218 | catch /^Vim\%((\a\+)\)\=:E80[23]/ 219 | endtry 220 | endfor 221 | let w:indentLine_indentLineId = [] 222 | endif 223 | 224 | call s:ResetConcealOption() 225 | return 226 | endif 227 | 228 | let b:indentLine_enabled = 0 229 | try 230 | syntax clear IndentLine 231 | syntax clear IndentLineSpace 232 | catch /^Vim\%((\a\+)\)\=:E28/ " catch error E28 233 | endtry 234 | endfunction 235 | 236 | "{{{1 function! s:IndentLinesToggle() 237 | function! s:IndentLinesToggle() 238 | if g:indentLine_newVersion 239 | if exists("w:indentLine_indentLineId") && ! empty(w:indentLine_indentLineId) 240 | let b:indentLine_enabled = 0 241 | call s:IndentLinesDisable() 242 | else 243 | let b:indentLine_enabled = 1 244 | call s:IndentLinesEnable() 245 | endif 246 | 247 | return 248 | endif 249 | 250 | if exists("b:indentLine_enabled") && b:indentLine_enabled 251 | call s:IndentLinesDisable() 252 | else 253 | call s:IndentLinesEnable() 254 | endif 255 | endfunction 256 | 257 | "{{{1 function! s:ResetWidth(...) 258 | function! s:ResetWidth(...) 259 | if 0 < a:0 260 | noautocmd let &l:shiftwidth = a:1 261 | endif 262 | 263 | let b:indentLine_enabled = 1 264 | call s:IndentLinesDisable() 265 | call s:IndentLinesEnable() 266 | endfunction 267 | 268 | "{{{1 function! s:AutoResetWidth() 269 | function! s:AutoResetWidth() 270 | 271 | let l:enable = get( 272 | \ b:, 273 | \ 'indentLine_enabled', 274 | \ g:indentLine_enabled ? s:Filter() : 0 275 | \) 276 | 277 | let g:indentLine_autoResetWidth = get(g:, 'indentLine_autoResetWidth', 1) 278 | 279 | if l:enable != 1 || g:indentLine_autoResetWidth != 1 280 | return 281 | endif 282 | 283 | let b:indentLine_enabled = l:enable 284 | call s:IndentLinesDisable() 285 | call s:IndentLinesEnable() 286 | endfunction 287 | 288 | "{{{1 function! s:Filter() 289 | function! s:Filter() 290 | if index(g:indentLine_fileTypeExclude, &filetype) != -1 291 | return 0 292 | endif 293 | 294 | if index(g:indentLine_bufTypeExclude, &buftype) != -1 295 | return 0 296 | endif 297 | 298 | if len(g:indentLine_fileType) != 0 && index(g:indentLine_fileType, &filetype) == -1 299 | return 0 300 | endif 301 | 302 | for name in g:indentLine_bufNameExclude 303 | if matchstr(bufname(''), name) == bufname('') 304 | return 0 305 | endif 306 | endfor 307 | 308 | return 1 309 | endfunction 310 | 311 | "{{{1 function! s:Disable() 312 | function! s:Disable() 313 | if s:Filter() == 0 314 | call s:IndentLinesDisable() 315 | call s:LeadingSpaceDisable() 316 | endif 317 | endfunction 318 | 319 | "{{{1 function! s:Setup() 320 | function! s:Setup() 321 | if &filetype ==# "" 322 | call s:InitColor() 323 | endif 324 | 325 | if s:Filter() && g:indentLine_enabled || exists("b:indentLine_enabled") && b:indentLine_enabled 326 | call s:IndentLinesEnable() 327 | endif 328 | 329 | if s:Filter() && g:indentLine_leadingSpaceEnabled || exists("b:indentLine_leadingSpaceEnabled") && b:indentLine_leadingSpaceEnabled 330 | call s:LeadingSpaceEnable() 331 | endif 332 | endfunction 333 | 334 | "{{{1 function! s:LeadingSpaceEnable() 335 | function! s:LeadingSpaceEnable() 336 | if g:indentLine_newVersion 337 | if exists("b:indentLine_leadingSpaceEnabled") && b:indentLine_leadingSpaceEnabled == 0 338 | return 339 | endif 340 | 341 | if !exists("w:indentLine_leadingSpaceId") 342 | let w:indentLine_leadingSpaceId = [] 343 | endif 344 | 345 | call s:SetConcealOption() 346 | 347 | call add(w:indentLine_leadingSpaceId, matchadd('Conceal', '\%(^\s*\)\@<= ', 0, -1, {'conceal': g:indentLine_leadingSpaceChar})) 348 | 349 | if exists("w:indentLine_indentLineId") && ! empty(w:indentLine_indentLineId) 350 | call s:ResetWidth() 351 | endif 352 | 353 | return 354 | endif 355 | 356 | if g:indentLine_faster 357 | echoerr 'LeadingSpace can not be shown when g:indentLine_faster == 1' 358 | return 359 | endif 360 | let g:mysyntaxfile = g:indentLine_mysyntaxfile 361 | let b:indentLine_leadingSpaceEnabled = 1 362 | call s:SetConcealOption() 363 | execute 'syntax match IndentLineLeadingSpace /\%(^\s*\)\@<= / containedin=ALLBUT,IndentLine conceal cchar=' . g:indentLine_leadingSpaceChar 364 | endfunction 365 | 366 | "{{{1 function! s:LeadingSpaceDisable() 367 | function! s:LeadingSpaceDisable() 368 | if g:indentLine_newVersion 369 | if exists("w:indentLine_leadingSpaceId") && ! empty(w:indentLine_leadingSpaceId) 370 | for id in w:indentLine_leadingSpaceId 371 | try 372 | call matchdelete(id) 373 | catch /^Vim\%((\a\+)\)\=:E80[23]/ 374 | endtry 375 | endfor 376 | let w:indentLine_leadingSpaceId = [] 377 | endif 378 | 379 | return 380 | endif 381 | 382 | let b:indentLine_leadingSpaceEnabled = 0 383 | try 384 | syntax clear IndentLineLeadingSpace 385 | catch /^Vim\%((\a\+)\)\=:E28/ " catch error E28 386 | endtry 387 | endfunction 388 | 389 | "{{{1 function! s:LeadingSpaceToggle() 390 | function! s:LeadingSpaceToggle() 391 | if g:indentLine_newVersion 392 | if exists("w:indentLine_leadingSpaceId") && ! empty(w:indentLine_leadingSpaceId) 393 | let b:indentLine_leadingSpaceEnabled = 0 394 | call s:LeadingSpaceDisable() 395 | else 396 | let b:indentLine_leadingSpaceEnabled = 1 397 | call s:LeadingSpaceEnable() 398 | endif 399 | 400 | return 401 | endif 402 | 403 | if exists("b:indentLine_leadingSpaceEnabled") && b:indentLine_leadingSpaceEnabled 404 | call s:LeadingSpaceDisable() 405 | else 406 | call s:LeadingSpaceEnable() 407 | endif 408 | endfunction 409 | 410 | "{{{1 augroup indentLine 411 | augroup indentLine 412 | autocmd! 413 | if g:indentLine_newVersion 414 | autocmd BufRead,BufNewFile,ColorScheme,Syntax * call s:InitColor() 415 | if exists("##WinNew") 416 | autocmd WinNew * call s:Setup() 417 | endif 418 | autocmd BufWinEnter * call s:IndentLinesDisable() | call s:LeadingSpaceDisable() | call s:Setup() 419 | autocmd FileType * call s:Disable() 420 | if exists("##OptionSet") 421 | autocmd OptionSet diff call s:ToggleOnDiff() 422 | autocmd OptionSet shiftwidth,tabstop noautocmd call s:AutoResetWidth() 423 | endif 424 | autocmd VimEnter * call s:VimEnter() 425 | else 426 | autocmd BufWinEnter * call s:Setup() 427 | autocmd User * if exists("b:indentLine_enabled") || exists("b:indentLine_leadingSpaceEnabled") | 428 | \ call s:Setup() | endif 429 | autocmd BufRead,BufNewFile,ColorScheme,Syntax * call s:InitColor() 430 | autocmd BufUnload * let b:indentLine_enabled = 0 | let b:indentLine_leadingSpaceEnabled = 0 431 | autocmd SourcePre $VIMRUNTIME/syntax/nosyntax.vim doautocmd indentLine BufUnload 432 | autocmd FileChangedShellPost * doautocmd indentLine BufUnload | call s:Setup() 433 | if exists("##OptionSet") 434 | autocmd OptionSet diff call s:ToggleOnDiff() 435 | autocmd OptionSet shiftwidth,tabstop noautocmd call s:AutoResetWidth() 436 | endif 437 | autocmd VimEnter * call s:VimEnter() 438 | endif 439 | augroup END 440 | 441 | "{{{1 commands 442 | command! -nargs=? IndentLinesReset call s:ResetWidth() 443 | command! -bar IndentLinesToggle call s:IndentLinesToggle() 444 | if g:indentLine_newVersion 445 | command! -bar IndentLinesEnable let b:indentLine_enabled = 1 | call s:IndentLinesEnable() 446 | command! -bar IndentLinesDisable let b:indentLine_enabled = 0 | call s:IndentLinesDisable() 447 | command! -bar LeadingSpaceEnable let b:indentLine_leadingSpaceEnabled = 1 | call s:LeadingSpaceEnable() 448 | command! -bar LeadingSpaceDisable let b:indentLine_leadingSpaceEnabled = 0 | call s:LeadingSpaceDisable() 449 | else 450 | command! -bar IndentLinesEnable call s:IndentLinesEnable() 451 | command! -bar IndentLinesDisable call s:IndentLinesDisable() 452 | command! -bar LeadingSpaceEnable call s:LeadingSpaceEnable() 453 | command! -bar LeadingSpaceDisable call s:LeadingSpaceDisable() 454 | endif 455 | command! LeadingSpaceToggle call s:LeadingSpaceToggle() 456 | 457 | " vim:et:ts=4:sw=4:fdm=marker:fmr={{{,}}} 458 | 459 | -------------------------------------------------------------------------------- /after/syntax/indentLine.vim: -------------------------------------------------------------------------------- 1 | "this is the `mysyntaxfile`, will be sourced after sourcing synload.vim 2 | autocmd Syntax * doautocmd indentLine User 3 | -------------------------------------------------------------------------------- /doc/indentLine.txt: -------------------------------------------------------------------------------- 1 | *indentLine.txt* Show vertical lines for indent with conceal feature 2 | 3 | CONTENTS *indentLine-contents* 4 | Introduction |indentLine-introduction| 5 | Config |indentLine-config| 6 | Variables |indentLine-variables| 7 | Commands |indentLine-commands| 8 | FAQ |indentLine-faq| 9 | Changelog |indentLine-changelog| 10 | Credits |indentLine-credits| 11 | ============================================================================== 12 | INTRODUCTION *indentLine-introduction* 13 | This plugin is used for displaying thin vertical lines at each indentation 14 | level for code indented with spaces. For code indented with tabs, I think 15 | there is no need to support it, using :set list lcs=tab:\|\ (here is a space) 16 | can achieve it. 17 | ============================================================================== 18 | CONFIG *indentLine-config* 19 | 20 | ============================================================================== 21 | VARIABLES *indentLine-variables* 22 | 23 | g:indentLine_char *g:indentLine_char* 24 | Specify a character to be used as indent line if 25 | |g:indentLine_char_list| is not []. 26 | You also can use other characters: 27 | | ¦ ┆ │ 28 | Default value is "|". 29 | 30 | g:indentLine_char_list *g:indentLine_char_list* 31 | Specify a list of characters to be used as indent line for 32 | each indent level. If the value is an empty list [], use 33 | |g:indentLine_char| instead. 34 | e.g., let g:indentLine_char_list = ['|', '¦', '┆', '┊'] 35 | Default value is []. 36 | 37 | g:indentLine_setColors *g:indentLine_setColors* 38 | By default, indentLine will overwrite 'conceal' color. 39 | If you want to highlight conceal with your 40 | colorscheme, set this value to 0. 41 | Default value is 1. 42 | 43 | g:indentLine_first_char *g:indentLine_first_char* 44 | Specify a character to be used as indent line 45 | on the first level. 46 | You also can use other characters: 47 | | ¦ ┆ │ 48 | Default value is "|". 49 | 50 | g:indentLine_color_term *g:indentLine_color_term* 51 | Specify terminal vim indent line color. 52 | e.g. let g:indentLine_color_term = 239 53 | 54 | g:indentLine_bgcolor_term *g:indentLine_bgcolor_term* 55 | Specify terminal vim indent line background color. 56 | e.g. let g:indentLine_bgcolor_term = 202 57 | 58 | 59 | g:indentLine_color_gui *g:indentLine_color_gui* 60 | Specify GUI vim indent line color. 61 | e.g. let g:indentLine_color_gui = '#A4E57E' 62 | 63 | g:indentLine_bgcolor_gui *g:indentLine_bgcolor_gui* 64 | Specify GUI vim indent line background color. 65 | e.g. let g:indentLine_bgcolor_gui = '#FF5F00' 66 | 67 | g:indentLine_color_tty_light *g:indentLine_color_tty_light* 68 | Specify none X terminal vim indent line color in bg light. 69 | default: 4 70 | e.g. let g:indentLine_color_tty_light = 7 71 | 72 | g:indentLine_color_tty_dark *g:indentLine_color_tty_dark* 73 | Specify none X terminal vim indent line color in bg dark. 74 | default: 2 75 | e.g. let g:indentLine_color_tty_dark = 1 76 | 77 | g:indentLine_indentLevel *g:indentLine_indentLevel* 78 | Specify how much indent level do you want to use for 79 | indentLine. Most program will not has bigger indent level than 80 | 10. 81 | Default value is 10. 82 | 83 | g:indentLine_showFirstIndentLevel *g:indentLine_showFirstIndentLevel* 84 | Specify whether the first indent level should be shown. 85 | This is useful if you use indentLine in combination with 86 | |listchars| in order to show tabs. 87 | Default value is 0. 88 | 89 | g:indentLine_enabled *g:indentLine_enabled* 90 | Specify whether to enable indentLine plugin by default. 91 | If value is not 0, the plugin is on by default, otherwise off. 92 | Default value is 1. 93 | 94 | g:indentLine_fileType *g:indentLine_fileType* 95 | This variable specify a list of file types. 96 | When opening these types of files, the plugin is enabled by 97 | default. 98 | e.g. let g:indentLine_fileType = ['c', 'cpp'] 99 | Default value is [] which means all file types is supported. 100 | 101 | g:indentLine_fileTypeExclude *g:indentLine_fileTypeExclude* 102 | This variable specify a list of file types. 103 | When opening these types of files, the plugin is disabled by 104 | default. 105 | e.g. let g:indentLine_fileTypeExclude = ['text', 'sh'] 106 | Default value is [] which means no file types are excluded. 107 | 108 | g:indentLine_bufTypeExclude *g:indentLine_bufTypeExclude* 109 | This variable specify a list of buffer types. 110 | When opening these types of buffers, the plugin is disabled 111 | by default. 112 | e.g. let g:indentLine_bufTypeExclude = ['help', 'terminal'] 113 | Default value is [] which means no buffer type is excluded. 114 | 115 | g:indentLine_bufNameExclude *g:indentLine_bufNameExclude* 116 | This variable specify a list of buffer names, which can be 117 | regular expression. If the buffer's name fall into this list, 118 | the indentLine won't display. 119 | e.g. let g:indentLine_bufNameExclude = ['_.*', 'NERD_tree.*'] 120 | Default value is []. 121 | 122 | g:indentLine_maxLines *g:indentLine_maxLines* 123 | This variable specify a number, when the number of buffer's 124 | lines exceed it, the plugin try to use another pattern to make 125 | the performance better. 126 | Default value is 3000. 127 | 128 | g:indentLine_faster *g:indentLine_faster* 129 | If you want the performance better, you can set the value as 130 | 1, default value is 0. But better performance may bring little 131 | issue with it. 132 | 133 | g:indentLine_setConceal 134 | The plugin will overwrite your "concealcursor" and 135 | "conceallevel" by default. If you want to keep your setting, 136 | set this value to 0. 137 | Default value is 1. 138 | 139 | g:indentLine_concealcursor *g:indentLine_concealcursor* 140 | This variable toggles cursor lines behavior. If variable 141 | exists and is empty, that is, set to '', then the indentlines 142 | will not show up in the cursorline. 143 | See *concealcursor*. 144 | Default value is 'inc'. 145 | 146 | g:indentLine_conceallevel *g:indentLine_conceallevel* 147 | This variable toggles the concealing behavior. 148 | See *conceallevel*. 149 | Default value is '2'. 150 | 151 | g:indentLine_leadingSpaceChar *g:indentLine_leadingSpaceChar* 152 | Specify a character to show for leading spaces. 153 | You also can use other characters:˽˰·· 154 | e.g. let g:indentLine_leadingSpaceChar = '·' 155 | 156 | g:indentLine_leadingSpaceEnabled *g:indentLine_leadingSpaceEnabled* 157 | Specify whether to show leading spaces by default. 158 | Default value is 0. 159 | 160 | g:indentLine_defaultGroup *g:indentLine_defaultGroup* 161 | Specify a highlight group to use for default values 162 | of g:indentLine_[bg]color_(term|gui) 163 | 164 | g:indentLine_autoResetWidth *g:indentLine_autoResetWidth* 165 | Specify whether to auto redraw the indentLines after 166 | 'shiftwidth' or 'tabstop' change. 167 | Default value is 1. 168 | 169 | ============================================================================== 170 | COMMANDS *indentLine-commands* 171 | 172 | *IndentLinesReset* [number] 173 | if 'shiftwidth' changes, using this command can redraw the 174 | indentLines. number is optional, it means the width between 175 | two indent level, if ommited, value of 'shiftwidth' is used. 176 | 177 | *IndentLinesToggle* 178 | toggle the indent lines of the current buffer. 179 | 180 | *IndentLinesEnable* 181 | enable the indent lines of the current buffer. 182 | 183 | *IndentLinesDisable* 184 | disable the indent lines of the current buffer. 185 | 186 | *LeadingSpaceEnable* 187 | enable the leading spaces of the current buffer. 188 | 189 | *LeadingSpaceDisable* 190 | disable the leading spaces of the current buffer. 191 | 192 | *LeadingSpaceToggle* 193 | toggle the leading spaces of the current buffer. 194 | ============================================================================== 195 | FAQ *indentLine-faq* 196 | 197 | Q. How can I make the indent line visual similar to the line used in Sublime 198 | Text 2? 199 | 200 | A. Use let g:indentLine_char = '┊' 201 | 202 | Q. I don't see quotes in JSON. 203 | 204 | A. Use let g:vim_json_syntax_conceal = 0 or run :IndentLinesDisable 205 | 206 | ============================================================================== 207 | CHANGELOG *indentLine-changelog* 208 | 209 | ============================================================================== 210 | CREDITS *indentLine-credits* 211 | 212 | Thanks to the following people for suggestions and patches: 213 | 214 | NagatoPain 215 | Salman Halim 216 | Christophe 217 | ============================================================================== 218 | vim:tw=78:ts=8:ft=help:norl 219 | -------------------------------------------------------------------------------- /glyph/indentLine-dotted-guide.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%BoundingBox: 2.96296 -488.5 170.5 1988.5 3 | %%Pages: 0 4 | %%Title: uniE0A3 from DejaVuSansMonoForPowerline 5 | %%Creator: FontForge 6 | %%Author: Andy Earnshaw 7 | %%CreationDate: 22:53 1-8-2014 8 | %%EndComments 9 | %%BeginPreview: 5 74 4 74 10 | %013100 11 | %3EFE40 12 | %BFFFD0 13 | %DFFFE0 14 | %7FFF80 15 | %059600 16 | %000000 17 | %000000 18 | %000000 19 | %000000 20 | %048500 21 | %6FFF80 22 | %CFFFE0 23 | %CFFFD0 24 | %4EFE50 25 | %014100 26 | %000000 27 | %000000 28 | %000000 29 | %000000 30 | %19DA10 31 | %9FFFB0 32 | %DFFFE0 33 | %AFFFB0 34 | %1AEB20 35 | %000000 36 | %000000 37 | %000000 38 | %000000 39 | %013100 40 | %3EFE40 41 | %BFFFD0 42 | %DFFFE0 43 | %7FFF80 44 | %059600 45 | %000000 46 | %000000 47 | %000000 48 | %000000 49 | %048500 50 | %6FFF80 51 | %CFFFE0 52 | %CFFFD0 53 | %4EFF50 54 | %014100 55 | %000000 56 | %000000 57 | %000000 58 | %000000 59 | %19DA10 60 | %9FFFB0 61 | %DFFFE0 62 | %AFFFB0 63 | %1AEB20 64 | %000000 65 | %000000 66 | %000000 67 | %000000 68 | %013100 69 | %3EFE40 70 | %BFFFD0 71 | %DFFFE0 72 | %7FFF80 73 | %059600 74 | %000000 75 | %000000 76 | %000000 77 | %000000 78 | %048500 79 | %6FFF80 80 | %CFFFE0 81 | %CFFFD0 82 | %4EFF50 83 | %014100 84 | %%EndPreview 85 | %%EndProlog 86 | %%Page "uniE0A3" 1 87 | gsave newpath 88 | 3 -405 moveto 89 | 3.66667 -381.667 12 -362 28 -346 curveto 90 | 44 -330 63.6667 -321.833 87 -321.5 curveto 91 | 110.333 -321.833 130 -330 146 -346 curveto 92 | 162 -362 170.167 -381.667 170.5 -405 curveto 93 | 170.167 -428.333 162 -448 146 -464 curveto 94 | 130 -480 110.333 -488.167 87 -488.5 curveto 95 | 63.6667 -488.167 44 -480 28 -464 curveto 96 | 10.6667 -446.667 2.33333 -427 3 -405 curveto 97 | closepath 98 | 3 255 moveto 99 | 3.66667 278.333 12 298 28 314 curveto 100 | 44 330 63.6667 338.167 87 338.5 curveto 101 | 110.333 338.167 130 330 146 314 curveto 102 | 162 298 170.167 278.333 170.5 255 curveto 103 | 170.167 231.667 162 212 146 196 curveto 104 | 130 180 110.333 171.833 87 171.5 curveto 105 | 63.6667 171.833 44 180 28 196 curveto 106 | 10.6667 213.333 2.33333 233 3 255 curveto 107 | closepath 108 | 3 -75 moveto 109 | 3.66667 -51.6667 12 -32 28 -16 curveto 110 | 44 0 63.6667 8.16667 87 8.5 curveto 111 | 110.333 8.16667 130 0 146 -16 curveto 112 | 162 -32 170.167 -51.6667 170.5 -75 curveto 113 | 170.167 -98.3333 162 -118 146 -134 curveto 114 | 130 -150 110.333 -158.167 87 -158.5 curveto 115 | 63.6667 -158.167 44 -150 28 -134 curveto 116 | 10.6667 -116.667 2.33333 -97 3 -75 curveto 117 | closepath 118 | 3 915 moveto 119 | 3.66667 938.333 12 958 28 974 curveto 120 | 44 990 63.6667 998.167 87 998.5 curveto 121 | 110.333 998.167 130 990 146 974 curveto 122 | 162 958 170.167 938.333 170.5 915 curveto 123 | 170.167 891.667 162 872 146 856 curveto 124 | 130 840 110.333 831.833 87 831.5 curveto 125 | 63.6667 831.833 44 840 28 856 curveto 126 | 10.6667 873.333 2.33333 893 3 915 curveto 127 | closepath 128 | 3 585 moveto 129 | 3.66667 608.333 12 628 28 644 curveto 130 | 44 660 63.6667 668.167 87 668.5 curveto 131 | 110.333 668.167 130 660 146 644 curveto 132 | 162 628 170.167 608.333 170.5 585 curveto 133 | 170.167 561.667 162 542 146 526 curveto 134 | 130 510 110.333 501.833 87 501.5 curveto 135 | 63.6667 501.833 44 510 28 526 curveto 136 | 10.6667 543.333 2.33333 563 3 585 curveto 137 | closepath 138 | 3 1575 moveto 139 | 3.66667 1598.33 12 1618 28 1634 curveto 140 | 44 1650 63.6667 1658.17 87 1658.5 curveto 141 | 110.333 1658.17 130 1650 146 1634 curveto 142 | 162 1618 170.167 1598.33 170.5 1575 curveto 143 | 170.167 1551.67 162 1532 146 1516 curveto 144 | 130 1500 110.333 1491.83 87 1491.5 curveto 145 | 63.6667 1491.83 44 1500 28 1516 curveto 146 | 10.6667 1533.33 2.33333 1553 3 1575 curveto 147 | closepath 148 | 3 1245 moveto 149 | 3.66667 1268.33 12 1288 28 1304 curveto 150 | 44 1320 63.6667 1328.17 87 1328.5 curveto 151 | 110.333 1328.17 130 1320 146 1304 curveto 152 | 162 1288 170.167 1268.33 170.5 1245 curveto 153 | 170.167 1221.67 162 1202 146 1186 curveto 154 | 130 1170 110.333 1161.83 87 1161.5 curveto 155 | 63.6667 1161.83 44 1170 28 1186 curveto 156 | 10.6667 1203.33 2.33333 1223 3 1245 curveto 157 | closepath 158 | 3 1905 moveto 159 | 3.66667 1928.33 12 1948 28 1964 curveto 160 | 44 1980 63.6667 1988.17 87 1988.5 curveto 161 | 110.333 1988.17 130 1980 146 1964 curveto 162 | 162 1948 170.167 1928.33 170.5 1905 curveto 163 | 170.167 1881.67 162 1862 146 1846 curveto 164 | 130 1830 110.333 1821.83 87 1821.5 curveto 165 | 63.6667 1821.83 44 1830 28 1846 curveto 166 | 10.6667 1863.33 2.33333 1883 3 1905 curveto 167 | closepath 168 | fill grestore 169 | %%EOF 170 | --------------------------------------------------------------------------------