Bram Moolenaar | eab6dff | 2020-03-01 19:06:45 +0100 | [diff] [blame] | 1 | *usr_03.txt* For Vim version 8.2. Last change: 2020 Feb 29 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 2 | |
| 3 | VIM USER MANUAL - by Bram Moolenaar |
| 4 | |
| 5 | Moving around |
| 6 | |
| 7 | |
| 8 | Before you can insert or delete text the cursor has to be moved to the right |
| 9 | place. Vim has a large number of commands to position the cursor. This |
| 10 | chapter shows you how to use the most important ones. You can find a list of |
| 11 | these commands below |Q_lr|. |
| 12 | |
| 13 | |03.1| Word movement |
| 14 | |03.2| Moving to the start or end of a line |
| 15 | |03.3| Moving to a character |
Bram Moolenaar | 4399ef4 | 2005-02-12 14:29:27 +0000 | [diff] [blame] | 16 | |03.4| Matching a parenthesis |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 17 | |03.5| Moving to a specific line |
| 18 | |03.6| Telling where you are |
| 19 | |03.7| Scrolling around |
| 20 | |03.8| Simple searches |
| 21 | |03.9| Simple search patterns |
| 22 | |03.10| Using marks |
| 23 | |
| 24 | Next chapter: |usr_04.txt| Making small changes |
| 25 | Previous chapter: |usr_02.txt| The first steps in Vim |
| 26 | Table of contents: |usr_toc.txt| |
| 27 | |
| 28 | ============================================================================== |
| 29 | *03.1* Word movement |
| 30 | |
| 31 | To move the cursor forward one word, use the "w" command. Like most Vim |
| 32 | commands, you can use a numeric prefix to move past multiple words. For |
| 33 | example, "3w" moves three words. This figure shows how it works: |
| 34 | |
| 35 | This is a line with example text ~ |
| 36 | --->-->->-----------------> |
| 37 | w w w 3w |
| 38 | |
| 39 | Notice that "w" moves to the start of the next word if it already is at the |
| 40 | start of a word. |
| 41 | The "b" command moves backward to the start of the previous word: |
| 42 | |
| 43 | This is a line with example text ~ |
| 44 | <----<--<-<---------<--- |
| 45 | b b b 2b b |
| 46 | |
| 47 | There is also the "e" command that moves to the next end of a word and "ge", |
| 48 | which moves to the previous end of a word: |
| 49 | |
| 50 | This is a line with example text ~ |
| 51 | <- <--- -----> ----> |
| 52 | ge ge e e |
| 53 | |
| 54 | If you are at the last word of a line, the "w" command will take you to the |
| 55 | first word in the next line. Thus you can use this to move through a |
| 56 | paragraph, much faster than using "l". "b" does the same in the other |
| 57 | direction. |
| 58 | |
| 59 | A word ends at a non-word character, such as a ".", "-" or ")". To change |
Bram Moolenaar | 256972a | 2015-12-29 19:10:25 +0100 | [diff] [blame] | 60 | what Vim considers to be a word, see the 'iskeyword' option. If you try this |
| 61 | out in the help directly, 'iskeyword' needs to be reset for the examples to |
| 62 | work: > |
| 63 | :set iskeyword& |
| 64 | It is also possible to move by white-space separated WORDs. This is not a |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 65 | word in the normal sense, that's why the uppercase is used. The commands for |
| 66 | moving by WORDs are also uppercase, as this figure shows: |
| 67 | |
| 68 | ge b w e |
| 69 | <- <- ---> ---> |
| 70 | This is-a line, with special/separated/words (and some more). ~ |
| 71 | <----- <----- --------------------> -----> |
| 72 | gE B W E |
| 73 | |
| 74 | With this mix of lowercase and uppercase commands, you can quickly move |
| 75 | forward and backward through a paragraph. |
| 76 | |
| 77 | ============================================================================== |
| 78 | *03.2* Moving to the start or end of a line |
| 79 | |
| 80 | The "$" command moves the cursor to the end of a line. If your keyboard has |
| 81 | an <End> key it will do the same thing. |
| 82 | |
| 83 | The "^" command moves to the first non-blank character of the line. The "0" |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 84 | command (zero) moves to the very first character of the line, and the <Home> |
| 85 | key does the same thing. In a picture: |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 86 | |
| 87 | ^ |
| 88 | <------------ |
| 89 | .....This is a line with example text ~ |
| 90 | <----------------- ---------------> |
| 91 | 0 $ |
| 92 | |
| 93 | (the "....." indicates blanks here) |
| 94 | |
| 95 | The "$" command takes a count, like most movement commands. But moving to |
| 96 | the end of the line several times doesn't make sense. Therefore it causes the |
| 97 | editor to move to the end of another line. For example, "1$" moves you to |
| 98 | the end of the first line (the one you're on), "2$" to the end of the next |
| 99 | line, and so on. |
| 100 | The "0" command doesn't take a count argument, because the "0" would be |
| 101 | part of the count. Unexpectedly, using a count with "^" doesn't have any |
| 102 | effect. |
| 103 | |
| 104 | ============================================================================== |
| 105 | *03.3* Moving to a character |
| 106 | |
| 107 | One of the most useful movement commands is the single-character search |
| 108 | command. The command "fx" searches forward in the line for the single |
| 109 | character x. Hint: "f" stands for "Find". |
| 110 | For example, you are at the beginning of the following line. Suppose you |
| 111 | want to go to the h of human. Just execute the command "fh" and the cursor |
| 112 | will be positioned over the h: |
| 113 | |
| 114 | To err is human. To really foul up you need a computer. ~ |
| 115 | ---------->---------------> |
| 116 | fh fy |
| 117 | |
| 118 | This also shows that the command "fy" moves to the end of the word really. |
| 119 | You can specify a count; therefore, you can go to the "l" of "foul" with |
| 120 | "3fl": |
| 121 | |
| 122 | To err is human. To really foul up you need a computer. ~ |
| 123 | ---------------------> |
| 124 | 3fl |
| 125 | |
| 126 | The "F" command searches to the left: |
| 127 | |
| 128 | To err is human. To really foul up you need a computer. ~ |
| 129 | <--------------------- |
| 130 | Fh |
| 131 | |
| 132 | The "tx" command works like the "fx" command, except it stops one character |
| 133 | before the searched character. Hint: "t" stands for "To". The backward |
| 134 | version of this command is "Tx". |
| 135 | |
| 136 | To err is human. To really foul up you need a computer. ~ |
| 137 | <------------ -------------> |
| 138 | Th tn |
| 139 | |
| 140 | These four commands can be repeated with ";". "," repeats in the other |
| 141 | direction. The cursor is never moved to another line. Not even when the |
| 142 | sentence continues. |
| 143 | |
| 144 | Sometimes you will start a search, only to realize that you have typed the |
| 145 | wrong command. You type "f" to search backward, for example, only to realize |
| 146 | that you really meant "F". To abort a search, press <Esc>. So "f<Esc>" is an |
| 147 | aborted forward search and doesn't do anything. Note: <Esc> cancels most |
| 148 | operations, not just searches. |
| 149 | |
| 150 | ============================================================================== |
Bram Moolenaar | 4399ef4 | 2005-02-12 14:29:27 +0000 | [diff] [blame] | 151 | *03.4* Matching a parenthesis |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 152 | |
| 153 | When writing a program you often end up with nested () constructs. Then the |
| 154 | "%" command is very handy: It moves to the matching paren. If the cursor is |
| 155 | on a "(" it will move to the matching ")". If it's on a ")" it will move to |
| 156 | the matching "(". |
| 157 | |
| 158 | % |
| 159 | <-----> |
| 160 | if (a == (b * c) / d) ~ |
| 161 | <----------------> |
| 162 | % |
| 163 | |
| 164 | This also works for [] and {} pairs. (This can be defined with the |
| 165 | 'matchpairs' option.) |
| 166 | |
| 167 | When the cursor is not on a useful character, "%" will search forward to find |
| 168 | one. Thus if the cursor is at the start of the line of the previous example, |
| 169 | "%" will search forward and find the first "(". Then it moves to its match: |
| 170 | |
| 171 | if (a == (b * c) / d) ~ |
| 172 | ---+----------------> |
| 173 | % |
| 174 | |
| 175 | ============================================================================== |
| 176 | *03.5* Moving to a specific line |
| 177 | |
| 178 | If you are a C or C++ programmer, you are familiar with error messages such as |
| 179 | the following: |
| 180 | |
| 181 | prog.c:33: j undeclared (first use in this function) ~ |
| 182 | |
| 183 | This tells you that you might want to fix something on line 33. So how do you |
| 184 | find line 33? One way is to do "9999k" to go to the top of the file and "32j" |
Bram Moolenaar | 3df0173 | 2017-02-17 22:47:16 +0100 | [diff] [blame] | 185 | to go down thirty-two lines. It is not a good way, but it works. A much |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 186 | better way of doing things is to use the "G" command. With a count, this |
| 187 | command positions you at the given line number. For example, "33G" puts you |
| 188 | on line 33. (For a better way of going through a compiler's error list, see |
| 189 | |usr_30.txt|, for information on the :make command.) |
| 190 | With no argument, "G" positions you at the end of the file. A quick way to |
| 191 | go to the start of a file use "gg". "1G" will do the same, but is a tiny bit |
| 192 | more typing. |
| 193 | |
| 194 | | first line of a file ^ |
| 195 | | text text text text | |
| 196 | | text text text text | gg |
| 197 | 7G | text text text text | |
| 198 | | text text text text |
| 199 | | text text text text |
| 200 | V text text text text | |
| 201 | text text text text | G |
| 202 | text text text text | |
| 203 | last line of a file V |
| 204 | |
| 205 | Another way to move to a line is using the "%" command with a count. For |
| 206 | example "50%" moves you to halfway the file. "90%" goes to near the end. |
| 207 | |
| 208 | The previous assumes that you want to move to a line in the file, no matter if |
| 209 | it's currently visible or not. What if you want to move to one of the lines |
| 210 | you can see? This figure shows the three commands you can use: |
| 211 | |
| 212 | +---------------------------+ |
| 213 | H --> | text sample text | |
| 214 | | sample text | |
| 215 | | text sample text | |
| 216 | | sample text | |
| 217 | M --> | text sample text | |
| 218 | | sample text | |
| 219 | | text sample text | |
| 220 | | sample text | |
| 221 | L --> | text sample text | |
| 222 | +---------------------------+ |
| 223 | |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 224 | Hints: "H" stands for Home, "M" for Middle and "L" for Last. Alternatively, |
| 225 | "H" for high, "M" for Middle and "L" for low. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 226 | |
| 227 | ============================================================================== |
| 228 | *03.6* Telling where you are |
| 229 | |
| 230 | To see where you are in a file, there are three ways: |
| 231 | |
| 232 | 1. Use the CTRL-G command. You get a message like this (assuming the 'ruler' |
| 233 | option is off): |
| 234 | |
| 235 | "usr_03.txt" line 233 of 650 --35%-- col 45-52 ~ |
| 236 | |
| 237 | This shows the name of the file you are editing, the line number where the |
| 238 | cursor is, the total number of lines, the percentage of the way through |
| 239 | the file and the column of the cursor. |
| 240 | Sometimes you will see a split column number. For example, "col 2-9". |
| 241 | This indicates that the cursor is positioned on the second character, but |
| 242 | because character one is a tab, occupying eight spaces worth of columns, |
| 243 | the screen column is 9. |
| 244 | |
| 245 | 2. Set the 'number' option. This will display a line number in front of |
| 246 | every line: > |
| 247 | |
| 248 | :set number |
| 249 | < |
| 250 | To switch this off again: > |
| 251 | |
| 252 | :set nonumber |
| 253 | < |
| 254 | Since 'number' is a boolean option, prepending "no" to its name has the |
| 255 | effect of switching it off. A boolean option has only these two values, |
| 256 | it is either on or off. |
| 257 | Vim has many options. Besides the boolean ones there are options with |
| 258 | a numerical value and string options. You will see examples of this where |
| 259 | they are used. |
| 260 | |
| 261 | 3. Set the 'ruler' option. This will display the cursor position in the |
| 262 | lower right corner of the Vim window: > |
| 263 | |
| 264 | :set ruler |
| 265 | |
| 266 | Using the 'ruler' option has the advantage that it doesn't take much room, |
| 267 | thus there is more space for your text. |
| 268 | |
| 269 | ============================================================================== |
| 270 | *03.7* Scrolling around |
| 271 | |
| 272 | The CTRL-U command scrolls down half a screen of text. Think of looking |
| 273 | through a viewing window at the text and moving this window up by half the |
| 274 | height of the window. Thus the window moves up over the text, which is |
| 275 | backward in the file. Don't worry if you have a little trouble remembering |
| 276 | which end is up. Most users have the same problem. |
| 277 | The CTRL-D command moves the viewing window down half a screen in the file, |
| 278 | thus scrolls the text up half a screen. |
| 279 | |
| 280 | +----------------+ |
| 281 | | some text | |
| 282 | | some text | |
| 283 | | some text | |
| 284 | +---------------+ | some text | |
| 285 | | some text | CTRL-U --> | | |
| 286 | | | | 123456 | |
| 287 | | 123456 | +----------------+ |
| 288 | | 7890 | |
| 289 | | | +----------------+ |
| 290 | | example | CTRL-D --> | 7890 | |
| 291 | +---------------+ | | |
| 292 | | example | |
| 293 | | example | |
| 294 | | example | |
| 295 | | example | |
| 296 | +----------------+ |
| 297 | |
| 298 | To scroll one line at a time use CTRL-E (scroll up) and CTRL-Y (scroll down). |
| 299 | Think of CTRL-E to give you one line Extra. (If you use MS-Windows compatible |
| 300 | key mappings CTRL-Y will redo a change instead of scroll.) |
| 301 | |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 302 | To scroll forward by a whole screen (except for two lines) use CTRL-F. To |
| 303 | scroll backwards, use CTRL-B. These should be easy to remember: F for |
| 304 | Forwards and B for Backwards. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 305 | |
| 306 | A common issue is that after moving down many lines with "j" your cursor is at |
| 307 | the bottom of the screen. You would like to see the context of the line with |
| 308 | the cursor. That's done with the "zz" command. |
| 309 | |
| 310 | +------------------+ +------------------+ |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 311 | | earlier text | | earlier text | |
| 312 | | earlier text | | earlier text | |
| 313 | | earlier text | | earlier text | |
| 314 | | earlier text | zz --> | line with cursor | |
| 315 | | earlier text | | later text | |
| 316 | | earlier text | | later text | |
| 317 | | line with cursor | | later text | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 318 | +------------------+ +------------------+ |
| 319 | |
| 320 | The "zt" command puts the cursor line at the top, "zb" at the bottom. There |
| 321 | are a few more scrolling commands, see |Q_sc|. To always keep a few lines of |
| 322 | context around the cursor, use the 'scrolloff' option. |
| 323 | |
| 324 | ============================================================================== |
| 325 | *03.8* Simple searches |
| 326 | |
| 327 | To search for a string, use the "/string" command. To find the word include, |
| 328 | for example, use the command: > |
| 329 | |
| 330 | /include |
| 331 | |
| 332 | You will notice that when you type the "/" the cursor jumps to the last line |
| 333 | of the Vim window, like with colon commands. That is where you type the word. |
| 334 | You can press the backspace key (backarrow or <BS>) to make corrections. Use |
| 335 | the <Left> and <Right> cursor keys when necessary. |
| 336 | Pressing <Enter> executes the command. |
| 337 | |
| 338 | Note: |
Bram Moolenaar | 402d2fe | 2005-04-15 21:00:38 +0000 | [diff] [blame] | 339 | The characters .*[]^%/\?~$ have special meanings. If you want to use |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 340 | them in a search you must put a \ in front of them. See below. |
| 341 | |
| 342 | To find the next occurrence of the same string use the "n" command. Use this |
| 343 | to find the first #include after the cursor: > |
| 344 | |
| 345 | /#include |
| 346 | |
| 347 | And then type "n" several times. You will move to each #include in the text. |
| 348 | You can also use a count if you know which match you want. Thus "3n" finds |
Bram Moolenaar | eab6dff | 2020-03-01 19:06:45 +0100 | [diff] [blame] | 349 | the third match. You can also use a count with "/": "4/the" goes to the |
| 350 | fourth match of "the". |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 351 | |
| 352 | The "?" command works like "/" but searches backwards: > |
| 353 | |
| 354 | ?word |
| 355 | |
| 356 | The "N" command repeats the last search the opposite direction. Thus using |
Bram Moolenaar | b6e0ec6 | 2017-07-23 22:12:20 +0200 | [diff] [blame] | 357 | "N" after a "/" command searches backwards, using "N" after "?" searches |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 358 | forwards. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 359 | |
| 360 | |
| 361 | IGNORING CASE |
| 362 | |
| 363 | Normally you have to type exactly what you want to find. If you don't care |
| 364 | about upper or lowercase in a word, set the 'ignorecase' option: > |
| 365 | |
| 366 | :set ignorecase |
| 367 | |
| 368 | If you now search for "word", it will also match "Word" and "WORD". To match |
| 369 | case again: > |
| 370 | |
| 371 | :set noignorecase |
| 372 | |
| 373 | |
| 374 | HISTORY |
| 375 | |
| 376 | Suppose you do three searches: > |
| 377 | |
| 378 | /one |
| 379 | /two |
| 380 | /three |
| 381 | |
| 382 | Now let's start searching by typing a simple "/" without pressing <Enter>. If |
| 383 | you press <Up> (the cursor key), Vim puts "/three" on the command line. |
| 384 | Pressing <Enter> at this point searches for three. If you do not press |
| 385 | <Enter>, but press <Up> instead, Vim changes the prompt to "/two". Another |
| 386 | press of <Up> moves you to "/one". |
| 387 | You can also use the <Down> cursor key to move through the history of |
| 388 | search commands in the other direction. |
| 389 | |
| 390 | If you know what a previously used pattern starts with, and you want to use it |
| 391 | again, type that character before pressing <Up>. With the previous example, |
| 392 | you can type "/o<Up>" and Vim will put "/one" on the command line. |
| 393 | |
| 394 | The commands starting with ":" also have a history. That allows you to recall |
| 395 | a previous command and execute it again. These two histories are separate. |
| 396 | |
| 397 | |
| 398 | SEARCHING FOR A WORD IN THE TEXT |
| 399 | |
| 400 | Suppose you see the word "TheLongFunctionName" in the text and you want to |
| 401 | find the next occurrence of it. You could type "/TheLongFunctionName", but |
| 402 | that's a lot of typing. And when you make a mistake Vim won't find it. |
| 403 | There is an easier way: Position the cursor on the word and use the "*" |
| 404 | command. Vim will grab the word under the cursor and use it as the search |
| 405 | string. |
| 406 | The "#" command does the same in the other direction. You can prepend a |
| 407 | count: "3*" searches for the third occurrence of the word under the cursor. |
| 408 | |
| 409 | |
| 410 | SEARCHING FOR WHOLE WORDS |
| 411 | |
| 412 | If you type "/the" it will also match "there". To only find words that end |
| 413 | in "the" use: > |
| 414 | |
| 415 | /the\> |
| 416 | |
| 417 | The "\>" item is a special marker that only matches at the end of a word. |
Bram Moolenaar | acb4f22 | 2016-01-10 15:59:26 +0100 | [diff] [blame] | 418 | Similarly "\<" only matches at the beginning of a word. Thus to search for |
| 419 | the word "the" only: > |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 420 | |
| 421 | /\<the\> |
| 422 | |
| 423 | This does not match "there" or "soothe". Notice that the "*" and "#" commands |
| 424 | use these start-of-word and end-of-word markers to only find whole words (you |
| 425 | can use "g*" and "g#" to match partial words). |
| 426 | |
| 427 | |
| 428 | HIGHLIGHTING MATCHES |
| 429 | |
| 430 | While editing a program you see a variable called "nr". You want to check |
| 431 | where it's used. You could move the cursor to "nr" and use the "*" command |
| 432 | and press "n" to go along all the matches. |
| 433 | There is another way. Type this command: > |
| 434 | |
| 435 | :set hlsearch |
| 436 | |
| 437 | If you now search for "nr", Vim will highlight all matches. That is a very |
| 438 | good way to see where the variable is used, without the need to type commands. |
| 439 | To switch this off: > |
| 440 | |
| 441 | :set nohlsearch |
| 442 | |
| 443 | Then you need to switch it on again if you want to use it for the next search |
| 444 | command. If you only want to remove the highlighting, use this command: > |
| 445 | |
| 446 | :nohlsearch |
| 447 | |
| 448 | This doesn't reset the option. Instead, it disables the highlighting. As |
| 449 | soon as you execute a search command, the highlighting will be used again. |
| 450 | Also for the "n" and "N" commands. |
| 451 | |
| 452 | |
| 453 | TUNING SEARCHES |
| 454 | |
| 455 | There are a few options that change how searching works. These are the |
| 456 | essential ones: |
| 457 | > |
| 458 | :set incsearch |
| 459 | |
| 460 | This makes Vim display the match for the string while you are still typing it. |
| 461 | Use this to check if the right match will be found. Then press <Enter> to |
| 462 | really jump to that location. Or type more to change the search string. |
| 463 | > |
| 464 | :set nowrapscan |
| 465 | |
| 466 | This stops the search at the end of the file. Or, when you are searching |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 467 | backwards, it stops the search at the start of the file. The 'wrapscan' |
| 468 | option is on by default, thus searching wraps around the end of the file. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 469 | |
| 470 | |
| 471 | INTERMEZZO |
| 472 | |
| 473 | If you like one of the options mentioned before, and set it each time you use |
| 474 | Vim, you can put the command in your Vim startup file. |
| 475 | Edit the file, as mentioned at |not-compatible|. Or use this command to |
| 476 | find out where it is: > |
| 477 | |
| 478 | :scriptnames |
| 479 | |
| 480 | Edit the file, for example with: > |
| 481 | |
| 482 | :edit ~/.vimrc |
| 483 | |
| 484 | Then add a line with the command to set the option, just like you typed it in |
| 485 | Vim. Example: > |
| 486 | |
| 487 | Go:set hlsearch<Esc> |
| 488 | |
| 489 | "G" moves to the end of the file. "o" starts a new line, where you type the |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 490 | ":set" command. You end insert mode with <Esc>. Then write and close the |
| 491 | file: > |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 492 | |
| 493 | ZZ |
| 494 | |
| 495 | If you now start Vim again, the 'hlsearch' option will already be set. |
| 496 | |
| 497 | ============================================================================== |
| 498 | *03.9* Simple search patterns |
| 499 | |
| 500 | The Vim editor uses regular expressions to specify what to search for. |
| 501 | Regular expressions are an extremely powerful and compact way to specify a |
| 502 | search pattern. Unfortunately, this power comes at a price, because regular |
| 503 | expressions are a bit tricky to specify. |
| 504 | In this section we mention only a few essential ones. More about search |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 505 | patterns and commands can be found in chapter 27 |usr_27.txt|. You can find |
| 506 | the full explanation here: |pattern|. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 507 | |
| 508 | |
| 509 | BEGINNING AND END OF A LINE |
| 510 | |
| 511 | The ^ character matches the beginning of a line. On an English-US keyboard |
| 512 | you find it above the 6. The pattern "include" matches the word include |
| 513 | anywhere on the line. But the pattern "^include" matches the word include |
| 514 | only if it is at the beginning of a line. |
| 515 | The $ character matches the end of a line. Therefore, "was$" matches the |
| 516 | word was only if it is at the end of a line. |
| 517 | |
Bram Moolenaar | b6e0ec6 | 2017-07-23 22:12:20 +0200 | [diff] [blame] | 518 | Let's mark the places where "/the" matches in this example line with "x"s: |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 519 | |
| 520 | the solder holding one of the chips melted and the ~ |
| 521 | xxx xxx xxx |
| 522 | |
| 523 | Using "/the$" we find this match: |
| 524 | |
| 525 | the solder holding one of the chips melted and the ~ |
| 526 | xxx |
| 527 | |
| 528 | And with "/^the" we find this one: |
| 529 | the solder holding one of the chips melted and the ~ |
| 530 | xxx |
| 531 | |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 532 | You can try searching with "/^the$"; it will only match a single line |
| 533 | consisting entirely of "the". White space does matter here, thus if a line |
| 534 | contains a space after the word, like "the ", the pattern will not match. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 535 | |
| 536 | |
| 537 | MATCHING ANY SINGLE CHARACTER |
| 538 | |
| 539 | The . (dot) character matches any existing character. For example, the |
| 540 | pattern "c.m" matches a string whose first character is a c, whose second |
Bram Moolenaar | 8a94d87 | 2015-01-25 13:02:57 +0100 | [diff] [blame] | 541 | character is anything, and whose third character is m. Example: |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 542 | |
| 543 | We use a computer that became the cummin winter. ~ |
| 544 | xxx xxx xxx |
| 545 | |
| 546 | |
| 547 | MATCHING SPECIAL CHARACTERS |
| 548 | |
| 549 | If you really want to match a dot, you must avoid its special meaning by |
| 550 | putting a backslash before it. |
| 551 | If you search for "ter.", you will find these matches: |
| 552 | |
| 553 | We use a computer that became the cummin winter. ~ |
| 554 | xxxx xxxx |
| 555 | |
| 556 | Searching for "ter\." only finds the second match. |
| 557 | |
| 558 | ============================================================================== |
| 559 | *03.10* Using marks |
| 560 | |
| 561 | When you make a jump to a position with the "G" command, Vim remembers the |
| 562 | position from before this jump. This position is called a mark. To go back |
| 563 | where you came from, use this command: > |
| 564 | |
| 565 | `` |
| 566 | |
| 567 | This ` is a backtick or open single-quote character. |
| 568 | If you use the same command a second time you will jump back again. That's |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 569 | because the "`" command is a jump itself, and the position from before this |
| 570 | jump is remembered. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 571 | |
| 572 | Generally, every time you do a command that can move the cursor further than |
| 573 | within the same line, this is called a jump. This includes the search |
| 574 | commands "/" and "n" (it doesn't matter how far away the match is). But not |
| 575 | the character searches with "fx" and "tx" or the word movements "w" and "e". |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 576 | Also, "j" and "k" are not considered to be a jump, even when you use a |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 577 | count to make them move the cursor quite a long way away. |
| 578 | |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 579 | The "``" command jumps back and forth, between two points. The CTRL-O command |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 580 | jumps to older positions (Hint: O for older). CTRL-I then jumps back to newer |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 581 | positions (Hint: for many common keyboard layouts, I is just next to O). |
| 582 | Consider this sequence of commands: > |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 583 | |
| 584 | 33G |
| 585 | /^The |
| 586 | CTRL-O |
| 587 | |
| 588 | You first jump to line 33, then search for a line that starts with "The". |
| 589 | Then with CTRL-O you jump back to line 33. Another CTRL-O takes you back to |
| 590 | where you started. If you now use CTRL-I you jump to line 33 again. And |
| 591 | to the match for "The" with another CTRL-I. |
| 592 | |
| 593 | |
| 594 | | example text ^ | |
| 595 | 33G | example text | CTRL-O | CTRL-I |
| 596 | | example text | | |
| 597 | V line 33 text ^ V |
| 598 | | example text | | |
| 599 | /^The | example text | CTRL-O | CTRL-I |
| 600 | V There you are | V |
| 601 | example text |
| 602 | |
| 603 | Note: |
| 604 | CTRL-I is the same as <Tab>. |
| 605 | |
| 606 | The ":jumps" command gives a list of positions you jumped to. The entry which |
| 607 | you used last is marked with a ">". |
| 608 | |
| 609 | |
Bram Moolenaar | 8fef2ad | 2005-04-23 20:42:23 +0000 | [diff] [blame] | 610 | NAMED MARKS *bookmark* |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 611 | |
| 612 | Vim enables you to place your own marks in the text. The command "ma" marks |
| 613 | the place under the cursor as mark a. You can place 26 marks (a through z) in |
| 614 | your text. You can't see them, it's just a position that Vim remembers. |
Bram Moolenaar | 9964e46 | 2007-05-05 17:54:07 +0000 | [diff] [blame] | 615 | To go to a mark, use the command `{mark}, where {mark} is the mark letter. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 616 | Thus to move to the a mark: |
| 617 | > |
| 618 | `a |
| 619 | |
Bram Moolenaar | 0c0734d | 2019-11-26 21:44:46 +0100 | [diff] [blame] | 620 | The command "'mark" (single quotation mark, or apostrophe) moves you to the |
| 621 | beginning of the line containing the mark. This differs from the "`mark" |
| 622 | command, which also moves you to the marked column. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 623 | |
| 624 | The marks can be very useful when working on two related parts in a file. |
| 625 | Suppose you have some text near the start of the file you need to look at, |
| 626 | while working on some text near the end of the file. |
| 627 | Move to the text at the start and place the s (start) mark there: > |
| 628 | |
| 629 | ms |
| 630 | |
Bram Moolenaar | 9964e46 | 2007-05-05 17:54:07 +0000 | [diff] [blame] | 631 | Then move to the text you want to work on and put the e (end) mark there: > |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 632 | |
| 633 | me |
| 634 | |
| 635 | Now you can move around, and when you want to look at the start of the file, |
| 636 | you use this to jump there: > |
| 637 | |
| 638 | 's |
| 639 | |
| 640 | Then you can use '' to jump back to where you were, or 'e to jump to the text |
| 641 | you were working on at the end. |
| 642 | There is nothing special about using s for start and e for end, they are |
| 643 | just easy to remember. |
| 644 | |
| 645 | You can use this command to get a list of marks: > |
| 646 | |
| 647 | :marks |
| 648 | |
| 649 | You will notice a few special marks. These include: |
| 650 | |
| 651 | ' The cursor position before doing a jump |
| 652 | " The cursor position when last editing the file |
| 653 | [ Start of the last change |
| 654 | ] End of the last change |
| 655 | |
| 656 | ============================================================================== |
| 657 | |
| 658 | Next chapter: |usr_04.txt| Making small changes |
| 659 | |
Bram Moolenaar | d473c8c | 2018-08-11 18:00:22 +0200 | [diff] [blame] | 660 | Copyright: see |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: |