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

📄 pattern.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 3 页
字号:
*pattern.txt*   For Vim version 6.2.  最近更新:2004年6月		  VIM REFERENCE MANUAL    by Bram Moolenaar		    (译者: lang2 http://vimcdoc.sf.net)模式及查找命令					*pattern-searches*最基本的东西可以在用户手册的 |03.9| 节中找到。在 |usr_27.txt| 也有一些解释。1. 查找命令			|search-commands|2. 匹配模式的定义		|search-pattern|3. 模式项总揽			|pattern-overview|4. 多项				|pattern-multi-items|5. 普通匹配原			|pattern-atoms|6. 忽略大小写			|/ignorecase|7. 与 Perl 匹配模式的比较	|perl-patterns|8. 高亮显示匹配			|match-highlight|==============================================================================1. 查找命令					*search-commands* *E486*							*/*/{pattern}[/]<CR>	向前查找第 [count] 次出现 {pattern} 的地方			(不包含)/{pattern}/{offset}<CR>	向前查找第 [count] 次出现 {pattern} 的地方			并向上或下移动 |{offset}| 行。							*/<CR>*/<CR>			向前查找第 [count] 次出现处,使用上次的模式			|last-pattern| 以及 |{offset}|.//{offset}<CR>		向前查找第 [count] 次出现处,使用上次的模式			|last-pattern| 以及新偏移 |{offset}|.  若			{offset} 为空不使用任何偏移。							*?*?{pattern}[?]<CR>	向后查找第 [count] 次出现 {pattern} 的地方			(不包含)?{pattern}?{offset}<CR>	S向后查找第 [count] 次出现 {pattern} 的地方			并向上或下移动 |{offset}| 行。							*?<CR>*?<CR>			向后查找第 [count] 次出现处,使用上次的模式			|last-pattern| 以及 |{offset}|.??{offset}<CR>		向后查找第 [count] 次出现处,使用上次的模式			|last-pattern| 以及新偏移 |{offset}|.  若			{offset} 为空不使用任何偏移。							*n*n			将上次的 "/" 或 "?" 重复 [count] 次。			|last-pattern| {Vi: 无次数}							*N*N			将上次的 "/" 或 "?" 在反方向上重复 [count] 次。			|last-pattern| {Vi: 无次数}							*star* *E348* *E349**			向前查找第 [count] 次出现距离当前光标最近的单词的地方。			用于查找的单词是一下的先符合条件的:				1. 光标下的关键字 |'iskeyword'|				2. 当前行内的光标后的第一个关键字。				3. 光标下的非空白单词				4. 当前行内的光标后的第一个非空白单词			只查找整字,象和命令 "/\<keyword\>" 一样。(不包含)			{not in Vi} 使用 'ignorecase', 'smartcase' 没有。							*#*#			同 "*", 但向后查找。 磅符号 (字符 163) 也可。如果 "#"			的功能和退格键一样,试着在启动 Vim 前使用			"stty erase <BS>" (<BS> 是 CTRL-H 或真的退格键).			{not in Vi}							*gstar*g*			同 "*",但不使用 "\<" 和 "\>"。这样查找就会匹配非整字的			地方。{not in Vi}							*g#*g#			同 "#",但不使用 "\<" 和 "\>"。这样查找就会匹配非整字的			地方。{not in Vi}							*gd*gd			跳转至局部声明。当光标下是一个局部变量时,此命令会跳转			到该变量被声明的地方。首先,Vim 会查找当前函数的起始处。			就象使用 "[[" 一样。如果找不到会停止在第一行。如果找到,			Vim 会向后直到找到一个空行,然后从这里开始向前查找光标			下的关键字,就象 "*"。看起来象注视的行会被忽略。			(见 'comments' 选项).			Note 这并非总有效。Vim 不会做语法分析。它仅仅查找关键			字的匹配。如果需要搜索头文件的话,可以使用			|include-search| 列出的命令。			这个命令之后,可以使用 |n| 向前查找下一个匹配 (不能向后).			{not in Vi}							*gD*gD			跳转至全局声明。当光标下是一个全局变量时,此命令会跳转			到该变量被声明的地方。这和 "gd" 命令一样,不过查找总是			从第一行开始。{not in Vi}							*CTRL-C*CTRL-C			中止当前的 (搜索) 命令。在 MS-DOS 上用 CTRL-Break			|dos-CTRL-Break|.			在普通模式下,任何等待的命令将被终止。							*:noh* *:nohlsearch*:noh[lsearch]		停止 'hlsearch' 选项的高亮显示。如果再执行查找命令			或者设定 'hlsearch' 选项,高亮会被自动打开。此命令			无法使用在自动命令里,因为加亮的状态会被自动保存和			恢复 |autocmd-searchpat|。如果 'incsearch' 选项被打开,当年出键入查找模式时,当前的匹配会被显示。你还得用 <CR> 来结束查找命令并将光标定位到显示的匹配。或者用 <ESC> 来放弃查找。如果 'hlsearch' 被打开,你最后一次查找命令的所有匹配点都会被加亮。这可以用|:nohlsearch| 命令终止。					*search-offset* *{offset}*这些命令查找一个指定的模式。对于 "/" 和 "?" 命令可以指定一个额外的偏移量。有两种偏移:行偏移和字符偏移。{字符偏移不适用于 Vi}偏移用来指定光标相对于找到的匹配的位置:    [num]	[num] 行向下,列 1    +[num]	[num] 行向下,列 1    -[num]	[num] 行向上,列 1    e[+num]	[num] 字符向右 (从匹配结束处算起)    e[-num]	[num] 字符向左 (从匹配结束处算起)    s[+num]	[num] 字符向右 (从匹配开始 (start) 处算起)    s[-num]	[num] 字符向左 (从匹配开始 (start) 处算起)    b[+num]	[num] 字符向左 (从匹配开始 (begin) 处算起)    b[-num]	[num] 字符向左 (从匹配开始 (begin) 处算起)如果给出了 '-' 或 '+' 但是省略了 [num],会使用缺省的 1。如果使用了 'e',查找会成为包含的 (光标所落在的字符被包含在操作中).例子:模式			光标位置	~/test/+1		"test" 下一行,第一列/test/e			"test" 的后一个 't'/test/s+2		"test" 中的 's'/test/b-3		"test" 前的第三个字符如果把这些命令之一和一个操作符连用,查找之前和之后光标位置之间的字符会被影响。然而,如果一个行偏移被使用,两光标位置之间的所有行都被影响。一个如何查找一个模式并用另一个单词来更改匹配的例子: >	/foo<CR>	查找 "foo"	c//e		change until end of match	bar<Esc>	type replacement	//<CR>		go to start of next match	c//e		change until end of match	beep<Esc>	type another replacement			etc.<							*//;* *E386*一个很特别的偏移是 ';' 后面接另一个查找命令。例如: >   /test 1/;/test   /test.*/+1;?ing?第一次查找先找到下一个出现 "test 1" 的地方,然后找第一次出现 "test" 的地方。这就好象接连执行两次查找命令,不同之处在于:- 这可以被当做一个移动命令而于一个操作符之后。- 后续的 "n" 或 "N" 命令取决于第一个查找操作。- 当有错误时光标原地不动。							*last-pattern*最近被使用的模式和偏移会被记住。它们可以被用来重复查找,向前或向后均可,还可以使用次数。 Note Vim 会记住两个模式:一个普通模式下查找命令用的,另一个是替换命令 ":s" 用的。每次给处一个空白的模式时,上次的模式都将被用到。'magic' 选项的值是被绑在上次使用的模式上的。如果你改变了 'magic',这不会改变上次使用的模式的解释方法。'ignorecase' 选项就不同。当 'ignorecase' 的值被改变时,会使得该模式匹配另外的文本。如果你设定了 'hlsearch' 选项,所有最后一次查找的匹配都会被加亮。要清除最后一次查找的模式: >	:let @/ = ""这不会把该模式设置为空串,因为那样会匹配所有的东西。该模式是真的被清除了,就象Vim 刚刚启动一样。通常查找会跳过那些不移动光标位置的匹配。下一次匹配是开始于下一个字符还是在跳过的匹配之后取决于 'cpoptions' 选项中的 'c' 标志位。见 |cpo-c|.	     带 'c' flag:   "/..." 前进 1 至 3 个字符	   不带 'c' flag:   "/..." 前进 1 个字符从第一栏开始搜索并忽略任何光标位置之前的匹配导致了 'c' 标志的不可预见性。在 Vi 里 ":tag" 命令会将最后一次查找的模式设定为要搜索的标签。Vim 没有这样做。前一次查找的模式仍然被记住,除非 'cpoptions' 选项中包括 't' 标志位。查找模式总被存入查找历史记录。如果 'wrapscan' 选项的值为真 (缺省) 的话,查找会在缓冲的结尾折返。否则,向后查找会在开始处停止;向前查找会在结尾处停止。如果该选项为真但找不到该模式,会给处一个错误信息:"pattern not found"。光标原地不动。否则给处的信息是:"search hit BOTTOM without match" 或者 "search hit TOP without match",取决于查找的方向。如果该选项为真,当查找折返时会显示:"search hit TOP, continuing atBOTTOM" 或 "search hit BOTTOM, continuing at TOP"。这各信息可以用设定'shortmess' 选项里的 's' 标志位来关闭。该信息的显示会使用 'w' 的加亮方法。(缺省: 标准输出)。							*search-range*你可以限定 "/" 命令查找的范围。一个窍门是使用 ":substitute" 命令并与 'c' 联用。例: >   :.,300s/Pattern//gc这个命令会从光标所在处开始查找 "Pattern",知道第 300 行。在匹配处,你会被提示键入一个字符。键入 'q' 终止;键入 'n' 找下一个匹配。"*", "#", "g*" 和 "g#" 命令依照一下的次序在光标附近查找一个单词,第一个被找到的会被使用:- 光标下的关键字。- 同行的光标右侧的第一各关键字。- 光标下的第一个字 (WORD)。- 同行的光标右侧的第一各字 (WORD)。关键字只能包括字母和 'iskeyword' 中的字符。字 (WORD) 可以包括任何非空白 (<Tab>和/或 <Space>) 。Note 如果你用十个指头打字的话,这些字符是很容易记住的:"#" 在你的左手中指上 (向左上查找);"*" 在你的右手中指上 (向右下查找)。(这取决于你的键盘布局).==============================================================================2. 模式的定义			*search-pattern* *pattern* *[pattern]*					*regular-expression* *regexp* *Pattern*					*E76* *E361* *E363* *E383* *E476*头一道菜已经在用户手册的第 27 章 |usr_27.txt| 上过了。						*/bar* */\bar* */pattern*1. 一个模式 (pattern) 是由 "\|" 分割开的一个或多个分支 (branch)。它可以匹配   其中的任何一个分支。例如:"foo\|beep" 可以匹配 "foo" 或 "beep"。如果超过   一个分支可以匹配,第一个被选用。   pattern ::=	    branch		或  branch \| branch		或  branch \| branch \| branch		等。						*/branch* */\&*2. 一个分支是一个或多个被 "\&" 分割的邻接。它匹配最后一个邻接,但仅仅当前面所   的邻接也在同样位置匹配。例:	"foobeep\&..." 匹配 "foobeep" 中的 "foo" .	".*Peter\&.*Bob" 匹配同时包括 "Peter" 和 "Bob" 的一行   branch ::=	    concat		或  concat \& concat		或  concat \& concat \& concat		等。						*/concat*3. 一个邻接 (concat) 是一或多个相邻的组件 (piece)。它匹配第一个组件,后接第   二个组件的匹配,等。 例如: "f[0-9]b",先匹配 "f",然后是一个数位,接着 "b"。   concat  ::=	    piece		或  piece piece		或  piece piece piece		等。						*/piece*4. 一个组件是一个原 (atom),后面可能带一个倍数 (multi),用来表示匹配原的次数。   例如:"a*" 匹配任意个 "a" 组成的序列: "", "a", "aa", 等。参见 |/multi|。   piece   ::=	    atom		或  atom  multi						*/atom*5. 一个原可以是一个很长的条目列表中的一个。很多原被用来匹配文本中的一个字符。   原经常是一个普通的字符或字符类。可以用圆括号来将一个模式变成一个原。结构   "\z(\)" 仅仅被用在语法加亮中。   atom    ::=	    ordinary-atom		|/ordinary-atom|		或  \( pattern \)		|/\(|		或  \%( pattern \)		|/\%(|		或  \z( pattern \)		|/\z(|==============================================================================3. 模式项总揽					*pattern-overview*多项总揽。						*/multi* *E61* *E62*下面给处一些解释和例子,包括链接。			*E64*	  multi ~     'magic' 'nomagic'	匹配前面的原 ~|/star|	*	\*	0 或更多	尽可能多|/\+|	\+	\+	1 或更多	尽可能多 (*)|/\=|	\=	\=	0 或 1		尽可能多 (*)|/\?|	\?	\?	0 或 1		尽可能多 (*)|/\{|	\{n,m}	\{n,m}	n 到 m		尽可能多 (*)	\{n}	\{n}	n		准确 (*)	\{n,}	\{n,}	最少 n		尽可能多 (*)	\{,m}	\{,m}	0 到 m		尽可能多 (*)	\{}	\{}	0 或更多	尽可能多 (*)|/\{-|	\{-n,m}	\{-n,m}	n 到 m		尽可能多 (*)	\{-n}	\{-n}	n		准确 (*)	\{-n,}	\{-n,}	最少 n		尽可能多 (*)	\{-,m}	\{-,m}	0 到 m		尽可能多 (*)	\{-}	\{-}	0 或更多	尽可能多 (*)							*E59*|/\@>|	\@>	\@>	1, 象匹配一整个模式 (*)|/\@=|	\@=	\@=	nothing, requires a match |/zero-width| (*)|/\@!|	\@!	\@!	nothing, requires NO match |/zero-width| (*)|/\@<=|	\@<=	\@<=	nothing, requires a match behind |/zero-width| (*)|/\@<!|	\@<!	\@<!	nothing, requires NO match behind |/zero-width| (*)(*) {not in Vi}普通原总揽。					*/ordinary-atom*下面给处一些解释和例子,包括链接。      ordinary atom ~      magic   nomagic	matches ~|/^|	^	^	行首 (在模式起始) |/zero-width||/\^|	\^	\^	字符 '^'|/\_^|	\_^	\_^	行首 (用于任何地方) |/zero-width||/$|	$	$	行尾 (在模式结尾) |/zero-width||/\$|	\$	\$	字符 '$'|/\_$|	\_$	\_$	行尾 (用于任何地方) |/zero-width||/.|	.	\.	任何单个字符 (不包括行尾)|/\_.|	\_.	\_.	任何单个字符,包括行尾|/\<|	\<	\<	一个单词的起始 |/zero-width||/\>|	\>	\>	一个单词的结尾 |/zero-width||/\zs|	\zs	\zs	任何字符,设定匹配起始|/\ze|	\ze	\ze	任何字符,设定匹配结尾|/\%^|	\%^	\%^	文件首 |/zero-width|		*E71*

⌨️ 快捷键说明

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