⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pattern.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 3 页
字号:
	{not in Vi} {not available when compiled without the +syntax feature}						*/\%^* *start-of-file*\%^	匹配文件头。当用于一个字符串时,匹配字符串起始处。{not in Vi}	例如,要查找一个文件中首次出现 "VIM" 的地方: >		/\%^\_.\{-}\zsVIM<						*/\%$* *end-of-file*\%$	匹配文件尾。当用于一个字符串时,匹配字符串结束处。{not in Vi}	Note 下面的模式不匹配文件中的最后一个 "VIM": >		/VIM\_.\{-}\%$<	它会找到下一个 VIM,因为其后的部分总会匹配。这个才能匹配文件	中的最后一个 "VIM": >		/VIM\ze\(\(VIM\)\@!\_.\)*\%$<	这使用了 |/\@!| 来确定在第一 "VIM" 之后无法再次匹配 "VIM"。	从文件尾部向前搜索会容易些!						*/\%#* *cursor-position*\%#	匹配光标位置。仅对显示于窗口内的缓冲有效。{not in Vi}	警 告: 如果使用了该模式之后光标被移动,结果会成为无效的。Vim 不会自动的	更新匹配。这对语法高亮和 'hlsearch' 有更大的关系。换言之: 在光标移动时	显示并不因此而更新。Vim 只更新改动的行 (整行被更新) 或用户使用 |CTRL-L|	命令时 (整个屏幕被更新)。例如,要高亮显示光标下的单词: >		/\k*\%#\k*<	当设定了 'hlsearch' 时,你移动光标并作更改就能清楚的看到更新的情况。						*/\%l* */\%>l* */\%<l*\%23l	在一个指定的行内进行匹配。\%<23l	在一个指定的行上方进行匹配。\%>23l	在一个指定的行下方进行匹配。	这三个可以被用来匹配缓冲内的特定行。"23" 可以是任何行号。第一行为 1。	{not in Vi}	警告:当插入和删除行时 Vim 不会自动更新匹配。这意味着语法加亮会出错。	例如,要高亮显示光标所在行: >		:exe '/\%' . line(".") . 'l.*'<	当 'hlsearch' 被设定时,你的移动会很清楚的被显示 (仅当匹配被更新时)						*/\%c* */\%>c* */\%<c*\%23c	在一个指定的列内进行匹配。\%<23c	在一个指定的列前进行匹配。\%>23c	在一个指定的列后进行匹配。	这三个可以被用来匹配缓冲内的特定列。"23" 可以是任何列号。第一列为 1。	事实上,列以字节计算 (因此对多字节字符来说是不准确的)。 {not in Vi}	警 告:当插入和删除字符时 Vim 并不自动更新匹配。这意味着语法高亮很	快就不正确了。	例如,要高亮显示光标所在列: >		:exe '/\%' . col(".") . 'c'<	当 'hlsearch' 被设定时,你的移动会很清楚的被显示 (仅当匹配被更新时)						*/\%v* */\%>v* */\%<v*\%23v	匹配指定虚拟列。\%<23v	匹配指定虚拟列之前。\%>23v	匹配指定虚拟列之后。	这三个可以被用来匹配缓冲或字符串中指定的虚拟列。当匹配一个不在窗口内	的缓冲时,当前窗口的选项值将被使用 (如, 'tabstop')。 "23" 可以是任何	列号。第一列为 1。	Note 默写虚拟列位置永远无法被匹配,因为它们被包含在一个制表符或者其它	占用超过一个屏幕字符的特殊字符。{not in Vi}	警 告: 当删除和插入字符时 Vim 不会自动更新匹配。这意味着语法高亮很快	就变得不对了。	例如,要高亮显示所有位于虚拟第 72 列的字符: >		/\%>72v.*<	当设定了 'hlsearch' 选项时,如果你移动光标并做一些改动,更新的情况就	会清楚的被显示了。	要匹配直到第 17 列的文本: >		/.*\%17v<	第 17 没有被包括,因为那是 "\%17v" 匹配的地方,而这是一个零宽度	|/zero-width| 匹配,第 17 列没有被包括在匹配之中。这个也一样: >		/.*\%<18v<字符类: {not in Vi}\i	标识符字符 (见 'isident' 选项)			*/\i*\I	像 "\i",但不包括数字字符			*/\I*\k	关键字字符 (见 'iskeyword' 选项)		*/\k*\K	像 "\k",但不包括数字字符			*/\K*\f	文件名字符 (见 'isfname' 选项)			*/\f*\F	像 "\f",但不包括数字字符			*/\F*\p	可打印字符 (见 'isprint' 选项)			*/\p*\P	像 "\p",但不包括数字字符			*/\P*NOTE: 上面也作用于多字节字符。下面的只匹配 ASCII 字符。						*whitespace* *white-space*\s	空白字符; <Space> 和 <Tab>			*/\s*\S	非空白字符:\s 之反				*/\S*\d	数字:				[0-9]		*/\d*\D	非数字:			[^0-9]			*/\D*\x	十六进制数字:			[0-9A-Fa-f]	*/\x*\X	非十六进制字符:			[^0-9A-Fa-f]	*/\X*\o	八进制字符:			[0-7]		*/\o*\O	非八进制字符:		[^0-7]			*/\O*\w	单词字符:			[0-9A-Za-z_]	*/\w*\W	非单词字符:		[^0-9A-Za-z_]		*/\W*\h	单词首字符:		[A-Za-z_]		*/\h*\H	非单词首字符:	[^A-Za-z_]			*/\H*\a	英文字母字符:		[A-Za-z]		*/\a*\A	非英文字母字符:	[^A-Za-z]			*/\A*\l	小写字符:		[a-z]			*/\l*\L	非小写字符:	[^a-z]				*/\L*\u	大写字符:		[A-Z]			*/\u*\U	非大写字符		[^A-Z]			*/\U*	NOTE: 使用匹配原比使用 [] 形式要快。	NOTE: 'ignorecase', "\c" 和 "\C" 不能和字符类一起使用。							*/\_* *E63*\_x	其中 x 可以是以上任意一个字符:包括行尾的字符类(字符类结束)\e	匹配 <Esc>					*/\e*\t	匹配 <Tab>					*/\t*\r	匹配 <CR>					*/\r*\b	匹配 <BS>					*/\b*\n	匹配行尾					*/\n*	当对一个字符串而不是缓冲进行匹配时,匹配一个本意的换行字符。~	匹配上次给出的替换字串	*/~* */\~*\(\)	一个由转意的括号括起来的模式。		*/\(* */\(\)* */\)*	例:"\(^a\)" 匹配行首的 'a'。  *E51* *E54* *E55*\1      匹配第一个子表达式匹配的字串		*/\1* *E65*	{not in Vi}	例如: "\([a-z]\).\1" 匹配 "ata", "ehe", "tot", 等.\2      象 "\1",但使用第二子表达式,		*/\2*   ...							*/\3*\9      象 "\1", 但使用第三子表达式。		*/\9*	Note: 各组的标号是基于那一个 "\(" 先出现 (自左至右),而非那一个先匹配。\%(\)	一个由转意的括号括起来的模式。		*/\%(\)* */\%(* *E53*	类似 \(\),但不算作一个子表达式。这样做允许使用更多的组,并且处理时会	稍快些。	{not in Vi}x	一个没有特殊含义的单个字符,匹配其自身。							*/\* */\\*\x	一个反斜杠带一个没有特殊含义的单个字符,保留做将来的扩展。[]	('nomagic' 情况下: \[])		*/[]* */\[]* */\_[]* */collection*\_[]	一个集合。一组由方括号括起来的字符。匹配集合中的任意一个单一字符。	例		匹配 ~	[xyz]		任意 'x', 'y' 或 'z'	[a-zA-Z]$	行尾的任意一个字母字符	\c[a-z]$	同上	如果在集合前加上 "\_" 的话,该模式也将匹配行尾。也可以在集合里加上	"\n"。行尾也将被以 "^" 开始的模式所匹配。因此 "\_[^ab]" 将匹配行尾	以及任意非 "a" 或 "b" 的字符。这使其与 Vi 兼容:没有 "\_" 或 "\n"	时,集合不匹配行尾。	如果集合以 "^" 开始,它匹配任意 不在 集合内的字符:"[^xyz]" 匹配任何	不是 'x', 'y' 和 'z' 的字符。	- 如果集合中的两个字符被以 '-' 隔开,表示它们之间的所有 ASCII 字符。	  例如, "[0-9]" 匹配任何十进制数位。	- 一个字符类表达式被解释为该字符类代表的字符集合。Vim 支持以下字符类:			  名		内容 ~*[:alnum:]*		  [:alnum:]     字母和数字*[:alpha:]*		  [:alpha:]     字母*[:blank:]*		  [:blank:]     空格和制表字符*[:cntrl:]*		  [:cntrl:]     控制字符*[:digit:]*		  [:digit:]     十进制数位*[:graph:]*		  [:graph:]     可打印字符(不包括空格)*[:lower:]*		  [:lower:]     小写字母 (使用 'ignorecase' 时					代表所有字母)*[:print:]*		  [:print:]     可打印字符(包括空格)*[:punct:]*		  [:punct:]     标点字符*[:space:]*		  [:space:]     空白字符*[:upper:]*		  [:upper:]     大写字母 (使用 'ignorecase' 时					代表所有字母)*[:xdigit:]*		  [:xdigit:]    十六进制数位*[:return:]*		  [:return:]	字符 <CR>*[:tab:]*		  [:tab:]	字符 <Tab>*[:escape:]*		  [:escape:]	字符 <Esc>*[:backspace:]*		  [:backspace:]	字符 <BS>	  字符类表达式中的方括号是对于一个集合的补充。例如,下面的模式是一个	  UNIX 文件名: "[-./[:alnum:]_~]\+"。即, 一组至少有一个字符的字符列表。	  其中每一个必是 '-', '.', '/', 字母字符, 数字, '_' 或 '~'。	  这些项仅对 8 位字符有效。							  */\]*	- 要包括字符 ']', '^', '-' 或 '\' 在集合之内,只需在该字符前加上反斜杠:	  "[xyz\]]", "[\^xyz]", "[xy\-z]" 和 "[xyz\\]"。	  (Note: POSIX 不支持这种反斜杠的用法。)。对于 ']' 你也可以将其作为第一	  个字符 (前面可以使用 "^"): "[]xyz]" 或 "[^]xyz]" {not in Vi}.	  对于 '-' 你也可以将其作为第一个或最后一个字符: "[-xyz]", "[^-xyz]"	  或 "[xyz-]"。对于 '\' 你也可以将其放置在任意不在 "^]-\bertn" 之内的字	  符:"[\xyz]" 匹配 '\', 'x', 'y' 及 'z'。但是用 "\\" 好些,因为将来的	  扩展可能会在 '\' 之后使用其它字符。	- 当 'cpoptions' 中不包括 'l' 标志时,以下转换是可用的 {not in Vi}:		\e	<Esc>		\t	<Tab>		\r	<CR>	(不是行尾!)		\b	<BS>	  NOTE: 上面提到的这些额外的转化码不能用在方括号 [] 之内!	- 用集合来匹配可能会很慢。因为每个字符都要和集合中的每一个字符作比较。	  尽可能使用上面提到的匹配原。例如:同样是匹配数字,"\d" 要比 "[0-9]"	  快的多。						*/\%[]* *E69* *E70* *E369*\%[]	一个可选的匹配原列表。这个总能匹配。它尽可能匹配包含的匹配原。因此会在	第一个不匹配的地方终止。例如: >		/r\%[ead]<	匹配 "r", "re", "rea" 或者 "read"。最长可能的匹配被采用。下面例子可以	用来匹配 Ex 命令 "function",其中 "fu" 是必须的而 "nction" 是可选的: >		/\<fu\%[nction]\><	这里用到了单词结尾 "\>" 来避免匹配 "full" 中的 "fu"。	当要匹配的不是普通字符时,问题就变得更复杂了。你不一定要这样做,但这	是可能的。例如: >		/\<r\%[[eo]ad]\><	匹配 "r", "re", "ro", "rea", "roa", "read" 及 "road"。	{not available when compiled without the +syntax feature}==============================================================================6. 忽略大小些						*/ignorecase*如果选项 'ignorecase' 被设定为打开的话,一般字符的大小些就会被忽略。当模式只包含小写字符时 'smartcase' 会被设成忽略大小写。							*/\c* */\C*当 "\c" 出现在模式中任何地方时,整个模式会被象打开 'ignorecase' 一样被处理。真正的 'ignorecase' 和 'smartcase' 的值会被忽略。"\C" 的效果恰好相反: 强制对整个模式匹配大小写。{only Vim supports \c and \C}Note 'ignorecase', "\c" 和 "\C" 对字符类无效。例如:       模式	'ignorecase'  'smartcase'	匹配 ~	foo	  off		-		foo	foo	  on		-		foo Foo FOO	Foo	  on		off		foo Foo FOO	Foo	  on		on		    Foo	\cfoo	  -		-		foo Foo FOO	foo\C	  -		-		foo							*/\Z*When "\Z" appears anywhere in the pattern, composing characters are ignored.Thus only the base characters need to match, the composing characters may bedifferent and the number of composing characters may differ.  Only relevantwhen 'encoding' is "utf-8".技术细节:					*NL-used-for-Nul*文件中的 <Nul> 字符在内存中被存储为 <NL>。显示为 "^@"。翻译是在读写文件时完成的。为了在查找模式中匹配 <Nul> 你可以使用 CTRL-@ 或 "CTRL-V 000"。这应该不出你的所料。内部该字符被替换为 <NL>。不寻常的是键入 CTRL-V CTRL-J 同样插入一个 <NL>,因此也搜索文件中的 <Nul>.  {Vi cannot handle <Nul> characters in the file at all}						*CR-used-for-NL*当 'fileformat' 为 "mac" 时,<NL> 字符在内部储存为 <CR>。显示为 "^M"。其它的类似以 <NL> 作为 <Nul> 的用法。在作表达式求值时,模式中的 <NL> 字符匹配字符串中的 <NL>。用 "\n" (反斜杠 n) 来匹配 <NL> 在这里是行不通的,它仅对缓冲内的文本有效。						*pattern-multi-byte*匹配模式对于多字节字符同样适用。大多数情况下,都不会有例外。但是无效的字节可能会因此麻烦,一个包含无效字节的模式很可能永远不会匹配。==============================================================================7. 与 Perl 模式的比较					*perl-patterns*Vim 中的正则表达式和 Perl 的在功能上来说非常相似。它们之间的区别大多数是表达方法;这里给出一个它们之间的区别的总结:兼容性				Vim 方言	Perl 方言 ~----------------------------------------------------------------强制不区分大小写		\c		(?i)强制区分大小写			\C		(?-i)backref-less grouping		\%(atom)	(?:atom)保守修饰符			\{-n,m}		*?, +?, ??, {}?0 宽度匹配			atom\@=		(?=atom)0 宽度否匹配			atom\@!		(?!atom)0 宽度前匹配			atom\@<=	(?<=atom)0 宽度前否匹配			atom\@<!	(?<!atom)无重试匹配			atom\@>		(?>atom)Vim 和 Perl 匹配一个字符串中的新行时有所不同:在 Perl 里,^ 和 $ 缺省只匹配文本的开始和结尾。但是你也可以设定 'm' 标志,用来匹配内嵌的换行符。你还可以设定 's' 标志,使 . 可以也用来匹配换行符。(顺便提一下,这两个标志都可以用类似上面提到的 i 标志的用法来在模式内部改动.)另一方面,Vim 中的 ^ 和 $ 永远匹配内嵌的换行符。同时,有另外的两个匹配原:\%^ 和 \%$ 可以分别被用来仅仅匹配文本的起始和结尾。Vim 用 \_ "修饰符" 来解决第二个问题:把它放在一个 . 或一个字符类之前,结果的模式就可以匹配换行字符。最后,一下这些结构是 Perl 独有的:- 在正则表达式内执行任意代码:  (?{perl code})- 条件表达式:  (?(condition)true-expr|false-expr)下面是 Vim 独有的:- 改变模式的 'magic' 属性:  \v \V \m \M   (对于避免反斜杠非常有用)- 可选匹配原序列:  \%[atoms]- \& (which is to \| what "and" is to "or";  it forces several branches   to match at one spot)- 通过行/列号匹配:  \%5l \%5c \%5v- 限制正则表达式的 "返回值":  \zs \ze==============================================================================8. 高亮显示匹配						*match-highlight*							*:mat* *:match*:mat[ch] {group} /{pattern}/		定义一个要在当前窗口高亮显示的模式。会被以 {group} 高亮。例: >			:highlight MyGroup ctermbg=green guibg=green			:match MyGroup /TODO/<		除了 // 任何字符都可以被用来表示一个 {pattern} 的开始和结束。		要当心某些特殊的字符,例如 '"' 和 '|'.		{group} 在该命令被执行时必须是已经定义好的。该匹配会否决		'hlsearch' 所定义的高亮。		'ignorecase' 不起作用。你得在模式中使用 |/\c| 来达到目的。		否则大小些是区分的。		Note 使用 'hlsearch' 高亮显示上次使用的查找模式对所有窗口都		有效,而以 ":match" 定义的模式仅仅对当前窗口生效。当切换至		另一个缓冲时,该设定被保留。		另一个例子,高亮显示所有虚拟第 72 列之后的文本: >			:highlight rightMargin term=bold ctermfg=blue guifg=blue			:match rightMargin /.\%>72v/<		要高亮显示所有位于虚拟第 7 列的文本: >			:highlight col8 ctermbg=grey guibg=grey			:match col8 /\%<8v.\%>7v/<		Note 用两个项是为了匹配那些占用超过一列的字符,例如 TAB。:mat[ch]:mat[ch] none		清楚前面定义的匹配模式。 vim:tw=78:ts=8:ft=help:norl:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -