1
0
Fork 0
mirror of synced 2024-12-06 07:35:36 -05:00

Feature/vim indent guides (#608)

This commit is contained in:
Shamanaitor 2021-07-04 18:01:36 -03:00 committed by GitHub
parent 1717536b95
commit ff31be3f45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 2107 additions and 0 deletions

View file

@ -104,6 +104,7 @@ I recommend reading the docs of these plugins to understand them better. Each pl
* [vim-yankstack](https://github.com/maxbrunsfeld/vim-yankstack): Maintains a history of previous yanks, changes and deletes
* [vim-zenroom2](https://github.com/amix/vim-zenroom2) Remove all clutter and focus only on the essential. Similar to iA Writer or Write Room
* [gist-vim](https://github.com/mattn/gist-vim) Easily create gists from Vim using the `:Gist` command
* [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) Is a plugin for visually displaying indent levels in Vim
* [editorconfig-vim](https://github.com/editorconfig/editorconfig-vim) EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs.
@ -340,6 +341,13 @@ Open [ctrlp.vim](https://github.com/kien/ctrlp.vim) plugin to quickly find a fil
nmap <silent> <leader>a <Plug>(ale_next_wrap)
[vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) the default mapping to toggle the plugin is (`<leader>ig`)
You can also use the following commands inside Vim:
:IndentGuidesEnable
:IndentGuidesDisable
:IndentGuidesToggle
### Spell checking
Pressing `<leader>ss` will toggle spell checking:
@ -385,3 +393,4 @@ Just do following:
Maintaining this Vim configuration isn't my day job. Daily I am the founder/CEO of [Doist](https://doist.com/). You could come and help us build the workplace of the future while living a balanced life (anywhere in the world ๐ŸŒ๐ŸŒŽ๐ŸŒ).
PS: Using Vim isn't a requirement ๐Ÿ˜„

View file

@ -0,0 +1 @@
doc/tags

View file

@ -0,0 +1,111 @@
# Indent Guides
Indent Guides is a plugin for visually displaying indent levels in Vim.
<img src="http://i.imgur.com/ONgoj.png" width="448" height="448" alt="" />
## Features:
* Can detect both tab and space indent styles.
* Automatically inspects your colorscheme and picks appropriate colors (gVim only).
* Will highlight indent levels with alternating colors.
* Full support for gVim and basic support for Terminal Vim.
* Seems to work on Windows gVim 7.3 (haven't done any extensive tests though).
* Customizable size for indent guides, eg. skinny guides (soft-tabs only).
* Customizable start indent level.
* Highlight support for files with a mixture of tab and space indent styles.
## Requirements
* Vim 7.2+
## Installation
To install the plugin copy `autoload`, `plugin`, `doc` directories into your `.vim` directory.
### Pathogen
If you have [Pathogen](http://www.vim.org/scripts/script.php?script_id=2332) installed, clone this repo into a subdirectory of your `.vim/bundle` directory like so:
```bash
cd ~/.vim/bundle
git clone git://github.com/nathanaelkane/vim-indent-guides.git
```
### Vundle
If you have [Vundle](https://github.com/VundleVim/Vundle.vim) installed, add the following line to your `~/.vimrc` in the appropriate spot (see the Vundle.vim README for help):
```vim
Plugin 'nathanaelkane/vim-indent-guides'
```
and then run the following command from inside Vim:
```vim
:PluginInstall
```
## Usage
The default mapping to toggle the plugin is `<Leader>ig`.
You can also use the following commands inside Vim:
```vim
:IndentGuidesEnable
:IndentGuidesDisable
:IndentGuidesToggle
```
If you would like to have indent guides enabled by default, you can add the following to your `~/.vimrc`:
```vim
let g:indent_guides_enable_on_vim_startup = 1
```
### gVim
**This plugin should work with gVim out of the box, no configuration needed.** It will automatically inspect your colorscheme and pick appropriate colors.
### Setting custom indent colors
Here's an example of how to define custom colors instead of using the ones the plugin automatically generates for you. Add this to your `.vimrc` file:
```vim
let g:indent_guides_auto_colors = 0
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd guibg=red ctermbg=3
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=green ctermbg=4
```
Alternatively you can add the following lines to your colorscheme file.
```vim
hi IndentGuidesOdd guibg=red ctermbg=3
hi IndentGuidesEven guibg=green ctermbg=4
```
### Terminal Vim
At the moment Terminal Vim only has basic support. This means is that colors won't be automatically calculated based on your colorscheme. Instead, some preset colors are used depending on whether `background` is set to `dark` or `light`.
When `set background=dark` is used, the following highlight colors will be defined:
```vim
hi IndentGuidesOdd ctermbg=black
hi IndentGuidesEven ctermbg=darkgrey
```
Alternatively, when `set background=light` is used, the following highlight colors will be defined:
```vim
hi IndentGuidesOdd ctermbg=white
hi IndentGuidesEven ctermbg=lightgrey
```
If for some reason it's incorrectly defining light highlight colors instead of dark ones or vice versa, the first thing you should check is that the `background` value is being set correctly for your colorscheme. Sometimes it's best to manually set the `background` value in your `.vimrc`, for example:
```vim
colorscheme desert256
set background=dark
```
Alternatively you can manually setup the highlight colors yourself, see `:help indent_guides_auto_colors` for an example.
## Help
`:help indent-guides`
## Screenshots
<img src="http://i.imgur.com/7tMBl.png" width="448" height="448" alt="" />
<img src="http://i.imgur.com/EvrqK.png" width="448" height="448" alt="" />
<img src="http://i.imgur.com/hHqp2.png" width="448" height="448" alt="" />

View file

@ -0,0 +1,879 @@
" Author: Nate Kane <nathanaelkane AT gmail DOT com>
" Homepage: http://github.com/nathanaelkane/vim-indent-guides
"
" Return hex string equivalent to given decimal string or number.
"
" Example: color_helper#dec_to_hex(255, 2)
" Returns: 'FF'
"
" Example: color_helper#dec_to_hex(255, 5)
" Returns: '000FF'
"
function! color_helper#dec_to_hex(arg, padding)
return toupper(printf('%0' . a:padding . 'x', a:arg + 0))
endfunction
"
" Return number equivalent to given hex string ('0x' is optional).
"
" Example: color_helper#hex_to_dec('FF')
" Returns: 255
"
" Example: color_helper#hex_to_dec('88')
" Returns: 136
"
" Example: color_helper#hex_to_dec('00')
" Returns: 0
"
function! color_helper#hex_to_dec(arg)
return (a:arg =~? '^0x') ? a:arg + 0 : ('0x'.a:arg) + 0
endfunction
"
" Converts a given hex color string into an rgb list (eg. [red, green, blue]).
"
" Example: color_helper#hex_color_to_rgb('#0088FF')
" Returns: [0, 136, 255]
"
function! color_helper#hex_color_to_rgb(hex_color)
let l:rgb = []
if a:hex_color =~ g:indent_guides_color_hex_pattern
let l:red = color_helper#hex_to_dec(strpart(a:hex_color, 1, 2))
let l:green = color_helper#hex_to_dec(strpart(a:hex_color, 3, 2))
let l:blue = color_helper#hex_to_dec(strpart(a:hex_color, 5, 2))
let l:rgb = [l:red, l:green, l:blue]
end
return l:rgb
endfunction
"
" Converts a given rgb list (eg. [red, green, blue]) into a hex color string.
"
" Example: color_helper#rgb_color_to_hex([0, 136, 255])
" Returns: '#0088FF'
"
function! color_helper#rgb_color_to_hex(rgb_color)
let l:hex_color = '#'
let l:hex_color .= color_helper#dec_to_hex(a:rgb_color[0], 2) " red
let l:hex_color .= color_helper#dec_to_hex(a:rgb_color[1], 2) " green
let l:hex_color .= color_helper#dec_to_hex(a:rgb_color[2], 2) " blue
return l:hex_color
endfunction
"
" Returns a ligtened color using the given color and the percent to lighten it
" by.
"
" Example: color_helper#hex_color_lighten('#000000', 0.10)
" Returns: '#191919'
"
function! color_helper#hex_color_lighten(color, percent)
let l:rgb = color_helper#hex_color_to_rgb(a:color)
let l:rgb_lightened = []
for i in l:rgb
call add(l:rgb_lightened, float2nr(i + ((255 - i) * a:percent)))
endfor
return color_helper#rgb_color_to_hex(l:rgb_lightened)
endfunction
"
" Returns a darkened color using the given color and the percent to darken it
" by.
"
" Example: color_helper#hex_color_darken('#FFFFFF', 0.10)
" Returns: '#E5E5E5'
"
function! color_helper#hex_color_darken(color, percent)
let l:rgb = color_helper#hex_color_to_rgb(a:color)
let l:rgb_darkened = []
for i in l:rgb
call add(l:rgb_darkened, float2nr(i * (1 - a:percent)))
endfor
return color_helper#rgb_color_to_hex(l:rgb_darkened)
endfunction
"
" Returns a hex color code for the given color name.
"
" Example: color_helper#color_name_to_hex('darkslategray')
" Returns: '#2F4F4F'
"
function! color_helper#color_name_to_hex(color_name)
let l:hex_code = ''
let l:color_name = tolower(a:color_name)
let l:color_list = {
\ 'alice blue' : '#F0F8FF',
\ 'aliceblue' : '#F0F8FF',
\ 'antique white' : '#FAEBD7',
\ 'antiquewhite' : '#FAEBD7',
\ 'antiquewhite1' : '#FFEFDB',
\ 'antiquewhite2' : '#EEDFCC',
\ 'antiquewhite3' : '#CDC0B0',
\ 'antiquewhite4' : '#8B8378',
\ 'aquamarine' : '#7FFFD4',
\ 'aquamarine1' : '#7FFFD4',
\ 'aquamarine2' : '#76EEC6',
\ 'aquamarine3' : '#66CDAA',
\ 'aquamarine4' : '#458B74',
\ 'azure' : '#F0FFFF',
\ 'azure1' : '#F0FFFF',
\ 'azure2' : '#E0EEEE',
\ 'azure3' : '#C1CDCD',
\ 'azure4' : '#838B8B',
\ 'beige' : '#F5F5DC',
\ 'bisque' : '#FFE4C4',
\ 'bisque1' : '#FFE4C4',
\ 'bisque2' : '#EED5B7',
\ 'bisque3' : '#CDB79E',
\ 'bisque4' : '#8B7D6B',
\ 'black' : '#000000',
\ 'blanched almond' : '#FFEBCD',
\ 'blanchedalmond' : '#FFEBCD',
\ 'blue violet' : '#8A2BE2',
\ 'blue' : '#0000FF',
\ 'blue1' : '#0000FF',
\ 'blue2' : '#0000EE',
\ 'blue3' : '#0000CD',
\ 'blue4' : '#00008B',
\ 'blueviolet' : '#8A2BE2',
\ 'brown' : '#A52A2A',
\ 'brown1' : '#FF4040',
\ 'brown2' : '#EE3B3B',
\ 'brown3' : '#CD3333',
\ 'brown4' : '#8B2323',
\ 'burlywood' : '#DEB887',
\ 'burlywood1' : '#FFD39B',
\ 'burlywood2' : '#EEC591',
\ 'burlywood3' : '#CDAA7D',
\ 'burlywood4' : '#8B7355',
\ 'cadet blue' : '#5F9EA0',
\ 'cadetblue' : '#5F9EA0',
\ 'cadetblue1' : '#98F5FF',
\ 'cadetblue2' : '#8EE5EE',
\ 'cadetblue3' : '#7AC5CD',
\ 'cadetblue4' : '#53868B',
\ 'chartreuse' : '#7FFF00',
\ 'chartreuse1' : '#7FFF00',
\ 'chartreuse2' : '#76EE00',
\ 'chartreuse3' : '#66CD00',
\ 'chartreuse4' : '#458B00',
\ 'chocolate' : '#D2691E',
\ 'chocolate1' : '#FF7F24',
\ 'chocolate2' : '#EE7621',
\ 'chocolate3' : '#CD661D',
\ 'chocolate4' : '#8B4513',
\ 'coral' : '#FF7F50',
\ 'coral1' : '#FF7256',
\ 'coral2' : '#EE6A50',
\ 'coral3' : '#CD5B45',
\ 'coral4' : '#8B3E2F',
\ 'cornflower blue' : '#6495ED',
\ 'cornflowerblue' : '#6495ED',
\ 'cornsilk' : '#FFF8DC',
\ 'cornsilk1' : '#FFF8DC',
\ 'cornsilk2' : '#EEE8CD',
\ 'cornsilk3' : '#CDC8B1',
\ 'cornsilk4' : '#8B8878',
\ 'cyan' : '#00FFFF',
\ 'cyan1' : '#00FFFF',
\ 'cyan2' : '#00EEEE',
\ 'cyan3' : '#00CDCD',
\ 'cyan4' : '#008B8B',
\ 'dark blue' : '#00008B',
\ 'dark cyan' : '#008B8B',
\ 'dark goldenrod' : '#B8860B',
\ 'dark gray' : '#A9A9A9',
\ 'dark green' : '#006400',
\ 'dark grey' : '#A9A9A9',
\ 'dark khaki' : '#BDB76B',
\ 'dark magenta' : '#8B008B',
\ 'dark olive green' : '#556B2F',
\ 'dark orange' : '#FF8C00',
\ 'dark orchid' : '#9932CC',
\ 'dark red' : '#8B0000',
\ 'dark salmon' : '#E9967A',
\ 'dark sea green' : '#8FBC8F',
\ 'dark slate blue' : '#483D8B',
\ 'dark slate gray' : '#2F4F4F',
\ 'dark slate grey' : '#2F4F4F',
\ 'dark turquoise' : '#00CED1',
\ 'dark violet' : '#9400D3',
\ 'dark yellow' : '#BBBB00',
\ 'darkblue' : '#00008B',
\ 'darkcyan' : '#008B8B',
\ 'darkgoldenrod' : '#B8860B',
\ 'darkgoldenrod1' : '#FFB90F',
\ 'darkgoldenrod2' : '#EEAD0E',
\ 'darkgoldenrod3' : '#CD950C',
\ 'darkgoldenrod4' : '#8B6508',
\ 'darkgray' : '#A9A9A9',
\ 'darkgreen' : '#006400',
\ 'darkgrey' : '#A9A9A9',
\ 'darkkhaki' : '#BDB76B',
\ 'darkmagenta' : '#8B008B',
\ 'darkolivegreen' : '#556B2F',
\ 'darkolivegreen1' : '#CAFF70',
\ 'darkolivegreen2' : '#BCEE68',
\ 'darkolivegreen3' : '#A2CD5A',
\ 'darkolivegreen4' : '#6E8B3D',
\ 'darkorange' : '#FF8C00',
\ 'darkorange1' : '#FF7F00',
\ 'darkorange2' : '#EE7600',
\ 'darkorange3' : '#CD6600',
\ 'darkorange4' : '#8B4500',
\ 'darkorchid' : '#9932CC',
\ 'darkorchid1' : '#BF3EFF',
\ 'darkorchid2' : '#B23AEE',
\ 'darkorchid3' : '#9A32CD',
\ 'darkorchid4' : '#68228B',
\ 'darkred' : '#8B0000',
\ 'darksalmon' : '#E9967A',
\ 'darkseagreen' : '#8FBC8F',
\ 'darkseagreen1' : '#C1FFC1',
\ 'darkseagreen2' : '#B4EEB4',
\ 'darkseagreen3' : '#9BCD9B',
\ 'darkseagreen4' : '#698B69',
\ 'darkslateblue' : '#483D8B',
\ 'darkslategray' : '#2F4F4F',
\ 'darkslategray1' : '#97FFFF',
\ 'darkslategray2' : '#8DEEEE',
\ 'darkslategray3' : '#79CDCD',
\ 'darkslategray4' : '#528B8B',
\ 'darkslategrey' : '#2F4F4F',
\ 'darkturquoise' : '#00CED1',
\ 'darkviolet' : '#9400D3',
\ 'darkyellow' : '#BBBB00',
\ 'deep pink' : '#FF1493',
\ 'deep sky blue' : '#00BFFF',
\ 'deeppink' : '#FF1493',
\ 'deeppink1' : '#FF1493',
\ 'deeppink2' : '#EE1289',
\ 'deeppink3' : '#CD1076',
\ 'deeppink4' : '#8B0A50',
\ 'deepskyblue' : '#00BFFF',
\ 'deepskyblue1' : '#00BFFF',
\ 'deepskyblue2' : '#00B2EE',
\ 'deepskyblue3' : '#009ACD',
\ 'deepskyblue4' : '#00688B',
\ 'dim gray' : '#696969',
\ 'dim grey' : '#696969',
\ 'dimgray' : '#696969',
\ 'dimgrey' : '#696969',
\ 'dodger blue' : '#1E90FF',
\ 'dodgerblue' : '#1E90FF',
\ 'dodgerblue1' : '#1E90FF',
\ 'dodgerblue2' : '#1C86EE',
\ 'dodgerblue3' : '#1874CD',
\ 'dodgerblue4' : '#104E8B',
\ 'firebrick' : '#B22222',
\ 'firebrick1' : '#FF3030',
\ 'firebrick2' : '#EE2C2C',
\ 'firebrick3' : '#CD2626',
\ 'firebrick4' : '#8B1A1A',
\ 'floral white' : '#FFFAF0',
\ 'floralwhite' : '#FFFAF0',
\ 'forest green' : '#228B22',
\ 'forestgreen' : '#228B22',
\ 'gainsboro' : '#DCDCDC',
\ 'ghost white' : '#F8F8FF',
\ 'ghostwhite' : '#F8F8FF',
\ 'gold' : '#FFD700',
\ 'gold1' : '#FFD700',
\ 'gold2' : '#EEC900',
\ 'gold3' : '#CDAD00',
\ 'gold4' : '#8B7500',
\ 'goldenrod' : '#DAA520',
\ 'goldenrod1' : '#FFC125',
\ 'goldenrod2' : '#EEB422',
\ 'goldenrod3' : '#CD9B1D',
\ 'goldenrod4' : '#8B6914',
\ 'gray' : '#BEBEBE',
\ 'gray0' : '#000000',
\ 'gray1' : '#030303',
\ 'gray10' : '#1A1A1A',
\ 'gray100' : '#FFFFFF',
\ 'gray11' : '#1C1C1C',
\ 'gray12' : '#1F1F1F',
\ 'gray13' : '#212121',
\ 'gray14' : '#242424',
\ 'gray15' : '#262626',
\ 'gray16' : '#292929',
\ 'gray17' : '#2B2B2B',
\ 'gray18' : '#2E2E2E',
\ 'gray19' : '#303030',
\ 'gray2' : '#050505',
\ 'gray20' : '#333333',
\ 'gray21' : '#363636',
\ 'gray22' : '#383838',
\ 'gray23' : '#3B3B3B',
\ 'gray24' : '#3D3D3D',
\ 'gray25' : '#404040',
\ 'gray26' : '#424242',
\ 'gray27' : '#454545',
\ 'gray28' : '#474747',
\ 'gray29' : '#4A4A4A',
\ 'gray3' : '#080808',
\ 'gray30' : '#4D4D4D',
\ 'gray31' : '#4F4F4F',
\ 'gray32' : '#525252',
\ 'gray33' : '#545454',
\ 'gray34' : '#575757',
\ 'gray35' : '#595959',
\ 'gray36' : '#5C5C5C',
\ 'gray37' : '#5E5E5E',
\ 'gray38' : '#616161',
\ 'gray39' : '#636363',
\ 'gray4' : '#0A0A0A',
\ 'gray40' : '#666666',
\ 'gray41' : '#696969',
\ 'gray42' : '#6B6B6B',
\ 'gray43' : '#6E6E6E',
\ 'gray44' : '#707070',
\ 'gray45' : '#737373',
\ 'gray46' : '#757575',
\ 'gray47' : '#787878',
\ 'gray48' : '#7A7A7A',
\ 'gray49' : '#7D7D7D',
\ 'gray5' : '#0D0D0D',
\ 'gray50' : '#7F7F7F',
\ 'gray51' : '#828282',
\ 'gray52' : '#858585',
\ 'gray53' : '#878787',
\ 'gray54' : '#8A8A8A',
\ 'gray55' : '#8C8C8C',
\ 'gray56' : '#8F8F8F',
\ 'gray57' : '#919191',
\ 'gray58' : '#949494',
\ 'gray59' : '#969696',
\ 'gray6' : '#0F0F0F',
\ 'gray60' : '#999999',
\ 'gray61' : '#9C9C9C',
\ 'gray62' : '#9E9E9E',
\ 'gray63' : '#A1A1A1',
\ 'gray64' : '#A3A3A3',
\ 'gray65' : '#A6A6A6',
\ 'gray66' : '#A8A8A8',
\ 'gray67' : '#ABABAB',
\ 'gray68' : '#ADADAD',
\ 'gray69' : '#B0B0B0',
\ 'gray7' : '#121212',
\ 'gray70' : '#B3B3B3',
\ 'gray71' : '#B5B5B5',
\ 'gray72' : '#B8B8B8',
\ 'gray73' : '#BABABA',
\ 'gray74' : '#BDBDBD',
\ 'gray75' : '#BFBFBF',
\ 'gray76' : '#C2C2C2',
\ 'gray77' : '#C4C4C4',
\ 'gray78' : '#C7C7C7',
\ 'gray79' : '#C9C9C9',
\ 'gray8' : '#141414',
\ 'gray80' : '#CCCCCC',
\ 'gray81' : '#CFCFCF',
\ 'gray82' : '#D1D1D1',
\ 'gray83' : '#D4D4D4',
\ 'gray84' : '#D6D6D6',
\ 'gray85' : '#D9D9D9',
\ 'gray86' : '#DBDBDB',
\ 'gray87' : '#DEDEDE',
\ 'gray88' : '#E0E0E0',
\ 'gray89' : '#E3E3E3',
\ 'gray9' : '#171717',
\ 'gray90' : '#E5E5E5',
\ 'gray91' : '#E8E8E8',
\ 'gray92' : '#EBEBEB',
\ 'gray93' : '#EDEDED',
\ 'gray94' : '#F0F0F0',
\ 'gray95' : '#F2F2F2',
\ 'gray96' : '#F5F5F5',
\ 'gray97' : '#F7F7F7',
\ 'gray98' : '#FAFAFA',
\ 'gray99' : '#FCFCFC',
\ 'green yellow' : '#ADFF2F',
\ 'green' : '#00FF00',
\ 'green1' : '#00FF00',
\ 'green2' : '#00EE00',
\ 'green3' : '#00CD00',
\ 'green4' : '#008B00',
\ 'greenyellow' : '#ADFF2F',
\ 'grey' : '#BEBEBE',
\ 'grey0' : '#000000',
\ 'grey1' : '#030303',
\ 'grey10' : '#1A1A1A',
\ 'grey100' : '#FFFFFF',
\ 'grey11' : '#1C1C1C',
\ 'grey12' : '#1F1F1F',
\ 'grey13' : '#212121',
\ 'grey14' : '#242424',
\ 'grey15' : '#262626',
\ 'grey16' : '#292929',
\ 'grey17' : '#2B2B2B',
\ 'grey18' : '#2E2E2E',
\ 'grey19' : '#303030',
\ 'grey2' : '#050505',
\ 'grey20' : '#333333',
\ 'grey21' : '#363636',
\ 'grey22' : '#383838',
\ 'grey23' : '#3B3B3B',
\ 'grey24' : '#3D3D3D',
\ 'grey25' : '#404040',
\ 'grey26' : '#424242',
\ 'grey27' : '#454545',
\ 'grey28' : '#474747',
\ 'grey29' : '#4A4A4A',
\ 'grey3' : '#080808',
\ 'grey30' : '#4D4D4D',
\ 'grey31' : '#4F4F4F',
\ 'grey32' : '#525252',
\ 'grey33' : '#545454',
\ 'grey34' : '#575757',
\ 'grey35' : '#595959',
\ 'grey36' : '#5C5C5C',
\ 'grey37' : '#5E5E5E',
\ 'grey38' : '#616161',
\ 'grey39' : '#636363',
\ 'grey4' : '#0A0A0A',
\ 'grey40' : '#666666',
\ 'grey41' : '#696969',
\ 'grey42' : '#6B6B6B',
\ 'grey43' : '#6E6E6E',
\ 'grey44' : '#707070',
\ 'grey45' : '#737373',
\ 'grey46' : '#757575',
\ 'grey47' : '#787878',
\ 'grey48' : '#7A7A7A',
\ 'grey49' : '#7D7D7D',
\ 'grey5' : '#0D0D0D',
\ 'grey50' : '#7F7F7F',
\ 'grey51' : '#828282',
\ 'grey52' : '#858585',
\ 'grey53' : '#878787',
\ 'grey54' : '#8A8A8A',
\ 'grey55' : '#8C8C8C',
\ 'grey56' : '#8F8F8F',
\ 'grey57' : '#919191',
\ 'grey58' : '#949494',
\ 'grey59' : '#969696',
\ 'grey6' : '#0F0F0F',
\ 'grey60' : '#999999',
\ 'grey61' : '#9C9C9C',
\ 'grey62' : '#9E9E9E',
\ 'grey63' : '#A1A1A1',
\ 'grey64' : '#A3A3A3',
\ 'grey65' : '#A6A6A6',
\ 'grey66' : '#A8A8A8',
\ 'grey67' : '#ABABAB',
\ 'grey68' : '#ADADAD',
\ 'grey69' : '#B0B0B0',
\ 'grey7' : '#121212',
\ 'grey70' : '#B3B3B3',
\ 'grey71' : '#B5B5B5',
\ 'grey72' : '#B8B8B8',
\ 'grey73' : '#BABABA',
\ 'grey74' : '#BDBDBD',
\ 'grey75' : '#BFBFBF',
\ 'grey76' : '#C2C2C2',
\ 'grey77' : '#C4C4C4',
\ 'grey78' : '#C7C7C7',
\ 'grey79' : '#C9C9C9',
\ 'grey8' : '#141414',
\ 'grey80' : '#CCCCCC',
\ 'grey81' : '#CFCFCF',
\ 'grey82' : '#D1D1D1',
\ 'grey83' : '#D4D4D4',
\ 'grey84' : '#D6D6D6',
\ 'grey85' : '#D9D9D9',
\ 'grey86' : '#DBDBDB',
\ 'grey87' : '#DEDEDE',
\ 'grey88' : '#E0E0E0',
\ 'grey89' : '#E3E3E3',
\ 'grey9' : '#171717',
\ 'grey90' : '#E5E5E5',
\ 'grey91' : '#E8E8E8',
\ 'grey92' : '#EBEBEB',
\ 'grey93' : '#EDEDED',
\ 'grey94' : '#F0F0F0',
\ 'grey95' : '#F2F2F2',
\ 'grey96' : '#F5F5F5',
\ 'grey97' : '#F7F7F7',
\ 'grey98' : '#FAFAFA',
\ 'grey99' : '#FCFCFC',
\ 'honeydew' : '#F0FFF0',
\ 'honeydew1' : '#F0FFF0',
\ 'honeydew2' : '#E0EEE0',
\ 'honeydew3' : '#C1CDC1',
\ 'honeydew4' : '#838B83',
\ 'hot pink' : '#FF69B4',
\ 'hotpink' : '#FF69B4',
\ 'hotpink1' : '#FF6EB4',
\ 'hotpink2' : '#EE6AA7',
\ 'hotpink3' : '#CD6090',
\ 'hotpink4' : '#8B3A62',
\ 'indian red' : '#CD5C5C',
\ 'indianred' : '#CD5C5C',
\ 'indianred1' : '#FF6A6A',
\ 'indianred2' : '#EE6363',
\ 'indianred3' : '#CD5555',
\ 'indianred4' : '#8B3A3A',
\ 'ivory' : '#FFFFF0',
\ 'ivory1' : '#FFFFF0',
\ 'ivory2' : '#EEEEE0',
\ 'ivory3' : '#CDCDC1',
\ 'ivory4' : '#8B8B83',
\ 'khaki' : '#F0E68C',
\ 'khaki1' : '#FFF68F',
\ 'khaki2' : '#EEE685',
\ 'khaki3' : '#CDC673',
\ 'khaki4' : '#8B864E',
\ 'lavender blush' : '#FFF0F5',
\ 'lavender' : '#E6E6FA',
\ 'lavenderblush' : '#FFF0F5',
\ 'lavenderblush1' : '#FFF0F5',
\ 'lavenderblush2' : '#EEE0E5',
\ 'lavenderblush3' : '#CDC1C5',
\ 'lavenderblush4' : '#8B8386',
\ 'lawn green' : '#7CFC00',
\ 'lawngreen' : '#7CFC00',
\ 'lemon chiffon' : '#FFFACD',
\ 'lemonchiffon' : '#FFFACD',
\ 'lemonchiffon1' : '#FFFACD',
\ 'lemonchiffon2' : '#EEE9BF',
\ 'lemonchiffon3' : '#CDC9A5',
\ 'lemonchiffon4' : '#8B8970',
\ 'light blue' : '#ADD8E6',
\ 'light coral' : '#F08080',
\ 'light cyan' : '#E0FFFF',
\ 'light goldenrod yellow' : '#FAFAD2',
\ 'light goldenrod' : '#EEDD82',
\ 'light gray' : '#D3D3D3',
\ 'light green' : '#90EE90',
\ 'light grey' : '#D3D3D3',
\ 'light magenta' : '#FFBBFF',
\ 'light pink' : '#FFB6C1',
\ 'light red' : '#FFBBBB',
\ 'light salmon' : '#FFA07A',
\ 'light sea green' : '#20B2AA',
\ 'light sky blue' : '#87CEFA',
\ 'light slate blue' : '#8470FF',
\ 'light slate gray' : '#778899',
\ 'light slate grey' : '#778899',
\ 'light steel blue' : '#B0C4DE',
\ 'light yellow' : '#FFFFE0',
\ 'lightblue' : '#ADD8E6',
\ 'lightblue1' : '#BFEFFF',
\ 'lightblue2' : '#B2DFEE',
\ 'lightblue3' : '#9AC0CD',
\ 'lightblue4' : '#68838B',
\ 'lightcoral' : '#F08080',
\ 'lightcyan' : '#E0FFFF',
\ 'lightcyan1' : '#E0FFFF',
\ 'lightcyan2' : '#D1EEEE',
\ 'lightcyan3' : '#B4CDCD',
\ 'lightcyan4' : '#7A8B8B',
\ 'lightgoldenrod' : '#EEDD82',
\ 'lightgoldenrod1' : '#FFEC8B',
\ 'lightgoldenrod2' : '#EEDC82',
\ 'lightgoldenrod3' : '#CDBE70',
\ 'lightgoldenrod4' : '#8B814C',
\ 'lightgoldenrodyellow' : '#FAFAD2',
\ 'lightgray' : '#D3D3D3',
\ 'lightgreen' : '#90EE90',
\ 'lightgrey' : '#D3D3D3',
\ 'lightmagenta' : '#FFBBFF',
\ 'lightpink' : '#FFB6C1',
\ 'lightpink1' : '#FFAEB9',
\ 'lightpink2' : '#EEA2AD',
\ 'lightpink3' : '#CD8C95',
\ 'lightpink4' : '#8B5F65',
\ 'lightred' : '#FFBBBB',
\ 'lightsalmon' : '#FFA07A',
\ 'lightsalmon1' : '#FFA07A',
\ 'lightsalmon2' : '#EE9572',
\ 'lightsalmon3' : '#CD8162',
\ 'lightsalmon4' : '#8B5742',
\ 'lightseagreen' : '#20B2AA',
\ 'lightskyblue' : '#87CEFA',
\ 'lightskyblue1' : '#B0E2FF',
\ 'lightskyblue2' : '#A4D3EE',
\ 'lightskyblue3' : '#8DB6CD',
\ 'lightskyblue4' : '#607B8B',
\ 'lightslateblue' : '#8470FF',
\ 'lightslategray' : '#778899',
\ 'lightslategrey' : '#778899',
\ 'lightsteelblue' : '#B0C4DE',
\ 'lightsteelblue1' : '#CAE1FF',
\ 'lightsteelblue2' : '#BCD2EE',
\ 'lightsteelblue3' : '#A2B5CD',
\ 'lightsteelblue4' : '#6E7B8B',
\ 'lightyellow' : '#FFFFE0',
\ 'lightyellow1' : '#FFFFE0',
\ 'lightyellow2' : '#EEEED1',
\ 'lightyellow3' : '#CDCDB4',
\ 'lightyellow4' : '#8B8B7A',
\ 'lime green' : '#32CD32',
\ 'limegreen' : '#32CD32',
\ 'linen' : '#FAF0E6',
\ 'magenta' : '#FF00FF',
\ 'magenta1' : '#FF00FF',
\ 'magenta2' : '#EE00EE',
\ 'magenta3' : '#CD00CD',
\ 'magenta4' : '#8B008B',
\ 'maroon' : '#B03060',
\ 'maroon1' : '#FF34B3',
\ 'maroon2' : '#EE30A7',
\ 'maroon3' : '#CD2990',
\ 'maroon4' : '#8B1C62',
\ 'medium aquamarine' : '#66CDAA',
\ 'medium blue' : '#0000CD',
\ 'medium orchid' : '#BA55D3',
\ 'medium purple' : '#9370DB',
\ 'medium sea green' : '#3CB371',
\ 'medium slate blue' : '#7B68EE',
\ 'medium spring green' : '#00FA9A',
\ 'medium turquoise' : '#48D1CC',
\ 'medium violet red' : '#C71585',
\ 'mediumaquamarine' : '#66CDAA',
\ 'mediumblue' : '#0000CD',
\ 'mediumorchid' : '#BA55D3',
\ 'mediumorchid1' : '#E066FF',
\ 'mediumorchid2' : '#D15FEE',
\ 'mediumorchid3' : '#B452CD',
\ 'mediumorchid4' : '#7A378B',
\ 'mediumpurple' : '#9370DB',
\ 'mediumpurple1' : '#AB82FF',
\ 'mediumpurple2' : '#9F79EE',
\ 'mediumpurple3' : '#8968CD',
\ 'mediumpurple4' : '#5D478B',
\ 'mediumseagreen' : '#3CB371',
\ 'mediumslateblue' : '#7B68EE',
\ 'mediumspringgreen' : '#00FA9A',
\ 'mediumturquoise' : '#48D1CC',
\ 'mediumvioletred' : '#C71585',
\ 'midnight blue' : '#191970',
\ 'midnightblue' : '#191970',
\ 'mint cream' : '#F5FFFA',
\ 'mintcream' : '#F5FFFA',
\ 'misty rose' : '#FFE4E1',
\ 'mistyrose' : '#FFE4E1',
\ 'mistyrose1' : '#FFE4E1',
\ 'mistyrose2' : '#EED5D2',
\ 'mistyrose3' : '#CDB7B5',
\ 'mistyrose4' : '#8B7D7B',
\ 'moccasin' : '#FFE4B5',
\ 'navajo white' : '#FFDEAD',
\ 'navajowhite' : '#FFDEAD',
\ 'navajowhite1' : '#FFDEAD',
\ 'navajowhite2' : '#EECFA1',
\ 'navajowhite3' : '#CDB38B',
\ 'navajowhite4' : '#8B795E',
\ 'navy blue' : '#000080',
\ 'navy' : '#000080',
\ 'navyblue' : '#000080',
\ 'old lace' : '#FDF5E6',
\ 'oldlace' : '#FDF5E6',
\ 'olive drab' : '#6B8E23',
\ 'olivedrab' : '#6B8E23',
\ 'olivedrab1' : '#C0FF3E',
\ 'olivedrab2' : '#B3EE3A',
\ 'olivedrab3' : '#9ACD32',
\ 'olivedrab4' : '#698B22',
\ 'orange red' : '#FF4500',
\ 'orange' : '#FFA500',
\ 'orange1' : '#FFA500',
\ 'orange2' : '#EE9A00',
\ 'orange3' : '#CD8500',
\ 'orange4' : '#8B5A00',
\ 'orangered' : '#FF4500',
\ 'orangered1' : '#FF4500',
\ 'orangered2' : '#EE4000',
\ 'orangered3' : '#CD3700',
\ 'orangered4' : '#8B2500',
\ 'orchid' : '#DA70D6',
\ 'orchid1' : '#FF83FA',
\ 'orchid2' : '#EE7AE9',
\ 'orchid3' : '#CD69C9',
\ 'orchid4' : '#8B4789',
\ 'pale goldenrod' : '#EEE8AA',
\ 'pale green' : '#98FB98',
\ 'pale turquoise' : '#AFEEEE',
\ 'pale violet red' : '#DB7093',
\ 'palegoldenrod' : '#EEE8AA',
\ 'palegreen' : '#98FB98',
\ 'palegreen1' : '#9AFF9A',
\ 'palegreen2' : '#90EE90',
\ 'palegreen3' : '#7CCD7C',
\ 'palegreen4' : '#548B54',
\ 'paleturquoise' : '#AFEEEE',
\ 'paleturquoise1' : '#BBFFFF',
\ 'paleturquoise2' : '#AEEEEE',
\ 'paleturquoise3' : '#96CDCD',
\ 'paleturquoise4' : '#668B8B',
\ 'palevioletred' : '#DB7093',
\ 'palevioletred1' : '#FF82AB',
\ 'palevioletred2' : '#EE799F',
\ 'palevioletred3' : '#CD6889',
\ 'palevioletred4' : '#8B475D',
\ 'papaya whip' : '#FFEFD5',
\ 'papayawhip' : '#FFEFD5',
\ 'peach puff' : '#FFDAB9',
\ 'peachpuff' : '#FFDAB9',
\ 'peachpuff1' : '#FFDAB9',
\ 'peachpuff2' : '#EECBAD',
\ 'peachpuff3' : '#CDAF95',
\ 'peachpuff4' : '#8B7765',
\ 'peru' : '#CD853F',
\ 'pink' : '#FFC0CB',
\ 'pink1' : '#FFB5C5',
\ 'pink2' : '#EEA9B8',
\ 'pink3' : '#CD919E',
\ 'pink4' : '#8B636C',
\ 'plum' : '#DDA0DD',
\ 'plum1' : '#FFBBFF',
\ 'plum2' : '#EEAEEE',
\ 'plum3' : '#CD96CD',
\ 'plum4' : '#8B668B',
\ 'powder blue' : '#B0E0E6',
\ 'powderblue' : '#B0E0E6',
\ 'purple' : '#A020F0',
\ 'purple1' : '#9B30FF',
\ 'purple2' : '#912CEE',
\ 'purple3' : '#7D26CD',
\ 'purple4' : '#551A8B',
\ 'red' : '#FF0000',
\ 'red1' : '#FF0000',
\ 'red2' : '#EE0000',
\ 'red3' : '#CD0000',
\ 'red4' : '#8B0000',
\ 'rosy brown' : '#BC8F8F',
\ 'rosybrown' : '#BC8F8F',
\ 'rosybrown1' : '#FFC1C1',
\ 'rosybrown2' : '#EEB4B4',
\ 'rosybrown3' : '#CD9B9B',
\ 'rosybrown4' : '#8B6969',
\ 'royal blue' : '#4169E1',
\ 'royalblue' : '#4169E1',
\ 'royalblue1' : '#4876FF',
\ 'royalblue2' : '#436EEE',
\ 'royalblue3' : '#3A5FCD',
\ 'royalblue4' : '#27408B',
\ 'saddle brown' : '#8B4513',
\ 'saddlebrown' : '#8B4513',
\ 'salmon' : '#FA8072',
\ 'salmon1' : '#FF8C69',
\ 'salmon2' : '#EE8262',
\ 'salmon3' : '#CD7054',
\ 'salmon4' : '#8B4C39',
\ 'sandy brown' : '#F4A460',
\ 'sandybrown' : '#F4A460',
\ 'sea green' : '#2E8B57',
\ 'seagreen' : '#2E8B57',
\ 'seagreen1' : '#54FF9F',
\ 'seagreen2' : '#4EEE94',
\ 'seagreen3' : '#43CD80',
\ 'seagreen4' : '#2E8B57',
\ 'seashell' : '#FFF5EE',
\ 'seashell1' : '#FFF5EE',
\ 'seashell2' : '#EEE5DE',
\ 'seashell3' : '#CDC5BF',
\ 'seashell4' : '#8B8682',
\ 'sienna' : '#A0522D',
\ 'sienna1' : '#FF8247',
\ 'sienna2' : '#EE7942',
\ 'sienna3' : '#CD6839',
\ 'sienna4' : '#8B4726',
\ 'sky blue' : '#87CEEB',
\ 'skyblue' : '#87CEEB',
\ 'skyblue1' : '#87CEFF',
\ 'skyblue2' : '#7EC0EE',
\ 'skyblue3' : '#6CA6CD',
\ 'skyblue4' : '#4A708B',
\ 'slate blue' : '#6A5ACD',
\ 'slate gray' : '#708090',
\ 'slate grey' : '#708090',
\ 'slateblue' : '#6A5ACD',
\ 'slateblue1' : '#836FFF',
\ 'slateblue2' : '#7A67EE',
\ 'slateblue3' : '#6959CD',
\ 'slateblue4' : '#473C8B',
\ 'slategray' : '#708090',
\ 'slategray1' : '#C6E2FF',
\ 'slategray2' : '#B9D3EE',
\ 'slategray3' : '#9FB6CD',
\ 'slategray4' : '#6C7B8B',
\ 'slategrey' : '#708090',
\ 'snow' : '#FFFAFA',
\ 'snow1' : '#FFFAFA',
\ 'snow2' : '#EEE9E9',
\ 'snow3' : '#CDC9C9',
\ 'snow4' : '#8B8989',
\ 'spring green' : '#00FF7F',
\ 'springgreen' : '#00FF7F',
\ 'springgreen1' : '#00FF7F',
\ 'springgreen2' : '#00EE76',
\ 'springgreen3' : '#00CD66',
\ 'springgreen4' : '#008B45',
\ 'steel blue' : '#4682B4',
\ 'steelblue' : '#4682B4',
\ 'steelblue1' : '#63B8FF',
\ 'steelblue2' : '#5CACEE',
\ 'steelblue3' : '#4F94CD',
\ 'steelblue4' : '#36648B',
\ 'tan' : '#D2B48C',
\ 'tan1' : '#FFA54F',
\ 'tan2' : '#EE9A49',
\ 'tan3' : '#CD853F',
\ 'tan4' : '#8B5A2B',
\ 'thistle' : '#D8BFD8',
\ 'thistle1' : '#FFE1FF',
\ 'thistle2' : '#EED2EE',
\ 'thistle3' : '#CDB5CD',
\ 'thistle4' : '#8B7B8B',
\ 'tomato' : '#FF6347',
\ 'tomato1' : '#FF6347',
\ 'tomato2' : '#EE5C42',
\ 'tomato3' : '#CD4F39',
\ 'tomato4' : '#8B3626',
\ 'turquoise' : '#40E0D0',
\ 'turquoise1' : '#00F5FF',
\ 'turquoise2' : '#00E5EE',
\ 'turquoise3' : '#00C5CD',
\ 'turquoise4' : '#00868B',
\ 'violet red' : '#D02090',
\ 'violet' : '#EE82EE',
\ 'violetred' : '#D02090',
\ 'violetred1' : '#FF3E96',
\ 'violetred2' : '#EE3A8C',
\ 'violetred3' : '#CD3278',
\ 'violetred4' : '#8B2252',
\ 'wheat' : '#F5DEB3',
\ 'wheat1' : '#FFE7BA',
\ 'wheat2' : '#EED8AE',
\ 'wheat3' : '#CDBA96',
\ 'wheat4' : '#8B7E66',
\ 'white smoke' : '#F5F5F5',
\ 'white' : '#FFFFFF',
\ 'whitesmoke' : '#F5F5F5',
\ 'yellow green' : '#9ACD32',
\ 'yellow' : '#FFFF00',
\ 'yellow1' : '#FFFF00',
\ 'yellow2' : '#EEEE00',
\ 'yellow3' : '#CDCD00',
\ 'yellow4' : '#8B8B00',
\ 'yellowgreen' : '#9ACD32',
\}
if has_key(l:color_list, l:color_name)
let l:hex_code = l:color_list[l:color_name]
endif
return l:hex_code
endfunction

View file

@ -0,0 +1,286 @@
" Author: Nate Kane <nathanaelkane AT gmail DOT com>
" Homepage: http://github.com/nathanaelkane/vim-indent-guides
"
" Toggles the indent guides on and off.
"
function! indent_guides#toggle()
call indent_guides#init_matches()
if empty(w:indent_guides_matches)
call indent_guides#enable()
else
call indent_guides#disable()
endif
endfunction
"
" Called from autocmds, keeps indent guides enabled or disabled when entering
" other buffers and windows.
"
function! indent_guides#process_autocmds()
if g:indent_guides_autocmds_enabled
call indent_guides#enable()
else
call indent_guides#disable()
end
endfunction
"
" Enables the indent guides for the current buffer and any other buffer upon
" entering it.
"
function! indent_guides#enable()
let g:indent_guides_autocmds_enabled = 1
if &diff || indent_guides#exclude_filetype()
call indent_guides#clear_matches()
return
end
call indent_guides#init_script_vars()
call indent_guides#highlight_colors()
call indent_guides#clear_matches()
" loop through each indent level and define a highlight pattern
" will automagically figure out whether to use tabs or spaces
for l:level in range(s:start_level, s:indent_levels)
let l:group = 'IndentGuides' . ((l:level % 2 == 0) ? 'Even' : 'Odd')
let l:column_start = (l:level - 1) * s:indent_size + 1
" define the higlight patterns and add to matches list
if g:indent_guides_space_guides
let l:soft_pattern = indent_guides#indent_highlight_pattern(g:indent_guides_soft_pattern, l:column_start, s:guide_size)
call add(w:indent_guides_matches, matchadd(l:group, l:soft_pattern))
end
if g:indent_guides_tab_guides
let l:hard_pattern = indent_guides#indent_highlight_pattern('\t', l:column_start, s:indent_size)
call add(w:indent_guides_matches, matchadd(l:group, l:hard_pattern))
end
endfor
endfunction
"
" Disables the indent guides for the current buffer and any other buffer upon
" entering it.
"
function! indent_guides#disable()
let g:indent_guides_autocmds_enabled = 0
call indent_guides#clear_matches()
endfunction
"
" Clear all highlight matches for the current window.
"
function! indent_guides#clear_matches()
call indent_guides#init_matches()
if !empty(w:indent_guides_matches)
let l:index = 0
for l:match_id in w:indent_guides_matches
try
call matchdelete(l:match_id)
catch /E803:/
" Do nothing
endtry
call remove(w:indent_guides_matches, l:index)
let l:index += l:index
endfor
endif
endfunction
"
" Automagically calculates and defines the indent highlight colors.
"
function! indent_guides#highlight_colors()
if s:auto_colors
if has('gui_running') || has('nvim')
call indent_guides#gui_highlight_colors()
else
call indent_guides#basic_highlight_colors()
endif
endif
endfunction
"
" Defines some basic indent highlight colors that work for Terminal Vim and
" gVim when colors can't be automatically calculated.
"
function! indent_guides#basic_highlight_colors()
let l:cterm_colors = (&g:background == 'dark') ? ['darkgrey', 'black'] : ['lightgrey', 'white']
let l:gui_colors = (&g:background == 'dark') ? ['grey15', 'grey30'] : ['grey70', 'grey85']
exe 'hi IndentGuidesEven guibg=' . l:gui_colors[0] . ' guifg=' . l:gui_colors[1] . ' ctermbg=' . l:cterm_colors[0] . ' ctermfg=' . l:cterm_colors[1]
exe 'hi IndentGuidesOdd guibg=' . l:gui_colors[1] . ' guifg=' . l:gui_colors[0] . ' ctermbg=' . l:cterm_colors[1] . ' ctermfg=' . l:cterm_colors[0]
endfunction
"
" Automagically calculates and defines the indent highlight colors for gui
" vim.
"
function! indent_guides#gui_highlight_colors()
let l:hi_normal_guibg = ''
" capture the backgroud color from the normal highlight
if s:hi_normal =~ s:color_hex_bg_pat
" hex color code is being used, eg. '#FFFFFF'
let l:hi_normal_guibg = matchstr(s:hi_normal, s:color_hex_bg_pat)
elseif s:hi_normal =~ s:color_name_bg_pat
" color name is being used, eg. 'white'
let l:color_name = matchstr(s:hi_normal, s:color_name_bg_pat)
let l:hi_normal_guibg = color_helper#color_name_to_hex(l:color_name)
else
" background color could not be detected, default to basic colors
call indent_guides#basic_highlight_colors()
endif
if l:hi_normal_guibg =~ s:color_hex_pat
" calculate the highlight background colors
let l:hi_odd_bg = indent_guides#lighten_or_darken_color(l:hi_normal_guibg)
let l:hi_even_bg = indent_guides#lighten_or_darken_color(l:hi_odd_bg)
" define the new highlights
exe 'hi IndentGuidesOdd guibg=' . l:hi_odd_bg . ' guifg=' . l:hi_even_bg
exe 'hi IndentGuidesEven guibg=' . l:hi_even_bg . ' guifg=' . l:hi_odd_bg
end
endfunction
"
" Takes a color and darkens or lightens it depending on whether a dark or light
" colorscheme is being used.
"
function! indent_guides#lighten_or_darken_color(color)
let l:new_color = ''
if (&g:background == 'dark')
let l:new_color = color_helper#hex_color_lighten(a:color, s:change_percent)
else
let l:new_color = color_helper#hex_color_darken (a:color, s:change_percent)
endif
return l:new_color
endfunction
"
" Define default highlights.
"
function! indent_guides#define_default_highlights()
hi default clear IndentGuidesOdd
hi default clear IndentGuidesEven
endfunction
"
" Init the w:indent_guides_matches variable.
"
function! indent_guides#init_matches()
let w:indent_guides_matches = exists('w:indent_guides_matches') ? w:indent_guides_matches : []
endfunction
"
" We need to initialize these vars every time a buffer is entered while the
" plugin is enabled.
"
function! indent_guides#init_script_vars()
if &l:shiftwidth > 0 && &l:expandtab
let s:indent_size = &l:shiftwidth
else
let s:indent_size = &l:tabstop
endif
let s:guide_size = indent_guides#calculate_guide_size()
let s:hi_normal = indent_guides#capture_highlight('Normal')
" remove 'font=<value>' from the s:hi_normal string (only seems to happen on Vim startup in Windows)
let s:hi_normal = substitute(s:hi_normal, ' font=[A-Za-z0-9:]\+', "", "")
" shortcuts to the global variables - this makes the code easier to read
let s:debug = g:indent_guides_debug
let s:indent_levels = g:indent_guides_indent_levels
let s:auto_colors = g:indent_guides_auto_colors
let s:color_hex_pat = g:indent_guides_color_hex_pattern
let s:color_hex_bg_pat = g:indent_guides_color_hex_guibg_pattern
let s:color_name_bg_pat = g:indent_guides_color_name_guibg_pattern
let s:start_level = g:indent_guides_start_level
" str2float not available in vim versions <= 7.1
if has('float')
let s:change_percent = g:indent_guides_color_change_percent / str2float('100.0')
else
let s:change_percent = g:indent_guides_color_change_percent / 100.0
endif
if s:debug
echo 's:indent_size = ' . s:indent_size
echo 's:guide_size = ' . s:guide_size
echo 's:hi_normal = ' . s:hi_normal
echo 's:indent_levels = ' . s:indent_levels
echo 's:auto_colors = ' . s:auto_colors
echo 's:change_percent = ' . string(s:change_percent)
echo 's:color_hex_pat = ' . s:color_hex_pat
echo 's:color_hex_bg_pat = ' . s:color_hex_bg_pat
echo 's:color_name_bg_pat = ' . s:color_name_bg_pat
echo 's:start_level = ' . s:start_level
endif
endfunction
"
" Calculate the indent guide size. Ensures the guide size is less than or
" equal to the actual indent size, otherwise some weird things can occur.
"
" NOTE: Currently, this only works when soft-tabs are being used.
"
function! indent_guides#calculate_guide_size()
let l:guide_size = g:indent_guides_guide_size
if l:guide_size == 0 || l:guide_size > s:indent_size
let l:guide_size = s:indent_size
endif
return l:guide_size
endfunction
"
" Captures and returns the output of highlight group definitions.
"
" Example: indent_guides#capture_highlight('normal')
" Returns: 'Normal xxx guifg=#323232 guibg=#ffffff'
"
function! indent_guides#capture_highlight(group_name)
redir => l:output
exe "silent hi " . a:group_name
redir END
let l:output = substitute(l:output, "\n", "", "")
return l:output
endfunction
"
" Returns a regex pattern for highlighting an indent level.
"
" Example: indent_guides#indent_highlight_pattern(' ', 1, 4)
" Returns: /^ *\%1v\zs *\%5v\ze/
"
" Example: indent_guides#indent_highlight_pattern('\s', 5, 2)
" Returns: /^\s*\%5v\zs\s*\%7v\ze/
"
" Example: indent_guides#indent_highlight_pattern('\t', 9, 2)
" Returns: /^\t*\%9v\zs\t*\%11v\ze/
"
function! indent_guides#indent_highlight_pattern(indent_pattern, column_start, indent_size)
let l:pattern = '^' . a:indent_pattern . '*\%' . a:column_start . 'v\zs'
let l:pattern .= a:indent_pattern . '*\%' . (a:column_start + a:indent_size) . 'v'
let l:pattern .= '\ze'
return l:pattern
endfunction
"
" Detect if any of the buffer filetypes should be excluded.
"
function! indent_guides#exclude_filetype()
for ft in split(&ft, '\.')
if index(g:indent_guides_exclude_filetypes, ft) > -1
return 1
end
endfor
return 0
endfunction

View file

@ -0,0 +1,351 @@
*indent_guides.txt* A plugin for visually displaying indent levels in Vim.
*indent-guides*
____ __ __ ______ _ __
/ _/____ ____/ /___ ____ / /_ / ____/__ __(_)____/ /___ _____
/ / / __ \/ __ // _ \/ __ \/ __/ / / __ / / / / // __ // _ \/ ___/
_/ / / / / / /_/ // __/ / / / /_ / /_/ // /_/ / // /_/ // __(__ )
/___//_/ /_/\__,_/ \___/_/ /_/\__/ \____/ \__,_/_/ \__,_/ \___/____/
Author: Nate Kane <nathanaelkane AT gmail DOT com>
Version: 1.7
Last Change: 07 Mar 2013
==============================================================================
CONTENTS *indent-guides-contents*
1. Introduction.......................... |indent-guides-introduction|
2. Commands.............................. |indent-guides-commands|
3. Options............................... |indent-guides-options|
4. Mappings.............................. |indent-guides-mappings|
5. Terminal Vim.......................... |indent-guides-terminal-vim|
6. About................................. |indent-guides-about|
7. Changelog............................. |indent-guides-changelog|
8. License............................... |indent-guides-license|
==============================================================================
1. INTRODUCTION *indent-guides-introduction*
Indent Guides is a plugin for visually displaying indent levels in Vim.
This plugin should work with gVim out of the box, no configuration needed.
Features:~
* Can detect both tab and space indent styles.
* Automatically inspects your colorscheme and picks appropriate colors (gVim
only).
* Will highlight indent levels with alternating colors.
* Full support for gVim and basic support for Terminal Vim.
* Seems to work on Windows gVim 7.3 (haven't done any extensive tests
though).
* Customizable size for indent guides, eg. skinny guides (soft-tabs only).
* Customizable start indent level.
* Highlight support for files with a mixture of tab and space indent styles.
==============================================================================
2. COMMANDS *indent-guides-commands*
------------------------------------------------------------------------------
:IndentGuidesToggle *:IndentGuidesToggle*
Toggles the indent guides on and off.
------------------------------------------------------------------------------
:IndentGuidesEnable *:IndentGuidesEnable*
Enables the indent guides for the current buffer and any other buffer upon
entering it.
------------------------------------------------------------------------------
:IndentGuidesDisable *:IndentGuidesDisable*
Disables the indent guides for the current buffer and any other buffer upon
entering it.
==============================================================================
3. OPTIONS *indent-guides-options*
------------------------------------------------------------------------------
*'indent_guides_indent_levels'*
Use this option to control how many indent levels to display guides for.
Default: 30. Values: integer.
>
let g:indent_guides_indent_levels = 30
<
------------------------------------------------------------------------------
*'indent_guides_auto_colors'*
Use this option to control whether or not the plugin automatically calculates
the highlight colors. Will use the current colorscheme's background color as a
base color.
Default: 1. Values: 0 or 1.
>
let g:indent_guides_auto_colors = 1
<
If you set this option to 0, be sure to manually define some highlight colors
in an autocmd.
>
let g:indent_guides_auto_colors = 0
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd guibg=red ctermbg=3
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=green ctermbg=4
<
Alternatively you can add the following lines to your colorscheme file.
>
hi IndentGuidesOdd guibg=red ctermbg=3
hi IndentGuidesEven guibg=green ctermbg=4
<
------------------------------------------------------------------------------
*'indent_guides_color_change_percent'*
Use this option to control the percent at which the highlight colors will be
lightened or darkened.
Default: 10 (10%). Values: between 0 and 100.
>
let g:indent_guides_color_change_percent = 10
<
------------------------------------------------------------------------------
*'indent_guides_guide_size'*
Use this option to customize the size of the indent guide. By default the
value is set to 0, which will set the guide size to be the same as the
|shiftwidth|. Setting this value to be larger than the |shiftwidth| is essentially
the same as setting it to 0.
A common use of this setting is to create skinny indent guides, which look
great with a |shiftwidth| of 4 or more.
NOTE: This option only works for soft-tabs (spaces) and not hard-tabs.
Default: 0. Values: between 0 and |shiftwidth|.
>
let g:indent_guides_guide_size = 1
<
------------------------------------------------------------------------------
*'indent_guides_start_level'*
Use this option to control which indent level to start showing guides from.
Default: 1. Values: between 1 and g:|indent_guides_indent_levels|.
>
let g:indent_guides_start_level = 2
<
------------------------------------------------------------------------------
*'indent_guides_space_guides'*
Use this option to control whether the plugin considers spaces as indention.
Default: 1. Values: 0 or 1.
>
let g:indent_guides_space_guides = 0
<
------------------------------------------------------------------------------
*'indent_guides_tab_guides'*
Use this option to control whether the plugin considers tabs as indention.
Default: 1. Values: 0 or 1.
>
let g:indent_guides_tab_guides = 0
<
------------------------------------------------------------------------------
*'indent_guides_soft_pattern'*
Use this option to explicitly specify a pattern for soft indentation. For
example to match spaces only in the beginning of line use ' ' pattern.
Default: '\s'. Values: Vim regexp.
>
let g:indent_guides_soft_pattern = ' '
<
------------------------------------------------------------------------------
*'indent_guides_enable_on_vim_startup'*
Use this option to control whether the plugin is enabled on Vim startup.
Default: 0. Values: 0 or 1.
>
let g:indent_guides_enable_on_vim_startup = 0
<
------------------------------------------------------------------------------
*'indent_guides_exclude_filetypes'*
Use this option to specify a list of filetypes to disable the plugin for.
Default: ['help']. Values: list of strings.
>
let g:indent_guides_exclude_filetypes = ['help', 'nerdtree']
<
------------------------------------------------------------------------------
*'indent_guides_default_mapping'*
Use this option to control whether the default mapping (<Leader>ig) gets set.
Default: 1. Values: 0 or 1.
>
let g:indent_guides_default_mapping = 0
<
==============================================================================
4. MAPPINGS *indent-guides-mappings*
The default mapping for toggling indent guides is <Leader>ig. You can easily
map it to other keys. For example:
>
:nmap <silent> <Leader>ig <Plug>IndentGuidesToggle
<
You can also map some other commands that are not mapped by default. For
example:
>
:nmap <silent> <Leader>ie <Plug>IndentGuidesEnable
:nmap <silent> <Leader>id <Plug>IndentGuidesDisable
<
==============================================================================
5. TERMINAL VIM *indent-guides-terminal-vim*
At the moment Terminal Vim only has basic support. This means is that colors
won't be automatically calculated based on your colorscheme. Instead, some
preset colors are used depending on whether `background` is set to `dark` or
`light`.
When `set background=dark` is used, the following highlight colors will be
defined:
>
hi IndentGuidesOdd ctermbg=black
hi IndentGuidesEven ctermbg=darkgrey
<
Alternatively, when `set background=light` is used, the following highlight
colors will be defined:
>
hi IndentGuidesOdd ctermbg=white
hi IndentGuidesEven ctermbg=lightgrey
<
If for some reason it's incorrectly defining light highlight colors instead of
dark ones or vice versa, the first thing you should check is that the
`background` value is being set correctly for your colorscheme. Sometimes it's
best to manually set the `background` value in your `.vimrc`, for example:
>
colorscheme desert256
set background=dark
<
Alternatively you can manually setup the highlight colors yourself, see
|indent_guides_auto_colors| for an example.
==============================================================================
6. ABOUT *indent-guides-about*
Why did I build this plugin?~
* I believe indent guides make nested code easier to read and understand.
* Other editors have them and it's high time Vim did.
* None of the existing indent guide plugins on the market suited my needs.
* I wanted to learn me some VimL.
Links:~
* Github: https://github.com/nathanaelkane/vim-indent-guides
* Bugs & Issues: https://github.com/nathanaelkane/vim-indent-guides/issues
Credits:~
* Matt Wozniski (godlygeek) for letting me use the list of color names and
hex codes from his CSApprox plugin.
Contact:~
* Twitter: @nathanaelkane
* Email: <nathanaelkane AT gmail DOT com>
Bug reports, feedback, suggestions etc are welcomed.
==============================================================================
7. CHANGELOG *indent-guides-changelog*
1.8 (pending release)~
* Added option g:|indent_guides_soft_pattern| to control the pattern for
soft indentation (thanks @sergey-vlasov).
* Added option g:|indent_guides_default_mapping| to control whether the
default mapping (<Leader>ig) gets set (thanks @suy).
* Set size of indent guide to `tabstop` value when `shiftwidth=0` or
`noexpandtab` is used (thanks @darkfeline and @wilywampa).
* Don't load plugin in unsupported versions of Vim (thanks @dersaidin).
* Added option g:|indent_guides_tab_guides| to control whether tabs are
considered as indention (thanks @amerlyq).
1.7~
* Added way to override the default mapping (thanks @xuhdev).
* Added option g:|indent_guides_exclude_filetypes| to specify a list of
filetypes to disable the plugin for.
* Disable the plugin when in a diff.
* Various bug fixes.
1.6~
* Added option g:|indent_guides_space_guides| to control whether spaces are
considered as indention (thanks @scoz).
* Added 'doc/tags' to gitignore (thanks @lenniboy).
* Fixed E803 ID not found spam (thanks @mutewinter).
* Fixed str2float issue with Vim 7.1 (thanks @acx0).
1.5~
* Added highlight support for files with a mixture of tab and space indent
styles (thanks @graywh).
* Added -bar to all the :commands so they can chain with other :commands
(thanks @graywh).
* No longer overriding pre-defined custom highlight colors (thanks @graywh).
* Using str2float to work around a float bug in some versions of Vim 7.2
(thanks @voidus).
1.4~
* Added the new plugin option g:|indent_guides_enable_on_vim_startup|.
* Improved Windows support.
1.3~
* Changed the default value of g:|indent_guides_color_change_percent| to 10.
* Added support for gVim themes that don't specify a `hi Normal guibg`
color.
1.2~
* Customizable size for indent guides, eg. skinny guides (soft-tabs only).