Jacky Liu's Blog

用来演示 gvim 预定义颜色项的脚本

    ---- 原来贴在 vim-cn 群里的一个脚本,这里也贴一下。

 

 

    ---- gvim 有好几百种预定义的颜色名称,比如 'DarkBlue', 'LightRed' 之类。这个脚本用来展示这些颜色在你的 gvim 里看起来如何。

    ---- 纯 VimScript 写的。用 gvim 打开脚本,然后
       
        :source %
   
    就可以了。

    ---- 会开启一个叫 'ShowVimColors.tmp' 的临时 buffer 用作显示,是 “纯” buffer 没有磁盘文件。内容分两部分,前一部分展示颜色本身,后一部分展示与黑白两色的搭配效果。自己定义语法项要分配颜色的时候,可以用作参考。

    ---- 如果想搞 DIY 自己配色,记得 依云 在她的 blog 里写过一个 gvim 调色板,在 这里。也可以自己先写出来,比如 '#aabbcc',加进这个脚本里再运行一遍就能看见效果。

 

"========================================================================================================================
"=======	ShowVimColors.vim
"========================================================================================================================
"=======	作者:Jacky Liu
"=======	bluegene8210@gmail.com
"========================================================================================================================

" 网上找到的 Vim 里的预定义颜色
let	s:VimColors=[
\	'Snow',			'GhostWhite',		'WhiteSmoke',		'Gainsboro',		'FloralWhite',		'OldLace',		'Linen',
\	'AntiqueWhite',		'PapayaWhip',		'BlanchedAlmond',	'Bisque',		'PeachPuff',		'NavajoWhite',		'Azure',
\	'Moccasin',		'Cornsilk',		'Ivory',		'LemonChiffon',		'Seashell',		'Honeydew',		'MintCream',
\	'AliceBlue',		'Lavender',		'LavenderBlush',	'MistyRose',		'White',		'Black',		'DarkSlateGray',
\	'DimGray',		'SlateGray',		'LightSlateGray',	'Gray',			'LightGray',		'MidnightBlue',		'Navy',
\	'NavyBlue',		'CornflowerBlue',	'DarkSlateBlue',	'SlateBlue',		'MediumSlateBlue',
\	'LightSlateBlue',	'MediumBlue',		'RoyalBlue',		'Blue',			'DodgerBlue',		'DeepSkyBlue',
\	'SkyBlue',		'LightSkyBlue',		'SteelBlue',		'LightSteelBlue',	'LightBlue',		'PowderBlue',
\	'PaleTurquoise',	'DarkTurquoise',	'MediumTurquoise',	'Turquoise',		'Cyan',			'LightCyan',
\	'CadetBlue',		'MediumAquamarine',	'Aquamarine',		'DarkGreen',		'DarkOliveGreen',
\	'DarkSeaGreen',		'SeaGreen',		'MediumSeaGreen',	'LightSeaGreen',	'PaleGreen',
\	'SpringGreen',		'LawnGreen',		'Green',		'Chartreuse',		'MediumSpringGreen',	'GreenYellow',
\	'LimeGreen',		'YellowGreen',		'ForestGreen',		'OliveDrab',		'DarkKhaki',		'Khaki',
\	'PaleGoldenrod',	'LightGoldenrodYellow',	'LightYellow',		'Yellow',		'Gold',
\	'LightGoldenrod',	'Goldenrod',		'DarkGoldenrod',	'RosyBrown',		'IndianRed',		'SaddleBrown',
\	'Sienna',		'Peru',			'Burlywood',		'Beige',		'Wheat',		'SandyBrown',		'Tan',			'Chocolate',		'Firebrick',
\	'Brown',		'DarkSalmon',		'Salmon',		'LightSalmon',		'Orange',		'DarkOrange',		'Coral',		'LightCoral',
\	'Tomato',		'OrangeRed',		'Red',			'HotPink',		'DeepPink',		'Pink',			'LightPink',		'PaleVioletRed',
\	'Maroon',		'MediumVioletRed',	'VioletRed',		'Magenta',		'Violet',		'Plum',			'Orchid',
\	'MediumOrchid',		'DarkOrchid',		'DarkViolet',		'BlueViolet',		'Purple',		'MediumPurple',
\	'Thistle',		'Snow1',		'Snow2',		'Snow3',		'Snow4',		'Seashell1',		'Seashell2',		'Seashell3',
\	'Seashell4',		'AntiqueWhite1',	'AntiqueWhite2',	'AntiqueWhite3',	'AntiqueWhite4',
\	'Bisque1',		'Bisque2',		'Bisque3',		'Bisque4',		'PeachPuff1',		'PeachPuff2',		'PeachPuff3',
\	'PeachPuff4',		'NavajoWhite1',		'NavajoWhite2',		'NavajoWhite3',		'NavajoWhite4',
\	'LemonChiffon1',	'LemonChiffon2',	'LemonChiffon3',	'LemonChiffon4',	'Cornsilk1',
\	'Cornsilk2',		'Cornsilk3',		'Cornsilk4',		'Ivory1',		'Ivory2',		'Ivory3',		'Ivory4',		'Honeydew1',
\	'Honeydew2',		'Honeydew3',		'Honeydew4',		'LavenderBlush1',	'LavenderBlush2',
\	'LavenderBlush3',	'LavenderBlush4',	'MistyRose1',		'MistyRose2',		'MistyRose3',
\	'MistyRose4',		'Azure1',		'Azure2',		'Azure3',		'Azure4',		'SlateBlue1',		'SlateBlue2',
\	'SlateBlue3',		'SlateBlue4',		'RoyalBlue1',		'RoyalBlue2',		'RoyalBlue3',		'RoyalBlue4',
\	'Blue1',		'Blue2',		'Blue3',		'Blue4',		'DodgerBlue1',		'DodgerBlue2',		'DodgerBlue3',
\	'DodgerBlue4',		'SteelBlue1',		'SteelBlue2',		'SteelBlue3',		'SteelBlue4',		'DeepSkyBlue1',
\	'DeepSkyBlue2',		'DeepSkyBlue3',		'DeepSkyBlue4',		'SkyBlue1',		'SkyBlue2',		'SkyBlue3',
\	'SkyBlue4',		'LightSkyBlue1',	'LightSkyBlue2',	'LightSkyBlue3',	'LightSkyBlue4',
\	'SlateGray1',		'SlateGray2',		'SlateGray3',		'SlateGray4',		'LightSteelBlue1',
\	'LightSteelBlue2',	'LightSteelBlue3',	'LightSteelBlue4',	'LightBlue1',		'LightBlue2',
\	'LightBlue3',		'LightBlue4',		'LightCyan1',		'LightCyan2',		'LightCyan3',		'LightCyan4',
\	'PaleTurquoise1',	'PaleTurquoise2',	'PaleTurquoise3',	'PaleTurquoise4',	'CadetBlue1',
\	'CadetBlue2',		'CadetBlue3',		'CadetBlue4',		'Turquoise1',		'Turquoise2',		'Turquoise3',
\	'Turquoise4',		'Cyan1',		'Cyan2',		'Cyan3',		'Cyan4',		'DarkSlateGray1',	'DarkSlateGray2',
\	'DarkSlateGray3',	'DarkSlateGray4',	'Aquamarine1',		'Aquamarine2',		'Aquamarine3',
\	'Aquamarine4',		'DarkSeaGreen1',	'DarkSeaGreen2',	'DarkSeaGreen3',	'DarkSeaGreen4',
\	'SeaGreen1',		'SeaGreen2',		'SeaGreen3',		'SeaGreen4',		'PaleGreen1',		'PaleGreen2',
\	'PaleGreen3',		'PaleGreen4',		'SpringGreen1',		'SpringGreen2',		'SpringGreen3',
\	'SpringGreen4',		'Green1',		'Green2',		'Green3',		'Green4',		'Chartreuse1',		'Chartreuse2',
\	'Chartreuse3',		'Chartreuse4',		'OliveDrab1',		'OliveDrab2',		'OliveDrab3',		'OliveDrab4',
\	'DarkOliveGreen1',	'DarkOliveGreen2',	'DarkOliveGreen3',	'DarkOliveGreen4',	'Khaki1',
\	'Khaki2',		'Khaki3',		'Khaki4',		'LightGoldenrod1',	'LightGoldenrod2',	'LightGoldenrod3',
\	'LightGoldenrod4',	'LightYellow1',		'LightYellow2',		'LightYellow3',		'LightYellow4',
\	'Yellow1',		'Yellow2',		'Yellow3',		'Yellow4',		'Gold1',		'Gold2',		'Gold3',		'Gold4',		'Goldenrod1',
\	'Goldenrod2',		'Goldenrod3',		'Goldenrod4',		'DarkGoldenrod1',	'DarkGoldenrod2',
\	'DarkGoldenrod3',	'DarkGoldenrod4',	'RosyBrown1',		'RosyBrown2',		'RosyBrown3',
\	'RosyBrown4',		'IndianRed1',		'IndianRed2',		'IndianRed3',		'IndianRed4',		'Sienna1',		'Sienna2',
\	'Sienna3',		'Sienna4',		'Burlywood1',		'Burlywood2',		'Burlywood3',		'Burlywood4',		'Wheat1',
\	'Wheat2',		'Wheat3',		'Wheat4',		'Tan1',			'Tan2',			'Tan3',			'Tan4',			'Chocolate1',		'Chocolate2',
\	'Chocolate3',		'Chocolate4',		'Firebrick1',		'Firebrick2',		'Firebrick3',		'Firebrick4',
\	'Brown1',		'Brown2',		'Brown3',		'Brown4',		'Salmon1',		'Salmon2',		'Salmon3',		'Salmon4',
\	'LightSalmon1',		'LightSalmon2',		'LightSalmon3',		'LightSalmon4',		'Orange1',		'Orange2',
\	'Orange3',		'Orange4',		'DarkOrange1',		'DarkOrange2',		'DarkOrange3',		'DarkOrange4',		'Coral1',
\	'Coral2',		'Coral3',		'Coral4',		'Tomato1',		'Tomato2',		'Tomato3',		'Tomato4',		'OrangeRed1',
\	'OrangeRed2',		'OrangeRed3',		'OrangeRed4',		'Red1',			'Red2',			'Red3',			'Red4',			'DeepPink1',
\	'DeepPink2',		'DeepPink3',		'DeepPink4',		'HotPink1',		'HotPink2',		'HotPink3',		'HotPink4',
\	'Pink1',		'Pink2',		'Pink3',		'Pink4',		'LightPink1',		'LightPink2',		'LightPink3',		'LightPink4',
\	'PaleVioletRed1',	'PaleVioletRed2',	'PaleVioletRed3',	'PaleVioletRed4',	'Maroon1',
\	'Maroon2',		'Maroon3',		'Maroon4',		'VioletRed1',		'VioletRed2',		'VioletRed3',		'VioletRed4',
\	'Magenta1',		'Magenta2',		'Magenta3',		'Magenta4',		'Orchid1',		'Orchid2',		'Orchid3',		'Orchid4',
\	'Plum1',		'Plum2',		'Plum3',		'Plum4',		'MediumOrchid1',	'MediumOrchid2',	'MediumOrchid3',
\	'MediumOrchid4',	'DarkOrchid1',		'DarkOrchid2',		'DarkOrchid3',		'DarkOrchid4',		'Purple1',
\	'Purple2',		'Purple3',		'Purple4',		'MediumPurple1',	'MediumPurple2',	'MediumPurple3',
\	'MediumPurple4',	'Thistle1',		'Thistle2',		'Thistle3',		'Thistle4',
\	'DarkCyan',		'DarkMagenta',		'DarkRed',		'LightGreen',
\	'#132b4a',		'#233b5a',		'#005c70',		'#031b4a',		'#d0d0e0',
\	'NONE']



let s:statements= []	" 用来定义 syntax group 以及调用 matchadd() 的 VimScript 语句。
let s:filelines= []	" 加到临时 buffer 内的内容

call add(s:filelines, '输出的第一部分,展示颜色本身')
call add(s:filelines, '')

for vcolor in s:VimColors
	call add(s:filelines, vcolor . repeat(' ', 160-len(vcolor)))
	
	if vcolor =~ '^#' | let vcname= vcolor[1:] | else | let vcname= vcolor | endif
	
	"	syntax group container
	"======================================================================================================================
	let sgcontname= vcname . '_cont'
	call add(s:statements, 'syntax match ' . sgcontname . ' /^' . vcolor . '\> *$/')

	"	指定主体,默认背景
	"======================================================================================================================
	let fghigrpname= '_' . vcname . '_' . 'NONE'			" hi group name (as frontground)
	call add(s:statements, 'hi ' . fghigrpname . ' guifg=' . vcolor . ' guibg=' . 'NONE')	" 定义 hi group
	let fgsyngrpname= 'sgrp_' . fghigrpname				" syntax group name (as frontground)
	call add(s:statements, 'syntax match ' . fgsyngrpname . ' /^' . vcolor . '\>/ containedin=' . sgcontname . ' contained')	" 定义 syntax group
	call add(s:statements, 'hi link '. fgsyngrpname . ' ' . fghigrpname)	" syntax group 与 hi group 联系起来

	"	默认主体,指定背景
	"======================================================================================================================
	let bghigrpname= '_' . 'NONE' . '_' . vcname			" hi group name (as background)
	call add(s:statements, 'hi ' . bghigrpname . ' guifg=' . 'NONE' . ' guibg=' . vcolor)	" 定义 hi group
	let bgsyngrpname= 'sgrp_' . bghigrpname				" syntax group name (as background)
	call add(s:statements, 'syntax match ' . bgsyngrpname . ' / \+/' . ' containedin=' . sgcontname . ' contained')	" 同上
	call add(s:statements, 'hi link '. bgsyngrpname . ' ' . bghigrpname)	" 同上
	
