1*pattern.txt* For Vim version 7.0aa. Last change: 2004 Sep 07 2 3 4 VIM REFERENCE MANUAL by Bram Moolenaar 5 6 7Patterns and search commands *pattern-searches* 8 9The very basics can be found in section |03.9| of the user manual. A few more 10explanations are in chapter 27 |usr_27.txt|. 11 121. Search commands |search-commands| 132. The definition of a pattern |search-pattern| 143. Magic |/magic| 154. Overview of pattern items |pattern-overview| 165. Multi items |pattern-multi-items| 176. Ordinary atoms |pattern-atoms| 187. Ignoring case in a pattern |/ignorecase| 198. Compare with Perl patterns |perl-patterns| 209. Highlighting matches |match-highlight| 21 22============================================================================== 231. Search commands *search-commands* *E486* 24 25 */* 26/{pattern}[/]<CR> Search forward for the [count]'th occurrence of 27 {pattern} |exclusive|. 28 29/{pattern}/{offset}<CR> Search forward for the [count]'th occurrence of 30 {pattern} and go |{offset}| lines up or down. 31 |linewise|. 32 33 */<CR>* 34/<CR> Search forward for the [count]'th latest used 35 pattern |last-pattern| with latest used |{offset}|. 36 37//{offset}<CR> Search forward for the [count]'th latest used 38 pattern |last-pattern| with new |{offset}|. If 39 {offset} is empty no offset is used. 40 41 *?* 42?{pattern}[?]<CR> Search backward for the [count]'th previous 43 occurrence of {pattern} |exclusive|. 44 45?{pattern}?{offset}<CR> Search backward for the [count]'th previous 46 occurrence of {pattern} and go |{offset}| lines up or 47 down |linewise|. 48 49 *?<CR>* 50?<CR> Search backward for the [count]'th latest used 51 pattern |last-pattern| with latest used |{offset}|. 52 53??{offset}<CR> Search backward for the [count]'th latest used 54 pattern |last-pattern| with new |{offset}|. If 55 {offset} is empty no offset is used. 56 57 *n* 58n Repeat the latest "/" or "?" [count] times. 59 |last-pattern| {Vi: no count} 60 61 *N* 62N Repeat the latest "/" or "?" [count] times in 63 opposite direction. |last-pattern| {Vi: no count} 64 65 *star* *E348* *E349* 66* Search forward for the [count]'th occurrence of the 67 word nearest to the cursor. The word used for the 68 search is the first of: 69 1. the keyword under the cursor |'iskeyword'| 70 2. the first keyword after the cursor, in the 71 current line 72 3. the non-blank word under the cursor 73 4. the first non-blank word after the cursor, 74 in the current line 75 Only whole keywords are searched for, like with the 76 command "/\<keyword\>". |exclusive| {not in Vi} 77 'ignorecase' is used, 'smartcase' is not. 78 79 *#* 80# Same as "*", but search backward. The pound sign 81 (character 163) also works. If the "#" key works as 82 backspace, try using "stty erase <BS>" before starting 83 Vim (<BS> is CTRL-H or a real backspace). {not in Vi} 84 85 *gstar* 86g* Like "*", but don't put "\<" and "\>" around the word. 87 This makes the search also find matches that are not a 88 whole word. {not in Vi} 89 90 *g#* 91g# Like "#", but don't put "\<" and "\>" around the word. 92 This makes the search also find matches that are not a 93 whole word. {not in Vi} 94 95 *gd* 96gd Goto local Declaration. When the cursor is on a local 97 variable, this command will jump to its declaration. 98 First Vim searches for the start of the current 99 function, just like "[[". If it is not found the 100 search stops in line 1. If it is found, Vim goes back 101 until a blank line is found. From this position Vim 102 searches for the keyword under the cursor, like with 103 "*", but lines that look like a comment are ignored 104 (see 'comments' option). 105 Note that this is not guaranteed to work, Vim does not 106 really check the syntax, it only searches for a match 107 with the keyword. If included files also need to be 108 searched use the commands listed in |include-search|. 109 After this command |n| searches forward for the next 110 match (not backward). 111 {not in Vi} 112 113 *gD* 114gD Goto global Declaration. When the cursor is on a 115 global variable that is defined in the file, this 116 command will jump to its declaration. This works just 117 like "gd", except that the search for the keyword 118 always starts in line 1. {not in Vi} 119 120 *CTRL-C* 121CTRL-C Interrupt current (search) command. Use CTRL-Break on 122 MS-DOS |dos-CTRL-Break|. 123 In Normal mode, any pending command is aborted. 124 125 *:noh* *:nohlsearch* 126:noh[lsearch] Stop the highlighting for the 'hlsearch' option. It 127 is automatically turned back on when using a search 128 command, or setting the 'hlsearch' option. 129 This command doesn't work in an autocommand, because 130 the highlighting state is saved and restored when 131 executing autocommands |autocmd-searchpat|. 132 133While typing the search pattern the current match will be shown if the 134'incsearch' option is on. Remember that you still have to finish the search 135command with <CR> to actually position the cursor at the displayed match. Or 136use <Esc> to abandon the search. 137 138All matches for the last used search pattern will be highlighted if you set 139the 'hlsearch' option. This can be suspended with the |:nohlsearch| command. 140 141 *search-offset* *{offset}* 142These commands search for the specified pattern. With "/" and "?" an 143additional offset may be given. There are two types of offsets: line offsets 144and character offsets. {the character offsets are not in Vi} 145 146The offset gives the cursor position relative to the found match: 147 [num] [num] lines downwards, in column 1 148 +[num] [num] lines downwards, in column 1 149 -[num] [num] lines upwards, in column 1 150 e[+num] [num] characters to the right of the end of the match 151 e[-num] [num] characters to the left of the end of the match 152 s[+num] [num] characters to the right of the start of the match 153 s[-num] [num] characters to the left of the start of the match 154 b[+num] [num] identical to s[+num] above (mnemonic: begin) 155 b[-num] [num] identical to s[-num] above (mnemonic: begin) 156 157If a '-' or '+' is given but [num] is omitted, a count of one will be used. 158When including an offset with 'e', the search becomes inclusive (the 159character the cursor lands on is included in operations). 160 161Examples: 162 163pattern cursor position ~ 164/test/+1 one line below "test", in column 1 165/test/e on the last t of "test" 166/test/s+2 on the 's' of "test" 167/test/b-3 three characters before "test" 168 169If one of these commands is used after an operator, the characters between 170the cursor position before and after the search is affected. However, if a 171line offset is given, the whole lines between the two cursor positions are 172affected. 173 174An example of how to search for matches with a pattern and change the match 175with another word: > 176 /foo<CR> find "foo" 177 c//e change until end of match 178 bar<Esc> type replacement 179 //<CR> go to start of next match 180 c//e change until end of match 181 beep<Esc> type another replacement 182 etc. 183< 184 *//;* *E386* 185A very special offset is ';' followed by another search command. For example: > 186 187 /test 1/;/test 188 /test.*/+1;?ing? 189 190The first one first finds the next occurrence of "test 1", and then the first 191occurrence of "test" after that. 192 193This is like executing two search commands after each other, except that: 194- It can be used as a single motion command after an operator. 195- The direction for a following "n" or "N" command comes from the first 196 search command. 197- When an error occurs the cursor is not moved at all. 198 199 *last-pattern* 200The last used pattern and offset are remembered. They can be used to repeat 201the search, possibly in another direction or with another count. Note that 202two patterns are remembered: One for 'normal' search commands and one for the 203substitute command ":s". Each time an empty pattern is given, the previously 204used pattern is used. 205 206The 'magic' option sticks with the last used pattern. If you change 'magic', 207this will not change how the last used pattern will be interpreted. 208The 'ignorecase' option does not do this. When 'ignorecase' is changed, it 209will result in the pattern to match other text. 210 211All matches for the last used search pattern will be highlighted if you set 212the 'hlsearch' option. 213 214To clear the last used search pattern: > 215 :let @/ = "" 216This will not set the pattern to an empty string, because that would match 217everywhere. The pattern is really cleared, like when starting Vim. 218 219The search usual skips matches that don't move the cursor. Whether the next 220match is found at the next character or after the skipped match depends on the 221'c' flag in 'cpoptions'. See |cpo-c|. 222 with 'c' flag: "/..." advances 1 to 3 characters 223 without 'c' flag: "/..." advances 1 character 224The unpredictability with the 'c' flag is caused by starting the search in the 225first column, skipping matches until one is found past the cursor position. 226 227In Vi the ":tag" command sets the last search pattern when the tag is searched 228for. In Vim this is not done, the previous search pattern is still remembered, 229unless the 't' flag is present in 'cpoptions'. The search pattern is always 230put in the search history. 231 232If the 'wrapscan' option is on (which is the default), searches wrap around 233the end of the buffer. If 'wrapscan' is not set, the backward search stops 234at the beginning and the forward search stops at the end of the buffer. If 235'wrapscan' is set and the pattern was not found the error message "pattern 236not found" is given, and the cursor will not be moved. If 'wrapscan' is not 237set the message becomes "search hit BOTTOM without match" when searching 238forward, or "search hit TOP without match" when searching backward. If 239wrapscan is set and the search wraps around the end of the file the message 240"search hit TOP, continuing at BOTTOM" or "search hit BOTTOM, continuing at 241TOP" is given when searching backwards or forwards respectively. This can be 242switched off by setting the 's' flag in the 'shortmess' option. The highlight 243method 'w' is used for this message (default: standout). 244 245 *search-range* 246You cannot limit the search command "/" to a certain range of lines. A trick 247to do this anyway is to use the ":substitute" command with the 'c' flag. 248Example: > 249 :.,300s/Pattern//gc 250This command will search from the cursor position until line 300 for 251"Pattern". At the match, you will be asked to type a character. Type 'q' to 252stop at this match, type 'n' to find the next match. 253 254The "*", "#", "g*" and "g#" commands look for a word near the cursor in this 255order, the first one that is found is used: 256- The keyword currently under the cursor. 257- The first keyword to the right of the cursor, in the same line. 258- The WORD currently under the cursor. 259- The first WORD to the right of the cursor, in the same line. 260The keyword may only contain letters and characters in 'iskeyword'. 261The WORD may contain any non-blanks (<Tab>s and/or <Space>s). 262Note that if you type with ten fingers, the characters are easy to remember: 263the "#" is under your left hand middle finger (search to the left and up) and 264the "*" is under your right hand middle finger (search to the right and down). 265(this depends on your keyboard layout though). 266 267============================================================================== 2682. The definition of a pattern *search-pattern* *pattern* *[pattern]* 269 *regular-expression* *regexp* *Pattern* 270 *E76* *E361* *E363* *E383* *E476* 271 272For starters, read chapter 27 of the user manual |usr_27.txt|. 273 274 */bar* */\bar* */pattern* 2751. A pattern is one or more branches, separated by "\|". It matches anything 276 that matches one of the branches. Example: "foo\|beep" matches "foo" and 277 matches "beep". If more than one branch matches, the first one is used. 278 279 pattern ::= branch 280 or branch \| branch 281 or branch \| branch \| branch 282 etc. 283 284 */branch* */\&* 2852. A branch is one or more concats, separated by "\&". It matches the last 286 concat, but only if all the preceding concats also match at the same 287 position. Examples: 288 "foobeep\&..." matches "foo" in "foobeep". 289 ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob" 290 291 branch ::= concat 292 or concat \& concat 293 or concat \& concat \& concat 294 etc. 295 296 */concat* 2973. A concat is one or more pieces, concatenated. It matches a match for the 298 first piece, followed by a match for the second piece, etc. Example: 299 "f[0-9]b", first matches "f", then a digit and then "b". 300 301 concat ::= piece 302 or piece piece 303 or piece piece piece 304 etc. 305 306 */piece* 3074. A piece is an atom, possibly followed by a multi, an indication of how many 308 times the atom can be matched. Example: "a*" matches any sequence of "a" 309 characters: "", "a", "aa", etc. See |/multi|. 310 311 piece ::= atom 312 or atom multi 313 314 */atom* 3155. An atom can be one of a long list of items. Many atoms match one character 316 in the text. It is often an ordinary character or a character class. 317 Braces can be used to make a pattern into an atom. The "\z(\)" construct 318 is only for syntax highlighting. 319 320 atom ::= ordinary-atom |/ordinary-atom| 321 or \( pattern \) |/\(| 322 or \%( pattern \) |/\%(| 323 or \z( pattern \) |/\z(| 324 325 326============================================================================== 3274. Overview of pattern items *pattern-overview* 328 329Overview of multi items. */multi* *E61* *E62* 330More explanation and examples below, follow the links. *E64* 331 332 multi ~ 333 'magic' 'nomagic' matches of the preceding atom ~ 334|/star| * \* 0 or more as many as possible 335|/\+| \+ \+ 1 or more as many as possible (*) 336|/\=| \= \= 0 or 1 as many as possible (*) 337|/\?| \? \? 0 or 1 as many as possible (*) 338 339|/\{| \{n,m} \{n,m} n to m as many as possible (*) 340 \{n} \{n} n exactly (*) 341 \{n,} \{n,} at least n as many as possible (*) 342 \{,m} \{,m} 0 to m as many as possible (*) 343 \{} \{} 0 or more as many as possible (same as *) (*) 344 345|/\{-| \{-n,m} \{-n,m} n to m as few as possible (*) 346 \{-n} \{-n} n exactly (*) 347 \{-n,} \{-n,} at least n as few as possible (*) 348 \{-,m} \{-,m} 0 to m as few as possible (*) 349 \{-} \{-} 0 or more as few as possible (*) 350 351 *E59* 352|/\@>| \@> \@> 1, like matching a whole pattern (*) 353|/\@=| \@= \@= nothing, requires a match |/zero-width| (*) 354|/\@!| \@! \@! nothing, requires NO match |/zero-width| (*) 355|/\@<=| \@<= \@<= nothing, requires a match behind |/zero-width| (*) 356|/\@<!| \@<! \@<! nothing, requires NO match behind |/zero-width| (*) 357 358(*) {not in Vi} 359 360 361Overview of ordinary atoms. */ordinary-atom* 362More explanation and examples below, follow the links. 363 364 ordinary atom ~ 365 magic nomagic matches ~ 366|/^| ^ ^ start-of-line (at start of pattern) |/zero-width| 367|/\^| \^ \^ literal '^' 368|/\_^| \_^ \_^ start-of-line (used anywhere) |/zero-width| 369|/$| $ $ end-of-line (at end of pattern) |/zero-width| 370|/\$| \$ \$ literal '$' 371|/\_$| \_$ \_$ end-of-line (used anywhere) |/zero-width| 372|/.| . \. any single character (not an end-of-line) 373|/\_.| \_. \_. any single character or end-of-line 374|/\<| \< \< beginning of a word |/zero-width| 375|/\>| \> \> end of a word |/zero-width| 376|/\zs| \zs \zs anything, sets start of match 377|/\ze| \ze \ze anything, sets end of match 378|/\%^| \%^ \%^ beginning of file |/zero-width| *E71* 379|/\%$| \%$ \%$ end of file |/zero-width| 380|/\%#| \%# \%# cursor position |/zero-width| 381|/\%l| \%23l \%23l in line 23 |/zero-width| 382|/\%c| \%23c \%23c in column 23 |/zero-width| 383|/\%v| \%23v \%23v in virtual column 23 |/zero-width| 384 385Character classes {not in Vi}: */character-classes* 386|/\i| \i \i identifier character (see 'isident' option) 387|/\I| \I \I like "\i", but excluding digits 388|/\k| \k \k keyword character (see 'iskeyword' option) 389|/\K| \K \K like "\k", but excluding digits 390|/\f| \f \f file name character (see 'isfname' option) 391|/\F| \F \F like "\f", but excluding digits 392|/\p| \p \p printable character (see 'isprint' option) 393|/\P| \P \P like "\p", but excluding digits 394|/\s| \s \s whitespace character: <Space> and <Tab> 395|/\S| \S \S non-whitespace character; opposite of \s 396|/\d| \d \d digit: [0-9] 397|/\D| \D \D non-digit: [^0-9] 398|/\x| \x \x hex digit: [0-9A-Fa-f] 399|/\X| \X \X non-hex digit: [^0-9A-Fa-f] 400|/\o| \o \o octal digit: [0-7] 401|/\O| \O \O non-octal digit: [^0-7] 402|/\w| \w \w word character: [0-9A-Za-z_] 403|/\W| \W \W non-word character: [^0-9A-Za-z_] 404|/\h| \h \h head of word character: [A-Za-z_] 405|/\H| \H \H non-head of word character: [^A-Za-z_] 406|/\a| \a \a alphabetic character: [A-Za-z] 407|/\A| \A \A non-alphabetic character: [^A-Za-z] 408|/\l| \l \l lowercase character: [a-z] 409|/\L| \L \L non-lowercase character: [^a-z] 410|/\u| \u \u uppercase character: [A-Z] 411|/\U| \U \U non-uppercase character [^A-Z] 412|/\_| \_x \_x where x is any of the characters above: character 413 class with end-of-line included 414(end of character classes) 415 416|/\e| \e \e <Esc> 417|/\t| \t \t <Tab> 418|/\r| \r \r <CR> 419|/\b| \b \b <BS> 420|/\n| \n \n end-of-line 421|/~| ~ \~ last given substitute string 422|/\1| \1 \1 same string as matched by first \(\) {not in Vi} 423|/\2| \2 \2 Like "\1", but uses second \(\) 424 ... 425|/\9| \9 \9 Like "\1", but uses ninth \(\) 426 *E68* 427|/\z1| \z1 \z1 only for syntax highlighting, see |:syn-ext-match| 428 ... 429|/\z1| \z9 \z9 only for syntax highlighting, see |:syn-ext-match| 430 431 x x a character with no special meaning matches itself 432 433|/[]| [] \[] any character specified inside the [] 434|/\%[]| \%[] \%[] a sequence of optionally matched atoms 435 436|/\c| \c \c ignore case 437|/\C| \C \C match case 438|/\m| \m \m 'magic' on for the following chars in the pattern 439|/\M| \M \M 'magic' off for the following chars in the pattern 440|/\v| \v \v the following chars in the pattern are "very magic" 441|/\V| \V \V the following chars in the pattern are "very nomagic" 442|/\Z| \Z \Z ignore differences in Unicode "combining characters". 443 Useful when searching voweled Hebrew or Arabic text. 444 445|/\%d| \%d \%d match specified decimal character (eg \%d123 446|/\%x| \%x \%x match specified hex character (eg \%x2a) 447|/\%o| \%o \%o match specified octal character (eg \%o040) 448|/\%u| \%u \%u match specified multibyte character (eg \%u20ac) 449|/\%U| \%U \%U match specified large multibyte character (eg 450 \%U12345678) 451 452Example matches ~ 453\<\I\i* or 454\<\h\w* 455\<[a-zA-Z_][a-zA-Z0-9_]* 456 An identifier (e.g., in a C program). 457 458\(\.$\|\. \) A period followed by <EOL> or a space. 459 460[.!?][])"']*\($\|[ ]\) A search pattern that finds the end of a sentence, 461 with almost the same definition as the ")" command. 462 463cat\Z Both "cat" and "càt" ("a" followed by 0x0300) 464 Does not match "càt" (character 0x00e0), even 465 though it may look the same. 466 467 468============================================================================== 4693. Magic */magic* 470 471Some characters in the pattern are taken literally. They match with the same 472character in the text. When preceded with a backslash however, these 473characters get a special meaning. 474 475Other characters have a special meaning without a backslash. They need to be 476preceded with a backslash to match literally. 477 478If a character is taken literally or not depends on the 'magic' option and the 479items mentioned next. 480 */\m* */\M* 481Use of "\m" makes the pattern after it be interpreted as if 'magic' is set, 482ignoring the actual value of the 'magic' option. 483Use of "\M" makes the pattern after it be interpreted as if 'nomagic' is used. 484 */\v* */\V* 485Use of "\v" means that in the pattern after it all ASCII characters except 486'0'-'9', 'a'-'z', 'A'-'Z' and '_' have a special meaning. "very magic" 487 488Use of "\V" means that in the pattern after it only the backslash has a 489special meaning. "very nomagic" 490 491Examples: 492after: \v \m \M \V matches ~ 493 'magic' 'nomagic' 494 $ $ $ \$ matches end-of-line 495 . . \. \. matches any character 496 * * \* \* any number of the previous atom 497 () \(\) \(\) \(\) grouping into an atom 498 | \| \| \| separating alternatives 499 \a \a \a \a alphabetic character 500 \\ \\ \\ \\ literal backslash 501 \. \. . . literal dot 502 \{ { { { literal '{' 503 a a a a literal 'a' 504 505{only Vim supports \m, \M, \v and \V} 506 507It is recommended to always keep the 'magic' option at the default setting, 508which is 'magic'. This avoids portability problems. To make a pattern immune 509to the 'magic' option being set or not, put "\m" or "\M" at the start of the 510pattern. 511 512 513============================================================================== 5145. Multi items *pattern-multi-items* 515 516An atom can be followed by an indication of how many times the atom can be 517matched and in what way. This is called a multi. See |/multi| for an 518overview. 519 520It is not possible to use a multi that can match more than one time after an 521atom that can match an empty string. That's because this could result in an 522endless loop. If you try it, you will get this error message: > 523 *, \+ or \{ operand could be empty 524< 525 */star* */\star* *E56* 526* (use \* when 'magic' is not set) 527 Matches 0 or more of the preceding atom, as many as possible. 528 Example 'nomagic' matches ~ 529 a* a\* "", "a", "aa", "aaa", etc. 530 .* \.\* anything, also an empty string, no end-of-line 531 \_.* \_.\* everything up to the end of the buffer 532 \_.*END \_.\*END everything up to and including the last "END" 533 in the buffer 534 535 Exception: When "*" is used at the start of the pattern or just after 536 "^" it matches the star character. 537 538 Be aware that repeating "\_." can match a lot of text and take a long 539 time. For example, "\_.*END" matches all text from the current 540 position to the last occurrence of "END" in the file. Since the "*" 541 will match as many as possible, this first skips over all lines until 542 the end of the file and then tries matching "END", backing up one 543 character at a time. 544 545 */\+* *E57* 546\+ Matches 1 or more of the preceding atom, as many as possible. {not in 547 Vi} 548 Example matches ~ 549 ^.\+$ any non-empty line 550 \s\+ white space of at least one character 551 552 */\=* 553\= Matches 0 or 1 of the preceding atom, as many as possible. {not in Vi} 554 Example matches ~ 555 foo\= "fo" and "foo" 556 557 */\?* 558\? Just like \=. Cannot be used when searching backwards with the "?" 559 command. {not in Vi} 560 561 */\{* *E58* *E60* *E554* 562\{n,m} Matches n to m of the preceding atom, as many as possible 563\{n} Matches n of the preceding atom 564\{n,} Matches at least n of the preceding atom, as many as possible 565\{,m} Matches 0 to m of the preceding atom, as many as possible 566\{} Matches 0 or more of the preceding atom, as many as possible (like *) 567 */\{-* 568\{-n,m} matches n to m of the preceding atom, as few as possible 569\{-n} matches n of the preceding atom 570\{-n,} matches at least n of the preceding atom, as few as possible 571\{-,m} matches 0 to m of the preceding atom, as few as possible 572\{-} matches 0 or more of the preceding atom, as few as possible 573 {Vi does not have any of these} 574 575 n and m are positive decimal numbers 576 577 If a "-" appears immediately after the "{", then a shortest match 578 first algorithm is used (see example below). In particular, "\{-}" is 579 the same as "*" but uses the shortest match first algorithm. BUT: A 580 match that starts earlier is preferred over a shorter match: "a\{-}b" 581 matches "aaab" in "xaaab". 582 583 Example matches ~ 584 ab\{2,3}c "abbc" or "abbbc" 585 a\{5} "aaaaa". 586 ab\{2,}c "abbc", "abbbc", "abbbbc", etc 587 ab\{,3}c "ac", "abc", "abbc" or "abbbc". 588 a[bc]\{3}d "abbbd", "abbcd", "acbcd", "acccd", etc. 589 a\(bc\)\{1,2}d "abcd" or "abcbcd" 590 a[bc]\{-}[cd] "abc" in "abcd" 591 a[bc]*[cd] "abcd" in "abcd" 592 593 The } may optionally be preceded with a backslash: \{n,m\}. 594 595 */\@=* 596\@= Matches the preceding atom with zero width. {not in Vi} 597 Like "(?=pattern)" in Perl. 598 Example matches ~ 599 foo\(bar\)\@= "foo" in "foobar" 600 foo\(bar\)\@=foo nothing 601 */zero-width* 602 When using "\@=" (or "^", "$", "\<", "\>") no characters are included 603 in the match. These items are only used to check if a match can be 604 made. This can be tricky, because a match with following items will 605 be done in the same position. The last example above will not match 606 "foobarfoo", because it tries match "foo" in the same position where 607 "bar" matched. 608 609 Note that using "\&" works the same as using "\@=": "foo\&.." is the 610 same as "\(foo\)\@=..". But using "\&" is easier, you don't need the 611 braces. 612 613 614 */\@!* 615\@! Matches with zero width if the preceding atom does NOT match at the 616 current position. |/zero-width| {not in Vi} 617 Like '(?!pattern)" in Perl. 618 Example matches ~ 619 foo\(bar\)\@! any "foo" not followed by "bar" 620 a.\{-}p\@! "a", "ap", "app", etc. not followed by a "p" 621 if \(\(then\)\@!.\)*$ "if " not followed by "then" 622 623 Using "\@!" is tricky, because there are many places where a pattern 624 does not match. "a.*p\@!" will match from an "a" to the end of the 625 line, because ".*" can match all characters in the line and the "p" 626 doesn't match at the end of the line. "a.\{-}p\@!" will match any 627 "a", "ap", "aap", etc. that isn't followed by a "p", because the "." 628 can match a "p" and "p\@!" doesn't match after that. 629 630 You can't use "\@!" to look for a non-match before the matching 631 position: "\(foo\)\@!bar" will match "bar" in "foobar", because at the 632 position where "bar" matches, "foo" does not match. To avoid matching 633 "foobar" you could use "\(foo\)\@!...bar", but that doesn't match a 634 bar at the start of a line. Use "\(foo\)\@<!bar". 635 636 */\@<=* 637\@<= Matches with zero width if the preceding atom matches just before what 638 follows. |/zero-width| {not in Vi} 639 Like '(?<=pattern)" in Perl, but Vim allows non-fixed-width patterns. 640 Example matches ~ 641 \(an\_s\+\)\@<=file "file" after "an" and white space or an 642 end-of-line 643 For speed it's often much better to avoid this multi. Try using "\zs" 644 instead |/\zs|. To match the same as the above example: 645 an\_s\+\zsfile 646 647 "\@<=" and "\@<!" check for matches just before what follows. 648 Theoretically these matches could start anywhere before this position. 649 But to limit the time needed, only the line where what follows matches 650 is searched, and one line before that (if there is one). This should 651 be sufficient to match most things and not be too slow. 652 The part of the pattern after "\@<=" and "\@<!" are checked for a 653 match first, thus things like "\1" don't work to reference \(\) inside 654 the preceding atom. It does work the other way around: 655 Example matches ~ 656 \1\@<=,\([a-z]\+\) ",abc" in "abc,abc" 657 658 */\@<!* 659\@<! Matches with zero width if the preceding atom does NOT match just 660 before what follows. Thus this matches if there is no position in the 661 current or previous line where the atom matches such that it ends just 662 before what follows. |/zero-width| {not in Vi} 663 Like '(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns. 664 The match with the preceding atom is made to end just before the match 665 with what follows, thus an atom that ends in ".*" will work. 666 Warning: This can be slow (because many positions need to be checked 667 for a match). 668 Example matches ~ 669 \(foo\)\@<!bar any "bar" that's not in "foobar" 670 \(\/\/.*\)\@\<!in "in" which is not after "//" 671 672 */\@>* 673\@> Matches the preceding atom like matching a whole pattern. {not in Vi} 674 Like '(?>pattern)" in Perl. 675 Example matches ~ 676 \(a*\)\@>a nothing (the "a*" takes all the "a"'s, there can't be 677 another one following) 678 679 This matches the preceding atom as if it was a pattern by itself. If 680 it doesn't match, there is no retry with shorter sub-matches or 681 anything. Observe this difference: "a*b" and "a*ab" both match 682 "aaab", but in the second case the "a*" matches only the first two 683 "a"s. "\(a*\)\@>ab" will not match "aaab", because the "a*" matches 684 the "aaa" (as many "a"s as possible), thus the "ab" can't match. 685 686 687============================================================================== 6886. Ordinary atoms *pattern-atoms* 689 690An ordinary atom can be: 691 692 */^* 693^ At beginning of pattern or after "\|", "\(", "\%(" or "\n": matches 694 start-of-line; at other positions, matches literal '^'. |/zero-width| 695 Example matches ~ 696 ^beep( the start of the C function "beep" (probably). 697 698 */\^* 699\^ Matches literal '^'. Can be used at any position in the pattern. 700 701 */\_^* 702\_^ Matches start-of-line. |/zero-width| Can be used at any position in 703 the pattern. 704 Example matches ~ 705 \_s*\_^foo white space and blank lines and then "foo" at 706 start-of-line 707 708 */$* 709$ At end of pattern or in front of "\|" or "\)" ("|" or ")" after "\v"): 710 matches end-of-line <EOL>; at other positions, matches literal '$'. 711 |/zero-width| 712 713 */\$* 714\$ Matches literal '$'. Can be used at any position in the pattern. 715 716 */\_$* 717\_$ Matches end-of-line. |/zero-width| Can be used at any position in the 718 pattern. Note that "a\_$b" never matches, since "b" cannot match an 719 end-of-line. Use "a\nb" instead |/\n|. 720 Example matches ~ 721 foo\_$\_s* "foo" at end-of-line and following white space and 722 blank lines 723 724. (with 'nomagic': \.) */.* */\.* 725 Matches any single character, but not an end-of-line. 726 727 */\_.* 728\_. Matches any single character or end-of-line. 729 Careful: "\_.*" matches all text to the end of the buffer! 730 731 */\<* 732\< Matches the beginning of a word: The next char is the first char of a 733 word. The 'iskeyword' option specifies what is a word character. 734 |/zero-width| 735 736 */\>* 737\> Matches the end of a word: The previous char is the last char of a 738 word. The 'iskeyword' option specifies what is a word character. 739 |/zero-width| 740 741 */\zs* 742\zs Matches at any position, and sets the start of the match there: The 743 next char is the first char of the whole match. |/zero-width| 744 Example: > 745 /^\s*\zsif 746< matches an "if" at the start of a line, ignoring white space. 747 Can be used multiple times, the last one encountered in a matching 748 branch is used. Example: > 749 /\(.\{-}\zsFab\)\{3} 750< Finds the third occurrence of "Fab". 751 {not in Vi} {not available when compiled without the +syntax feature} 752 */\ze* 753\ze Matches at any position, and sets the end of the match there: The 754 previous char is the last char of the whole match. |/zero-width| 755 Can be used multiple times, the last one encountered in a matching 756 branch is used. 757 Example: "end\ze\(if\|for\)" matches the "end" in "endif" and 758 "endfor". 759 {not in Vi} {not available when compiled without the +syntax feature} 760 761 */\%^* *start-of-file* 762\%^ Matches start of the file. When matching with a string, matches the 763 start of the string. {not in Vi} 764 For example, to find the first "VIM" in a file: > 765 /\%^\_.\{-}\zsVIM 766< 767 */\%$* *end-of-file* 768\%$ Matches end of the file. When matching with a string, matches the 769 end of the string. {not in Vi} 770 Note that this does NOT find the last "VIM" in a file: > 771 /VIM\_.\{-}\%$ 772< It will find the next VIM, because the part after it will always 773 match. This one will find the last "VIM" in the file: > 774 /VIM\ze\(\(VIM\)\@!\_.\)*\%$ 775< This uses |/\@!| to ascertain that "VIM" does NOT match in any 776 position after the first "VIM". 777 Searching from the end of the file backwards is easier! 778 779 */\%#* *cursor-position* 780\%# Matches with the cursor position. Only works when matching in a 781 buffer displayed in a window. {not in Vi} 782 WARNING: When the cursor is moved after the pattern was used, the 783 result becomes invalid. Vim doesn't automatically update the matches. 784 This is especially relevant for syntax highlighting and 'hlsearch'. 785 In other words: When the cursor moves the display isn't updated for 786 this change. An update is done for lines which are changed (the whole 787 line is updated) or when using the |CTRL-L| command (the whole screen 788 is updated). Example, to highlight the word under the cursor: > 789 /\k*\%#\k* 790< When 'hlsearch' is set and you move the cursor around and make changes 791 this will clearly show when the match is updated or not. 792 793 */\%l* */\%>l* */\%<l* 794\%23l Matches in a specific line. 795\%<23l Matches above a specific line. 796\%>23l Matches below a specific line. 797 These three can be used to match specific lines in a buffer. The "23" 798 can be any line number. The first line is 1. {not in Vi} 799 WARNING: When inserting or deleting lines Vim does not automatically 800 update the matches. This means Syntax highlighting quickly becomes 801 wrong. 802 Example, to highlight the line where the cursor currently is: > 803 :exe '/\%' . line(".") . 'l.*' 804< When 'hlsearch' is set and you move the cursor around and make changes 805 this will clearly show when the match is updated or not. 806 807 */\%c* */\%>c* */\%<c* 808\%23c Matches in a specific column. 809\%<23c Matches before a specific column. 810\%>23c Matches after a specific column. 811 These three can be used to match specific columns in a buffer or 812 string. The "23" can be any column number. The first column is 1. 813 Actually, the column is the byte number (thus it's not exactly right 814 for multi-byte characters). {not in Vi} 815 WARNING: When inserting or deleting text Vim does not automatically 816 update the matches. This means Syntax highlighting quickly becomes 817 wrong. 818 Example, to highlight the column where the cursor currently is: > 819 :exe '/\%' . col(".") . 'c' 820< When 'hlsearch' is set and you move the cursor around and make changes 821 this will clearly show when the match is updated or not. 822 Example for matching a single byte in column 44: > 823 /\%>43c.\%<46c 824< Note that "\%<46c" matches in column 45 when the "." matches a byte in 825 column 44. 826 */\%v* */\%>v* */\%<v* 827\%23v Matches in a specific virtual column. 828\%<23v Matches before a specific virtual column. 829\%>23v Matches after a specific virtual column. 830 These three can be used to match specific virtual columns in a buffer 831 or string. When not matching with a buffer in a window, the option 832 values of the current window are used (e.g., 'tabstop'). 833 The "23" can be any column number. The first column is 1. 834 Note that some virtual column positions will never match, because they 835 are halfway a Tab or other character that occupies more than one 836 screen character. {not in Vi} 837 WARNING: When inserting or deleting text Vim does not automatically 838 update the matches. This means Syntax highlighting quickly becomes 839 wrong. 840 Example, to highlight the all characters after virtual column 72: > 841 /\%>72v.* 842< When 'hlsearch' is set and you move the cursor around and make changes 843 this will clearly show when the match is updated or not. 844 To match the text up to column 17: > 845 /.*\%17v 846< Column 17 is not included, because that's where the "\%17v" matches, 847 and since this is a |/zero-width| match, column 17 isn't included in 848 the match. This does the same: > 849 /.*\%<18v 850< 851 852Character classes: {not in Vi} 853\i identifier character (see 'isident' option) */\i* 854\I like "\i", but excluding digits */\I* 855\k keyword character (see 'iskeyword' option) */\k* 856\K like "\k", but excluding digits */\K* 857\f file name character (see 'isfname' option) */\f* 858\F like "\f", but excluding digits */\F* 859\p printable character (see 'isprint' option) */\p* 860\P like "\p", but excluding digits */\P* 861 862NOTE: the above also work for multi-byte characters. The ones below only 863match ASCII characters, as indicated by the range. 864 865 *whitespace* *white-space* 866\s whitespace character: <Space> and <Tab> */\s* 867\S non-whitespace character; opposite of \s */\S* 868\d digit: [0-9] */\d* 869\D non-digit: [^0-9] */\D* 870\x hex digit: [0-9A-Fa-f] */\x* 871\X non-hex digit: [^0-9A-Fa-f] */\X* 872\o octal digit: [0-7] */\o* 873\O non-octal digit: [^0-7] */\O* 874\w word character: [0-9A-Za-z_] */\w* 875\W non-word character: [^0-9A-Za-z_] */\W* 876\h head of word character: [A-Za-z_] */\h* 877\H non-head of word character: [^A-Za-z_] */\H* 878\a alphabetic character: [A-Za-z] */\a* 879\A non-alphabetic character: [^A-Za-z] */\A* 880\l lowercase character: [a-z] */\l* 881\L non-lowercase character: [^a-z] */\L* 882\u uppercase character: [A-Z] */\u* 883\U non-uppercase character [^A-Z] */\U* 884 885 NOTE: Using the atom is faster than the [] form. 886 887 NOTE: 'ignorecase', "\c" and "\C" are not used by character classes. 888 889 */\_* *E63* */\_i* */\_I* */\_k* */\_K* */\_f* */\_F* 890 */\_p* */\_P* */\_s* */\_S* */\_d* */\_D* */\_x* */\_X* 891 */\_o* */\_O* */\_w* */\_W* */\_h* */\_H* */\_a* */\_A* 892 */\_l* */\_L* */\_u* */\_U* 893\_x Where "x" is any of the characters above: The character class with 894 end-of-line added 895(end of character classes) 896 897\e matches <Esc> */\e* 898\t matches <Tab> */\t* 899\r matches <CR> */\r* 900\b matches <BS> */\b* 901\n matches an end-of-line */\n* 902 When matching in a string instead of buffer text a literal newline 903 character is matched. 904 905~ matches the last given substitute string */~* */\~* 906 907\(\) A pattern enclosed by escaped parentheses. */\(* */\(\)* */\)* 908 E.g., "\(^a\)" matches 'a' at the start of a line. *E51* *E54* *E55* 909 910\1 Matches the same string that was matched by */\1* *E65* 911 the first sub-expression in \( and \). {not in Vi} 912 Example: "\([a-z]\).\1" matches "ata", "ehe", "tot", etc. 913\2 Like "\1", but uses second sub-expression, */\2* 914 ... */\3* 915\9 Like "\1", but uses ninth sub-expression. */\9* 916 Note: The numbering of groups is done based on which "\(" comes first 917 in the pattern (going left to right), NOT based on what is matched 918 first. 919 920\%(\) A pattern enclosed by escaped parentheses. */\%(\)* */\%(* *E53* 921 Just like \(\), but without counting it as a sub-expression. This 922 allows using more groups and it's a little bit faster. 923 {not in Vi} 924 925x A single character, with no special meaning, matches itself 926 927 */\* */\\* 928\x A backslash followed by a single character, with no special meaning, 929 is reserved for future expansions 930 931[] (with 'nomagic': \[]) */[]* */\[]* */\_[]* */collection* 932\_[] 933 A collection. This is a sequence of characters enclosed in brackets. 934 It matches any single character in the collection. 935 Example matches ~ 936 [xyz] any 'x', 'y' or 'z' 937 [a-zA-Z]$ any alphabetic character at the end of a line 938 \c[a-z]$ same 939 940 With "\_" prepended the collection also includes the end-of-line. 941 The same can be done by including "\n" in the collection. The 942 end-of-line is also matched when the collection starts with "^"! Thus 943 "\_[^ab]" matches the end-of-line and any character but "a" and "b". 944 This makes it Vi compatible: Without the "\_" or "\n" the collection 945 does not match an end-of-line. 946 947 If the sequence begins with "^", it matches any single character NOT 948 in the collection: "[^xyz]" matches anything but 'x', 'y' and 'z'. 949 - If two characters in the sequence are separated by '-', this is 950 shorthand for the full list of ASCII characters between them. E.g., 951 "[0-9]" matches any decimal digit. 952 - A character class expression is evaluated to the set of characters 953 belonging to that character class. The following character classes 954 are supported: 955 Name Contents ~ 956*[:alnum:]* [:alnum:] letters and digits 957*[:alpha:]* [:alpha:] letters 958*[:blank:]* [:blank:] space and tab characters 959*[:cntrl:]* [:cntrl:] control characters 960*[:digit:]* [:digit:] decimal digits 961*[:graph:]* [:graph:] printable characters excluding space 962*[:lower:]* [:lower:] lowercase letters (all letters when 963 'ignorecase' is used) 964*[:print:]* [:print:] printable characters including space 965*[:punct:]* [:punct:] punctuation characters 966*[:space:]* [:space:] whitespace characters 967*[:upper:]* [:upper:] uppercase letters (all letters when 968 'ignorecase' is used) 969*[:xdigit:]* [:xdigit:] hexadecimal digits 970*[:return:]* [:return:] the <CR> character 971*[:tab:]* [:tab:] the <Tab> character 972*[:escape:]* [:escape:] the <Esc> character 973*[:backspace:]* [:backspace:] the <BS> character 974 The brackets in character class expressions are additional to the 975 brackets delimiting a collection. For example, the following is a 976 plausible pattern for a UNIX filename: "[-./[:alnum:]_~]\+" That is, 977 a list of at least one character, each of which is either '-', '.', 978 '/', alphabetic, numeric, '_' or '~'. 979 These items only work for 8-bit characters. 980 */\]* 981 - To include a literal ']', '^', '-' or '\' in the collection, put a 982 backslash before it: "[xyz\]]", "[\^xyz]", "[xy\-z]" and "[xyz\\]". 983 (Note: POSIX does not support the use of a backslash this way). For 984 ']' you can also make it the first character (following a possible 985 "^"): "[]xyz]" or "[^]xyz]" {not in Vi}. 986 For '-' you can also make it the first or last character: "[-xyz]", 987 "[^-xyz]" or "[xyz-]". For '\' you can also let it be followed by 988 any character that's not in "^]-\bertn". "[\xyz]" matches '\', 'x', 989 'y' and 'z'. It's better to use "\\" though, future expansions may 990 use other characters after '\'. 991 - The following translations are accepted when the 'l' flag is not 992 included in 'cpoptions' {not in Vi}: 993 \e <Esc> 994 \t <Tab> 995 \r <CR> (NOT end-of-line!) 996 \b <BS> 997 \d123 decimal number of character 998 \o40 octal number of character up to 0377 999 \x20 hexadecimal number of character up to 0xff 1000 \u20AC hex. number of multibyte character up to 0xffff 1001 \U1234 hex. number of multibyte character up to 0xffffffff 1002 NOTE: The other backslash codes mentioned above do not work inside 1003 []! 1004 - Matching with a collection can be slow, because each character in 1005 the text has to be compared with each character in the collection. 1006 Use one of the other atoms above when possible. Example: "\d" is 1007 much faster than "[0-9]" and matches the same characters. 1008 1009 */\%[]* *E69* *E70* *E369* 1010\%[] A sequence of optionally matched atoms. This always matches. 1011 It matches as much of the list of atoms it contains as possible. Thus 1012 it stops at the first atom that doesn't match. For example: > 1013 /r\%[ead] 1014< matches "r", "re", "rea" or "read". The longest that matches is used. 1015 To match the Ex command "function", where "fu" is required and 1016 "nction" is optional, this would work: > 1017 /\<fu\%[nction]\> 1018< The end-of-word atom "\>" is used to avoid matching "fu" in "full". 1019 It gets more complicated when the atoms are not ordinary characters. 1020 You don't often have to use it, but it is possible. Example: > 1021 /\<r\%[[eo]ad]\> 1022< Matches the words "r", "re", "ro", "rea", "roa", "read" and "road". 1023 {not available when compiled without the +syntax feature} 1024 1025 */\%d* */\%x* */\%o* */\%u* */\%U/* *E678* 1026 1027\%d123 Matches the character specified with a decimal number. Must be 1028 followed by a non-digit. 1029\%o40 Matches the character specified with an octal number up to 0377. 1030 Numbers below 040 must be followed by a non-octal digit or a non-digit. 1031\%x2a Matches the character specified with up to two hexadecimal characters. 1032\%u20AC Matches the character specified with up to four hexadecimal 1033 characters. 1034\%U1234abcd Matches the character specified with up to eight hexadecimal 1035 characters. 1036 1037============================================================================== 10387. Ignoring case in a pattern */ignorecase* 1039 1040If the 'ignorecase' option is on, the case of normal letters is ignored. 1041'smartcase' can be set to ignore case when the pattern contains lowercase 1042letters only. 1043 */\c* */\C* 1044When "\c" appears anywhere in the pattern, the whole pattern is handled like 1045'ignorecase' is on. The actual value of 'ignorecase' and 'smartcase' is 1046ignored. "\C" does the opposite: Force matching case for the whole pattern. 1047{only Vim supports \c and \C} 1048Note that 'ignorecase', "\c" and "\C" are not used for the character classes. 1049 1050Examples: 1051 pattern 'ignorecase' 'smartcase' matches ~ 1052 foo off - foo 1053 foo on - foo Foo FOO 1054 Foo on off foo Foo FOO 1055 Foo on on Foo 1056 \cfoo - - foo Foo FOO 1057 foo\C - - foo 1058 1059 */\Z* 1060When "\Z" appears anywhere in the pattern, composing characters are ignored. 1061Thus only the base characters need to match, the composing characters may be 1062different and the number of composing characters may differ. Only relevant 1063when 'encoding' is "utf-8". 1064 1065Technical detail: *NL-used-for-Nul* 1066<Nul> characters in the file are stored as <NL> in memory. In the display 1067they are shown as "^@". The translation is done when reading and writing 1068files. To match a <Nul> with a search pattern you can just enter CTRL-@ or 1069"CTRL-V 000". This is probably just what you expect. Internally the 1070character is replaced with a <NL> in the search pattern. What is unusual is 1071that typing CTRL-V CTRL-J also inserts a <NL>, thus also searches for a <Nul> 1072in the file. {Vi cannot handle <Nul> characters in the file at all} 1073 1074 *CR-used-for-NL* 1075When 'fileformat' is "mac", <NL> characters in the file are stored as <CR> 1076characters internally. In the display they are shown as "^M". Otherwise this 1077works similar to the usage of <NL> for a <Nul>. 1078 1079When working with expression evaluation, a <NL> character in the pattern 1080matches a <NL> in the string. The use of "\n" (backslash n) to match a <NL> 1081doesn't work there, it only works to match text in the buffer. 1082 1083 *pattern-multi-byte* 1084Patterns will also work with multi-byte characters, mostly as you would 1085expect. But invalid bytes may cause trouble, a pattern with an invalid byte 1086will probably never match. 1087 1088============================================================================== 10898. Compare with Perl patterns *perl-patterns* 1090 1091Vim's regexes are most similar to Perl's, in terms of what you can do. The 1092difference between them is mostly just notation; here's a summary of where 1093they differ: 1094 1095Capability in Vimspeak in Perlspeak ~ 1096---------------------------------------------------------------- 1097force case insensitivity \c (?i) 1098force case sensitivity \C (?-i) 1099backref-less grouping \%(atom) (?:atom) 1100conservative quantifiers \{-n,m} *?, +?, ??, {}? 11010-width match atom\@= (?=atom) 11020-width non-match atom\@! (?!atom) 11030-width preceding match atom\@<= (?<=atom) 11040-width preceding non-match atom\@<! (?<!atom) 1105match without retry atom\@> (?>atom) 1106 1107Vim and Perl handle newline characters inside a string a bit differently: 1108 1109In Perl, ^ and $ only match at the very beginning and end of the text, 1110by default, but you can set the 'm' flag, which lets them match at 1111embedded newlines as well. You can also set the 's' flag, which causes 1112a . to match newlines as well. (Both these flags can be changed inside 1113a pattern using the same syntax used for the i flag above, BTW.) 1114 1115On the other hand, Vim's ^ and $ always match at embedded newlines, and 1116you get two separate atoms, \%^ and \%$, which only match at the very 1117start and end of the text, respectively. Vim solves the second problem 1118by giving you the \_ "modifier": put it in front of a . or a character 1119class, and they will match newlines as well. 1120 1121Finally, these constructs are unique to Perl: 1122- execution of arbitrary code in the regex: (?{perl code}) 1123- conditional expressions: (?(condition)true-expr|false-expr) 1124 1125...and these are unique to Vim: 1126- changing the magic-ness of a pattern: \v \V \m \M 1127 (very useful for avoiding backslashitis) 1128- sequence of optionally matching atoms: \%[atoms] 1129- \& (which is to \| what "and" is to "or"; it forces several branches 1130 to match at one spot) 1131- matching lines/columns by number: \%5l \%5c \%5v 1132- limiting the "return value" of a regex: \zs \ze 1133 1134============================================================================== 11359. Highlighting matches *match-highlight* 1136 1137 *:mat* *:match* 1138:mat[ch] {group} /{pattern}/ 1139 Define a pattern to highlight in the current window. It will 1140 be highlighted with {group}. Example: > 1141 :highlight MyGroup ctermbg=green guibg=green 1142 :match MyGroup /TODO/ 1143< Instead of // any character can be used to mark the start and 1144 end of the {pattern}. Watch out for using special characters, 1145 such as '"' and '|'. 1146 {group} must exist at the moment this command is executed. 1147 The match overrides the 'hlsearch' highlighting. 1148 'ignorecase' does not apply, use |/\c| in the pattern to 1149 ignore case. Otherwise case is not ignored. 1150 Note that highlighting the last used search pattern with 1151 'hlsearch' is used in all windows, while the pattern defined 1152 with ":match" only exists in the current window. It is kept 1153 when switching to another buffer. 1154 Another example, which highlights all characters in virtual 1155 column 72 and more: > 1156 :highlight rightMargin term=bold ctermfg=blue guifg=blue 1157 :match rightMargin /.\%>72v/ 1158< To highlight all character that are in virtual column 7: > 1159 :highlight col8 ctermbg=grey guibg=grey 1160 :match col8 /\%<8v.\%>7v/ 1161< Note the use of two items to also match a character that 1162 occupies more than one virtual column, such as a TAB. 1163 1164:mat[ch] 1165:mat[ch] none 1166 Clear a previously defined match pattern. 1167 1168 vim:tw=78:ts=8:ft=help:norl: 1169