endfor

call add(s:filelines, '')
call add(s:filelines, '输出的第二部分,展示作为主体色或作为背景色与黑白两色的搭配效果')
call add(s:filelines, '')

for vcolor in s:VimColors

	if vcolor =~ '^#' | let vcname= vcolor[1:] | else | let vcname= vcolor | endif

	"	指定主体,黑色背景
	"======================================================================================================================
	let gname_1= '_' . vcname . '_' . 'Black'						" syntax group name
	call add(s:statements, 'hi	' . gname_1 . '	guifg=' . vcolor . '	guibg=' . 'Black')	" 定义语句
	
	let skwname= 'skw_' . gname_1
	call add(s:statements, 'syntax keyword ' . skwname . ' ' . gname_1)
	call add(s:statements, 'hi link ' . skwname . ' ' . gname_1)

	"	黑色主体,指定背景
	"======================================================================================================================
	let gname_2= '_' . 'Black' . '_' . vcname						" syntax group name
	call add(s:statements, 'hi	' . gname_2 . '	guifg=' . 'Black' . '	guibg=' . vcolor)	" 定义语句
	
	let skwname= 'skw_' . gname_2
	call add(s:statements, 'syntax keyword ' . skwname . ' ' . gname_2)
	call add(s:statements, 'hi link ' . skwname . ' ' . gname_2)

	"	指定主体,白色背景
	"======================================================================================================================
	let gname_3= '_' . vcname . '_' . 'White'						" syntax group name
	call add(s:statements, 'hi	' . gname_3 . '	guifg=' . vcolor . '	guibg=' . 'White')	" 定义语句
	
	let skwname= 'skw_' . gname_3
	call add(s:statements, 'syntax keyword ' . skwname . ' ' . gname_3)
	call add(s:statements, 'hi link ' . skwname . ' ' . gname_3)

	"	白色主体,指定背景
	"======================================================================================================================
	let gname_4= '_' . 'White' . '_' . vcname						" syntax group name
	call add(s:statements, 'hi	' . gname_4 . '	guifg=' . 'White' . '	guibg=' . vcolor)	" 定义语句
	
	let skwname= 'skw_' . gname_4
	call add(s:statements, 'syntax keyword ' . skwname . ' ' . gname_4)
	call add(s:statements, 'hi link ' . skwname . ' ' . gname_4)

	"	buffer 新加入一行
	"======================================================================================================================
	let newline=	gname_1 . repeat(' ', 30-len(gname_1)) .
	\		gname_2 . repeat(' ', 30-len(gname_2)) .
	\		gname_3 . repeat(' ', 30-len(gname_3)) . gname_4
	call add(s:filelines, newline)

endfor



tabedit ShowVimColors.tmp	" 开启临时 buffer
setlocal buftype=nofile		" 设置 buffer 属性
call append(0, s:filelines)	" 加入内容

for stat in s:statements	" “上色”
	exe stat
endfor

"	autocmd BufWinLeave ShowVimColors.tmp	call clearmatches()	" 走之前清掉。不然 Vim 会一直很慢



 

怎样让 Vim 帮助你阅读和理解文档

Vim 是一款高效的文本编辑器,许多人对它强大的编辑功能都有体会,而实际上 Vim 能做的不仅仅是编辑,它还能使原本枯燥的文档变得“鲜活”起来:
 

 

这个图显示了 gvim 对普通的 txt 文本的显示效果,内容是 Python 的帮助文件。里面的颜色,缩进和标题是阅读时根据自己的理解随手加上去的。在 vim 里进行这些编辑操作并不麻烦,甚至比较享受。最为关键的是,一切都由自己控制,文档像这样读过一遍以后,就会印象比较深,而且只读一遍就好,以后回头找起来,因为有先前的注释在,就会非常快。我发现这样对于快速地掌握文档的内容特别有用。所以,现在我最喜欢的文档格式不是 pdf 或 html,而是 txt。

    看一下背后所用到的特性: 实际上也不复杂,就是些 Vim 的基本特性:

    首先是颜色。Vim 支持多少种颜色? 对 GUI 版来说,是 256 x 256 x 256 种,这跟 html 的颜色特性是完全一样的,包括颜色的定义方式。比如 #000000 代表纯黑,#ffffff 代表纯白,等等。(建议不要拿纯白或者其它很亮的颜色当背景色,看久了眼睛受不了)。实际当然用不到这么多,就在几个主要色系里面选些典型的就好了。颜色选定了以后就可以跟格式结合起来,定义成一些语法项,用在平时的文档里面。这个主要在 Vim 的文档 "syntax.txt" 里有讲。下面是我自己定义的一些语法项,主要用于一般的文档:
 

    接下来需要用到的特性是自定义按键。因为时常需要添加一些自己定义的格式字符,所以最好把这些操作映射到一些快捷键上。比如在 Visual 模式下选中一段感兴趣的文本,再按一两个键,就能给它加上格式/颜色,这样的操作用起来感觉很爽。

    如果想要更高级些的功能,那就需要了解更复杂的特性了: Vim Script。在第一个图中,左侧的窗口里加载的是 CustomTextIndexer 功能模块,这是用 Vim Script 写的一个插件,用来提取主窗口内的标题形成文档目录,并且具有简单的跳转功能。实际上背后的操作主要是文本匹配和字符串处理 ———— 都是 Vim 的本职工作,平时使用时也经常碰到。

 




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee