vim-01-beginner.tutor (34121B)
1 # 欢迎来到 Neovim 教程 2 3 # 第 1 章 4 5 Neovim 是一个功能非常强大的编辑器,它的命令多到无法在这篇教程里一一讲解。本教程 6 旨在介绍足够多的基本命令,让你能轻松地将 Neovim 作为通用编辑器来使用。 7 8 请务必记住,本教程是为“在实践中学习”而设计的。这意味着你需要亲手完成这些练习才能 9 真正掌握它们。如果你只看不练,很快就会忘记最重要的内容! 10 11 现在,请确保你的大写锁定键(Caps-Lock)是关闭状态,然后多次按下 `j`{normal} 键, 12 直到光标移动到第 0 课完全充满屏幕为止。 13 14 # 第 0 课 15 16 NOTE: 课程中的命令会修改本文,但这些更改不会被保存。不用担心会搞乱什么;只要记住 17 按 [<Esc>](<Esc>) 键,再按 [u](u) 键,就可以撤销最近的更改。 18 19 本教程是交互式的,有几件事你需要知道。 20 - 在 [这样的](holy-grail ) 链接上按 [<Enter>](<Enter>) 键可以打开链接的帮助文档。 21 - 或者,你也可以在任意单词上按 [K](K) 键来查找它的文档! 22 - 你可以用 `:q`{vim} `<Enter>`{normal} 来关闭这个帮助窗口。 23 24 当左边出现 ✗ 标志时,你需要去修改文本。当你正确地完成修改后,左边的 ✗ 标志就会变 25 成 ✓。我想你已经能体会到 Neovim 的强大之处了。 26 27 其他时候,你会被提示运行一个命令(稍后会对此进行解释): 28 29 `:help`{vim} `<Enter>`{normal} 30 31 或者按下一系列按键: 32 ~~~ normal 33 <Esc>0f<Space>d3wP$P 34 ~~~ 35 尖括号(<>)里的文本(如 `<Enter>`{normal})代表你需要按下的键,而不是要输入的文本。 36 37 现在,移动到下一课(使用 `j`{normal} 键向下滚动)。 38 39 # 第 1.1 课:移动光标 40 41 ** 按 `h`、`j`、`k`、`l` 键来移动光标,如下所示。 ** 42 43 ↑ 44 k 提示:`h`{normal} 键在左边,向左移动。 45 ← h l → `l`{normal} 键在右边,向右移动。 46 j `j`{normal} 键看起来像一个向下的箭头。 47 ↓ 48 49 1. 在屏幕上四处移动光标,直到你习惯这种操作。 50 51 2. 按住向下键(`j`{normal})直到光标开始连续向下移动。 52 现在你知道如何移动到下一课了。 53 54 3. 使用下移键,移动到第 1.2 课。 55 56 NOTE: 如果你不确定自己输入了什么,随时可以按 <Esc> 键回到普通模式(Normal mode)。 57 然后重新输入你想要的命令。 58 59 NOTE: 键盘上的方向键通常也能用。但一旦你习惯了,使用 hjkl 可以让你移动得更快。 60 61 # 第 1.2 课:退出 Neovim 62 63 !! NOTE: 在执行以下任何步骤之前,请先阅读完本课的全部内容 !! 64 65 1. 按下 <Esc> 键(确保你处于普通模式)。 66 67 2. 输入: 68 69 `:q!`{vim} `<Enter>`{normal} 70 71 这个命令会退出编辑器,并“丢弃”你所做的所有更改。 72 73 3. 重新打开 Neovim,并通过执行带你进入本教程的命令回到这里。这个命令也许是: 74 75 `:Tutor`{vim} `<Enter>`{normal} 76 77 4. 如果你已经记住了这些步骤并充满信心,请执行第 1 到 3 步来退出并重新进入编辑器。 78 79 NOTE: [:q!](:q) `<Enter>`{normal} 会丢弃你做的任何更改。在接下来的几课中,你将学习如何 80 将更改保存到文件中。 81 82 5. 向下移动光标到第 1.3 课。 83 84 # 第 1.3 课:文本编辑——删除(Deletion) 85 86 ** 按 `x`{normal} 键可以删除光标下的单个字符。 ** 87 88 1. 将光标移动到下面标有 ✗ 的那一行。 89 90 2. 为了修正错误,请将光标移动到需要被删除的字符上。 91 92 3. 按下 [x 键](x) 来删除那个多余的字符。 93 94 4. 重复第 2 到 4 步,直到句子正确为止。 95 96 The ccow jumpedd ovverr thhe mooon. 97 The cow jumped over the moon. 98 99 5. 现在句子已经正确了,请继续学习第 1.4 课。 100 101 NOTE: 在学习本教程时,不必试图记住所有内容,你的 Neovim 词汇量会随着使用而增长。 102 可以考虑定期回到本教程进行复习。 103 104 # 第 1.4 课:文本编辑——插入(Insertion) 105 106 ** 按 `i`{normal} 键可以插入文本。 ** 107 108 1. 将光标移动到下面标有 ✗ 的第一行。 109 110 2. 为了让第一行和第二行变得一样,请将光标移动到需要插入文本位置“之后”的那个字符上。 111 112 3. 按下 `i`{normal} 键,然后输入需要补充的内容。 113 114 4. 每个错误修正后,按 `<Esc>`{normal} 键回到普通模式。 115 重复第 2 到 4 步来修正整个句子。 116 117 There is text misng this . 118 There is some text missing from this line. 119 120 5. 当你熟练掌握插入文本后,请继续学习第 1.5 课。 121 122 # 第 1.5 课:文本编辑——追加(Appending) 123 124 ** 按 `A`{normal} 键可以在行末追加文本。 ** 125 126 1. 将光标移动到下面标有 ✗ 的第一行。 127 光标在该行的哪个字符上并不重要。 128 129 2. 按下 [A](A) 键,然后输入需要补充的内容。 130 131 3. 文本追加完成后,按 `<Esc>`{normal} 键回到普通模式。 132 133 4. 将光标移动到标有 ✗ 的第二行,并重复第 2 和第 3 步来修正这个句子。 134 135 There is some text missing from th 136 There is some text missing from this line. 137 There is also some text miss 138 There is also some text missing here. 139 140 5. 当你熟练掌握追加文本后,请继续学习第 1.6 课。 141 142 # 第 1.6 课:编辑文件 143 144 ** 使用 `:wq`{vim} 来写入(保存)文件并退出。 ** 145 146 !! NOTE: 在执行以下任何步骤之前,请先阅读完本课的全部内容 !! 147 148 1. 像第 1.2 课那样退出本教程:`:q!`{vim} 149 或者,如果你能打开另一个终端,就在那个终端里执行以下操作。 150 151 2. 在 shell 提示符下输入这个命令: 152 ~~~ sh 153 $ nvim tutor 154 ~~~ 155 'nvim' 是启动 Neovim 编辑器的命令,'tutor' 是你希望编辑的文件名。 156 请使用一个可以被修改的文件。 157 158 3. 像在前面课程中学到的那样,插入和删除一些文本。 159 160 4. 保存更改并退出 Neovim: 161 ~~~ cmd 162 :wq 163 ~~~ 164 注意,你需要按 `<Enter>` 键来执行该命令。 165 166 5. 如果你在第 1 步退出了本教程,请重启教程并移动到下面的总结部分。 167 168 6. 在阅读并理解了以上步骤后,亲手操作一遍。 169 170 # 第 1 课总结 171 172 1. 移动光标可以使用方向键,也可以使用 hjkl 键。 173 h (左) j (下) k (上) l (右) 174 175 2. 从 shell 提示符启动 Neovim,输入: 176 ~~~ sh 177 $ nvim 文件名 178 ~~~ 179 3. 退出 Neovim,输入:`<Esc>`{normal} `:q!`{vim} `<Enter>`{normal} 放弃所有更改。 180 或者输入:`<Esc>`{normal} `:wq`{vim} `<Enter>`{normal} 保存所有更改。 181 182 4. 删除光标下的字符,输入:`x`{normal} 183 184 5. 插入或追加文本,输入: 185 `i`{normal} 插入文本 `<Esc>`{normal} 在光标前插入。 186 `A`{normal} 追加文本 `<Esc>`{normal} 在当前行末尾追加。 187 188 NOTE: 按 `<Esc>`{normal} 键会让你进入普通模式,或者取消一个不想继续输入的、未完成的命令。 189 190 现在,请继续学习第 2 课。 191 192 # 第 2.1 课:删除类命令(Deletion) 193 194 ** 输入 `dw`{normal} 来删除一个单词(word)。 ** 195 196 1. 按 `<Esc>`{normal} 键确保你处于普通模式。 197 198 2. 将光标移动到下面标有 ✗ 的那一行。 199 200 3. 将光标移动到需要被删除的单词的开头。 201 202 4. 输入 [d](d)[w](w) 让这个单词消失。 203 204 There are a some words fun that don't belong paper in this sentence. 205 There are some words that don't belong in this sentence. 206 207 5. 重复第 3 和第 4 步,直到句子正确,然后继续学习第 2.2 课。 208 209 # 第 2.2 课:更多删除类命令 210 211 ** 输入 `d$`{normal} 来删除从光标到行尾的内容。 ** 212 213 1. 按 `<Esc>`{normal} 键确保你处于普通模式。 214 215 2. 将光标移动到下面标有 ✗ 的那一行。 216 217 3. 将光标移动到正确句子的末尾(在第一个 . 之后)。 218 219 4. 输入 `d$`{normal} 来删除到行尾的所有内容。 220 221 Somebody typed the end of this line twice. end of this line twice. 222 223 5. 继续学习第 2.3 课,来理解这背后的原理。 224 225 # 第 2.3 课:关于操作符(operator)和移动(motion) 226 227 许多修改文本的命令都由一个 [操作符](operator) 和一个 [移动](navigation) 组成。 228 使用 [d](d) 删除操作符的命令格式如下: 229 230 d 移动 231 232 其中: 233 d - 是删除操作符。 234 移动 - 是操作符将要作用的范围(如下所列)。 235 236 一些常用的移动: 237 [w](w) - 到下一个单词的开头,但不包括其第一个字符。 238 [e](e) - 到当前单词的末尾,并包括最后一个字符。 239 [$]($) - 到当前行的末尾,并包括最后一个字符。 240 241 因此,输入 `de`{normal} 将会删除从光标到当前单词末尾的内容。 242 243 NOTE: 在普通模式下,不带操作符、只按下移动键,将会像预期的那样移动光标。 244 245 # 第 2.4 课:为移动增加计数 246 247 ** 在移动命令前输入一个数字,可以将其重复执行那么多次。 ** 248 249 1. 将光标移动到下面标有 ✓ 的那行的开头。 250 251 2. 输入 `2w`{normal},光标会向前移动两个单词。 252 253 3. 输入 `3e`{normal},光标会移动到前方第三个单词的末尾。 254 255 4. 输入 `0`{normal}([零](0))可以移动到行首。 256 257 5. 用不同的数字重复第 2 和第 3 步。 258 259 This is just a line with words you can move around in. 260 261 6. 继续学习第 2.5 课。 262 263 # 第 2.5 课:使用计数删除更多内容 264 265 ** 在操作符和移动之间加上一个数字,可以将其重复执行那么多次。 ** 266 267 在前面提到的“删除操作符 + 移动”组合中,你可以在移动前插入一个计数来删除更多内容: 268 d 数字 移动 269 270 1. 将光标移动到下面标有 ✗ 的那一行中第一个全大写单词上。 271 272 2. 输入 `d2w`{normal} 来删除两个全大写单词。 273 274 3. 重复第 1 和第 2 步,但使用不同的计数,用一个命令删除剩余连续的全大写单词。 275 276 This ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up. 277 278 # 第 2.6 课:行操作 279 280 ** 输入 `dd`{normal} 来删除一整行。 ** 281 282 由于删除整行的操作非常频繁,Vi 的设计者们决定,输入两个 d 来删除一行会更方便。 283 284 1. 将光标移动到下面短语的第 2 行。 285 286 2. 输入 [dd](dd) 来删除该行。 287 288 3. 现在移动到第 4 行。 289 290 4. 输入 `2dd`{normal} 来删除两行。 291 292 1) Roses are red, 293 2) Mud is fun, 294 3) Violets are blue, 295 4) I have a car, 296 5) Clocks tell time, 297 6) Sugar is sweet 298 7) And so are you. 299 300 # 第 2.7 课:撤销命令(Undo) 301 302 ** 按 `u`{normal} 撤销上一个命令,按 `U`{normal} 恢复一整行。 ** 303 304 1. 将光标移动到下面标有 ✗ 的那一行,并把它放在第一个错误上。 305 306 2. 输入 `x`{normal} 来删除第一个多余的字符。 307 308 3. 现在输入 `u`{normal} 来撤销上一次执行的命令。 309 310 4. 这次,使用 `x`{normal} 命令修正该行所有的错误。 311 312 5. 现在输入大写的 `U`{normal},将该行恢复到它最初始的状态。 313 314 6. 现在多次输入 `u`{normal},来撤销 `U`{normal} 以及之前的命令。 315 316 7. 现在多次输入 `<C-r>`{normal}(Ctrl + R),来重做(redo)那些被撤销的命令。 317 318 Fiix the errors oon thhis line and reeplace them witth undo. 319 Fix the errors on this line and replace them with undo. 320 321 8. 这些都是非常有用的命令。现在请继续学习第 2 课的总结。 322 323 # 第 2 课总结 324 325 1. 删除从光标到下一个单词开头的内容,输入: `dw`{normal} 326 327 2. 删除从光标到行尾的内容,输入: `d$`{normal} 328 329 3. 删除一整行,输入: `dd`{normal} 330 331 4. 重复一个移动,在它前面加上数字: `2w`{normal} 332 333 5. 修改类命令的格式是: 334 335 操作符 [数字] 移动 336 337 其中: 338 339 操作符 - 是要做什么,比如 [d](d) 代表删除。 340 [数字] - 是一个可选的计数,用来重复移动。 341 移动 - 定义了操作符要作用的文本范围,例如: 342 [w](w)(单词), 343 [$]($)(到行尾),等等。 344 345 6. 移动到行首,使用零:[0](0) 346 347 7. 撤销之前的操作,输入: `u`{normal}(小写 u) 348 撤销对一整行的所有更改,输入: `U`{normal}(大写 U) 349 重做被撤销的操作,输入: `<C-r>`{normal} 350 351 # 第 3.1 课:粘贴命令(Put) 352 353 ** 输入 `p`{normal} 可以将之前删除的文本粘贴到光标之后。 ** 354 355 1. 将光标移动到下面第一个标有 `--->` 的行。 356 357 2. 输入 `dd`{normal} 来删除该行,并将其存入 Neovim 的一个寄存器中。 358 359 3. 将光标移动到 c) 行,也就是被删除那一行的“上一行”。 360 361 4. 输入 `p`{normal},将之前删除的行粘贴到光标下方。 362 363 5. 重复第 2 到 4 步,将所有行按正确的顺序(abcd)排列。 364 365 ---> d) Can you learn too? 366 ---> b) Violets are blue, 367 ---> c) Intelligence is learned, 368 ---> a) Roses are red, 369 370 NOTE: 你也可以用 `P`{normal}(大写 P)将文本粘贴到光标之前。 371 372 # 第 3.2 课:替换命令(Replace) 373 374 ** 输入 `rx`{normal} 可以将光标下的字符替换为 x。 ** 375 376 1. 将光标移动到下面标有 ✗ 的第一行。 377 378 2. 将光标移动到第一个错误字符上。 379 380 3. 输入 `r`{normal},然后输入正确的字符。 381 382 4. 重复第 2 和第 3 步,直到第一行和第二行完全一样。 383 384 Whan this lime was tuoed in, someone presswd some wrojg keys! 385 When this line was typed in, someone pressed some wrong keys! 386 387 5. 现在请继续学习第 3.3 课。 388 389 NOTE: 请记住,你应该通过实践来学习,而不是死记硬背。 390 391 # 第 3.3 课:更改操作符(Change) 392 393 ** 要更改到单词末尾,输入 `ce`{normal}。 ** 394 395 1. 将光标移动到下面标有 ✗ 的第一行。 396 397 2. 将光标放在 "lubw" 的 "u" 上。 398 399 3. 输入 `ce`{normal},然后输入正确的单词(在这种情况是输入 "ine")。 400 401 4. 按下 `<Esc>`{normal},然后移动到下一个需要修改的字符。 402 403 5. 重复第 3 和第 4 步,直到第一句和第二句完全一样。 404 405 This lubw has a few wptfd that mrrf changing usf the change operator. 406 This line has a few words that need changing using the change operator. 407 408 请注意,[c](c)e 会删除单词并让你进入插入模式(Insert mode)。 409 410 # 第 3.4 课:使用 `c`{normal} 进行更多更改 411 412 ** 更改操作符可以和删除操作符使用相同的移动。 ** 413 414 1. 更改操作符的工作方式和删除操作符一样。格式是: 415 416 c [数字] 移动 417 418 2. 移动也是一样的,比如 `w`{normal}(单词)和 `$`{normal}(到行尾)。 419 420 3. 移动到下面标有 ✗ 的第一行。 421 422 4. 将光标移动到第一个错误处。 423 424 5. 输入 `c$`{normal},然后输入该行余下正确的内容(参照第二行),最后按 `<Esc>`{normal}。 425 426 The end of this line needs some help to make it like the second. 427 The end of this line needs to be corrected using the c$ command. 428 429 NOTE: 在输入时,你可以使用退格键(Backspace)来修正错误。 430 431 # 第 3 课总结 432 433 1. 要粘贴刚刚删除的文本,输入 [p](p)。这会把删除的文本放在光标“之后” 434 (如果删除的是一整行,它会被粘贴到光标所在行的下一行)。 435 436 2. 要替换光标下的单个字符,输入 [r](r) 然后输入你想要的那个字符。 437 438 3. [更改操作符](c) 允许你更改从光标开始到一个移动命令结束位置的文本。 439 输入 `ce`{normal} 来更改到单词末尾,`c$`{normal} 来更改到行尾,等等。 440 441 4. 更改命令的格式是: 442 443 c [数字] 移动 444 445 现在请继续学习下一课。 446 447 # 第 4.1 课:光标位置和文件状态 448 449 ** 输入 `<C-g>`{normal} 来显示你在文件中的位置和文件状态。 450 输入 `{count}G`{normal} 来移动到文件中的第 {count} 行。 ** 451 452 NOTE: 在执行任何步骤之前,请先阅读完本课的全部内容!! 453 454 1. 按住 `<Ctrl>`{normal} 键并按下 `g`{normal}。我们称这个操作为 `<C-g>`{normal}。 455 屏幕底部会出现一条消息,包含文件名和你在文件中的位置。 456 请记住行号,第 3 步会用到。 457 458 NOTE: 你可能会在屏幕右下角看到光标位置。这是因为设置了 ['ruler']('ruler') 选项。 459 460 2. 按 [G](G) 移动到文件的末尾。 461 输入 [gg](gg) 移动到文件的开头。 462 463 3. 输入你之前记住的行号,然后按 `G`{normal}。这会让你回到你第一次按 `<C-g>`{normal} 时所在的行。 464 465 4. 如果你觉得没问题,就执行第 1 到 3 步。 466 467 # 第 4.2 课:搜索命令 468 469 ** 输入 `/`{normal} 后面跟一个短语,来搜索这个短语。 ** 470 471 1. 在普通模式下,输入 `/`{normal} 字符。注意它和光标会出现在屏幕底部, 472 就像 `:`{normal} 命令一样。 473 474 2. 现在输入 errroor `<Enter>`{normal}。这是你想要搜索的词。 475 476 3. 要再次搜索同一个短语,只需输入 [n](n)。 477 要反向搜索同一个短语,输入 [N](N)。 478 479 4. 要反向搜索一个短语,使用 [?](?) 而不是 `/`{normal}。 480 481 5. 要回到你之前的位置,按 `<C-o>`{normal}。(按住 `<Ctrl>`{normal} 键的同时按字母 `o`{normal})。 482 重复按可以回到更早的位置。`<C-i>`{normal} 则会前进。 483 484 "errroor" is not the way to spell error; errroor is an error. 485 486 NOTE: 当搜索到达文件末尾时,它会从头开始继续搜索,除非 ['wrapscan']('wrapscan') 选项被关闭了。 487 488 # 第 4.3 课:括号匹配搜索 489 490 ** 输入 `%`{normal} 来查找匹配的 ), ], }。 ** 491 492 1. 将光标放在下面标有 ✓ 的那一行中的任意一个 (, [, { 上。 493 494 2. 现在输入 [%](%) 字符。 495 496 3. 光标会移动到与之匹配的括号上。 497 498 4. 再次输入 `%`{normal},光标会移回另一半匹配的括号。 499 500 5. 将光标移动到另一个 (, ), [, ], {, } 上,看看 `%`{normal} 的效果。 501 502 This ( is a test line with ('s, ['s, ] and {'s } in it. )) 503 504 NOTE: 这在调试程序中不匹配的括号时非常有用! 505 506 # 第 4.4 课:替换命令(Substitute) 507 508 ** 输入 `:s/old/new/g` 来用 "new" 替换 "old"。 ** 509 510 1. 将光标移动到下面标有 ✗ 的那一行。 511 512 2. 输入 513 ~~~ cmd 514 :s/thee/the/ 515 ~~~ 516 NOTE: [:s](:s) 命令只改变了行中第一个匹配的 "thee"。 517 518 3. 现在输入 519 ~~~ cmd 520 :s/thee/the/g 521 ~~~ 522 加上 g [标志](:s_flags) 意味着在行内进行全局替换,也就是改变该行中所有出现的 "thee"。 523 524 Usually thee best time to see thee flowers is in thee spring. 525 526 4. 要在两行之间替换一个字符串的所有出现,输入 527 ~~~ cmd 528 :#,#s/old/new/g 529 ~~~ 530 其中 # 是要进行替换的行号范围(例如,`1,3` 表示从第 1 行到第 3 行,包含这两行)。 531 532 输入 533 ~~~ cmd 534 :%s/old/new/g 535 ~~~ 536 可以在整个文件中进行替换。 537 538 输入 539 ~~~ cmd 540 :%s/old/new/gc 541 ~~~ 542 可以在整个文件中查找所有出现,并对每一次替换进行确认。 543 544 NOTE: 你也可以先用可视模式(Visual mode)选中你想替换的行。这在后面的课程中会详细解释。 545 546 # 第 4 课总结 547 548 1. `<C-g>`{normal} 显示你的位置和文件状态。 549 `G`{normal} 移动到文件末尾。 550 数字 `G`{normal} 移动到指定的行号。 551 `gg`{normal} 移动到第一行。 552 553 2. 输入 `/`{normal} 后跟一个短语,会“向前”搜索该短语。 554 输入 `?`{normal} 后跟一个短语,会“向后”搜索该短语。 555 搜索后,输入 `n`{normal} 查找下一个(同方向),或 `N`{normal} 查找下一个(反方向)。 556 `<C-o>`{normal} 带你回到旧的光标位置,`<C-i>`{normal} 则去往新的位置。 557 558 3. 当光标在 (, ), [, ], {, } 上时,输入 `%`{normal} 会跳转到其匹配的另一半。 559 560 4. 将行内第一个 old 替换为 new,输入 561 ~~~ cmd 562 :s/old/new 563 ~~~ 564 将行内所有 old 替换为 new,输入 565 ~~~ cmd 566 :s/old/new/g 567 ~~~ 568 在两行 # 之间进行替换,输入 569 ~~~ cmd 570 :#,#s/old/new/g 571 ~~~ 572 在整个文件中进行替换,输入 573 ~~~ cmd 574 :%s/old/new/g 575 ~~~ 576 每次替换前进行确认,添加 'c' 标志 577 ~~~ cmd 578 :%s/old/new/gc 579 ~~~ 580 581 # 第 5.1 课:如何执行外部命令 582 583 ** 输入 `:!`{vim} 后面跟一个外部命令,来执行该命令。 ** 584 585 1. 输入你熟悉的命令 `:`{normal},让光标定位到屏幕底部。这允许你输入一个 586 命令行命令。 587 588 2. 现在输入 [!](!cmd)(感叹号)字符。这允许你执行任何外部的 shell 命令。 589 590 3. 举个例子,在 "!" 后面输入 "ls",然后按 `<Enter>`{normal}。 591 这会显示你的目录列表,就像你在 shell 提示符下一样。 592 593 NOTE: 你可以用这种方式执行任何外部命令,并且可以带参数。 594 595 NOTE: 所有 `:`{vim} 命令都在你按下 `<Enter>`{normal} 后执行。 596 597 # 第 5.2 课:更多关于写入文件的知识 598 599 ** 要保存对文本的更改,输入 `:w`{vim} 文件名。 ** 600 601 1. 输入 `:!{unix:(ls),win:(dir)}`{vim} 来获取你的目录列表。 602 你已经知道在这之后必须按 `<Enter>`{normal}。 603 604 2. 选择一个还不存在的文件名,比如 TEST。 605 606 3. 现在输入: 607 ~~~ cmd 608 :w TEST 609 ~~~ 610 (这里的 TEST 是你选择的文件名。) 611 612 4. 这会将当前文件以 TEST 的名字保存。 613 要验证这一点,再次输入 `:!{unix:(ls),win:(dir)}`{vim} 来查看你的目录。 614 615 NOTE: 如果你退出 Neovim,然后用 `nvim TEST` 再次启动它,这个文件将会是你保存时教程 616 内容的一个精确副本。 617 618 5. 现在通过输入以下命令来删除该文件: 619 ~~~ cmd 620 :!{unix:(rm),win:(del)} TEST 621 ~~~ 622 623 # 第 5.3 课:选择要写入的文本 624 625 ** 要保存文件的一部分,输入 `v`{normal} 移动 `:w 文件名`{vim}。 ** 626 627 1. 将光标移动到这一行。 628 629 2. 按下 [v](v) 并将光标移动到下面的第五项。注意文本被高亮了。 630 631 3. 按下 `:`{normal} 字符。在屏幕底部会出现: 632 633 `:'<,'>`{vim} 634 635 4. 输入 636 637 `w TEST`{vim} 638 639 这里的 TEST 是一个还不存在的文件名。在按 `<Enter>`{normal} 之前, 640 确认你看到的是: 641 642 `:'<,'>w TEST`{vim} 643 644 5. Neovim 会将被选中的行写入文件 TEST。使用 `:!{unix:(ls),win:(dir)}`{vim} 来查看它。 645 先不要删除它!我们将在下一课用到它。 646 647 NOTE: 按下 [v](v) 会启动 [可视选择(Visual selection)](visual-mode)。你可以移动光标来扩大或缩小选择范围。 648 然后你可以使用一个操作符来对选中的文本 649 做些什么。例如,`d`{normal} 会删除选中的文本。 650 651 # 第 5.4 课:读取和合并文件 652 653 ** 要读取一个文件的内容,输入 `:r 文件名`{vim}。 ** 654 655 1. 将光标放在这一行的正上方。 656 657 NOTE: 执行第 2 步后,你会看到第 5.3 课的文本。然后向下移动 658 才能再次看到本课内容。完成后按 `u`{normal} 撤销。 659 660 2. 现在使用以下命令读取你的 TEST 文件: 661 662 `:r TEST`{vim} 663 664 这里的 TEST 是你之前使用的文件名。 665 你读取的文件内容会被放在光标所在行的下方。 666 667 3. 要验证文件是否被读取,向上移动光标,你会注意到现在有两份第 5.3 课的内容, 668 一份是原始的,一份是读取进来的。 669 670 NOTE: 你也可以读取一个外部命令的输出。例如: 671 672 `:r !{unix:(ls),win:(dir)}`{vim} 673 674 会读取 `ls` 命令的输出,并将其放在光标下方。 675 676 # 第 5 课总结 677 678 1. [:!command](:!cmd) 执行一个外部命令。 679 680 一些有用的例子: 681 `:!{unix:(ls ),win:(dir)}`{vim} - 显示目录列表 682 `:!{unix:(rm ),win:(del)} 文件`{vim} - 删除文件 683 684 2. [:w](:w) 文件名 将当前 Neovim 文件以“文件名”这个名字写入磁盘。 685 686 3. [v](v) 移动 :w 文件名 将可视模式选中的行保存到文件“文件名”中。 687 688 4. [:r](:r) 文件名 读取磁盘文件“文件名”的内容,并将其放在光标位置的下方。 689 690 5. {unix:([:r !ls](:r!) ),win:([:r !dir](:r!))} 读取 {unix:(ls),win:(dir)} 命令的输出,并将其放在光标位置的下方。 691 692 # 第 6.1 课:开启新行命令(Open) 693 694 ** 输入 `o`{normal} 可以在光标下方开启一个新行,并进入插入模式。 ** 695 696 1. 将光标移动到下面标有 ✓ 的那一行。 697 698 2. 输入小写字母 `o`{normal},在光标“下方”[开启](o)一个新行,并让你进入插入模式。 699 700 3. 现在输入一些文本,然后按 `<Esc>`{normal} 退出插入模式。完成后请删除你开启的行。 701 702 After typing `o`{normal} the cursor is placed on the open line in Insert mode. 703 704 4. 要在光标“上方”开启一个新行,只需输入[大写 O](O),而不是小写 `o`{normal}。 705 在下面这行上试试。完成后请删除你开启的行。 706 707 Open up a line above this by typing O while the cursor is on this line. 708 709 # 第 6.2 课:追加命令(Append) 710 711 ** 输入 `a`{normal} 可以在光标“之后”插入文本。 ** 712 713 1. 将光标移动到下面标有 ✗ 的那行的开头。 714 715 2. 按 `e`{normal} 直到光标移动到 "li" 的末尾。 716 717 3. 输入小写字母 `a`{normal},在光标“之后”[追加](a)文本。 718 719 4. 参照下一行,补全这个单词。按 `<Esc>`{normal} 退出插入模式。 720 721 5. 使用 `e`{normal} 移动到下一个不完整的单词,并重复第 3 和第 4 步。 722 723 This li will allow you to pract appendi text to a line. 724 This line will allow you to practice appending text to a line. 725 726 NOTE: [a](a)、[i](i) 和 [A](A) 都会进入同一个插入模式,唯一的区别是字符被插入的位置不同。 727 728 # 第 6.3 课:另一种替换方式 729 730 ** 输入大写 `R`{normal} 可以替换多个字符。 ** 731 732 1. 将光标移动到下面标有 ✗ 的第一行。将光标移动到第一个 "xxx" 的开头。 733 734 2. 现在按下 `R`{normal}([大写 R](R))并输入第二行中对应的数字,用它来替换 "xxx"。 735 736 3. 按下 `<Esc>`{normal} 离开[替换模式(Replace mode)](mode-replace)。注意该行余下的部分保持不变。 737 738 4. 重复以上步骤来替换剩下的 "xxx"。 739 740 Adding 123 to xxx gives you xxx. 741 Adding 123 to 456 gives you 579. 742 743 NOTE: 替换模式很像插入模式,但你输入的每个字符都会替换掉一个已有的字符。 744 745 # 第 6.4 课:复制和粘贴文本 746 747 ** 使用 `y`{normal} 操作符来复制(yank)文本,用 `p`{normal} 来粘贴(put)它。 ** 748 749 1. 去到下面标有 ✓ 的那一行,并将光标放在 "a)" 之后。 750 751 2. 用 `v`{normal} 启动可视模式,并将光标移动到 "first" 之前。 752 753 3. 输入 `y`{normal} 来 [复制(yank)](yank) 高亮的文本。 754 755 4. 将光标移动到下一行的末尾:`j$`{normal} 756 757 5. 输入 `p`{normal} 来 [粘贴(put)](put) 文本。 758 759 6. 按下 `a`{normal} 然后输入 "second"。按 `<Esc>`{normal} 离开 760 插入模式。 761 762 7. 使用可视模式选中 "item.",用 `y`{normal} 复制它,用 `j$`{normal} 移动到 763 下一行的末尾,然后用 `p`{normal} 在那里粘贴文本。 764 765 a) This is the first item. 766 b) 767 768 NOTE: 你可以把 `y`{normal} 当作一个操作符来使用:`yw`{normal} 会复制一个单词。 769 770 NOTE: 你可以用 `P`{normal} 在光标前粘贴,而不是在光标后。 771 772 # 第 6.5 课:设置选项(Set) 773 774 ** 设置一个选项,让搜索和替换命令忽略大小写。 ** 775 776 Neovim 中有许多设置,你可以配置它们来满足你的需求。 777 778 1. 通过输入 `/ignore` 来搜索 'ignore'。 779 多按几次 `n`{normal} 来重复搜索。 780 781 2. 通过输入以下命令来设置 'ic'(Ignore case,即忽略大小写) 选项: 782 ~~~ cmd 783 :set ic 784 ~~~ 785 3. 现在再次按 `n`{normal} 搜索 'ignore'。 786 注意 Ignore 和 IGNORE 现在也能被找到了。 787 788 4. 设置 'hlsearch' 和 'incsearch' 选项: 789 ~~~ cmd 790 :set hls is 791 ~~~ 792 5. 现在再次输入搜索命令,看看会发生什么:/ignore <Enter> 793 794 6. 要禁用忽略大小写,输入: 795 ~~~ cmd 796 :set noic 797 ~~~ 798 7. 要反转一个设置的值,在它前面加上 "inv": 799 ~~~ cmd 800 :set invic 801 ~~~ 802 NOTE: 要移除匹配项的高亮,输入: 803 ~~~ cmd 804 :nohlsearch 805 ~~~ 806 NOTE: 如果你只想在某一次搜索命令中忽略大小写,在短语中使用 [\c](/\c): 807 /ignore\c <Enter> 808 809 # 第 6 课总结 810 811 1. 输入 `o`{normal} 在光标“下方”开启一个新行并进入插入模式。 812 输入 `O`{normal} 在光标“上方”开启一个新行。 813 814 2. 输入 `a`{normal} 在光标“之后”插入文本。 815 输入 `A`{normal} 在行尾之后插入文本。 816 817 3. `e`{normal} 命令移动到一个单词的末尾。 818 819 4. `y`{normal} 操作符复制文本,`p`{normal} 粘贴它。 820 821 5. 输入大写 `R`{normal} 会进入替换模式,直到按下 `<Esc>`{normal}。 822 823 6. 输入 "[:set](:set) xxx" 可以设置选项 "xxx"。一些有用的选项是: 824 825 'ic' 'ignorecase' 搜索时忽略大小写 826 'is' 'incsearch' 实时显示搜索短语的部分匹配 827 'hls' 'hlsearch' 高亮所有匹配的短语 828 829 你可以使用长选项名或短选项名。 830 831 7. 在选项前加上 "no" 来关闭一个选项: 832 ~~~ cmd 833 :set noic 834 ~~~ 835 8. 在选项前加上 "inv" 来反转一个选项的值: 836 ~~~ cmd 837 :set invic 838 ~~~ 839 # 第 7.1 课:获取帮助 840 841 ** 使用在线帮助系统。 ** 842 843 Neovim 有一个全面的在线帮助系统。 844 845 要开始使用,试试下面两种方法之一: 846 847 - 按下 `<F1>`{normal} 键(如果你有的话) 848 - 输入 `:help`{vim} 849 850 阅读帮助窗口中的文本,了解帮助系统是如何工作的。 851 输入 `<C-w><C-w>`{normal} 可以在窗口之间跳转。 852 输入 `:q`{vim} 关闭帮助窗口。 853 854 你几乎可以找到任何主题的帮助,只需给 ":help" 命令传递一个参数。 855 试试这些(别忘了按 <Enter>): 856 ~~~ cmd 857 :help w 858 :help c_CTRL-D 859 :help insert-index 860 :help user-manual 861 ~~~ 862 863 # 第 7.2 课:补全功能 864 865 ** 使用 `<C-d>`{normal} 和 `<Tab>`{normal} 进行命令行补全。 ** 866 867 1. 列出当前目录的内容:`:!{unix:(ls),win:(dir)}`{vim} 868 869 2. 输入一个命令的开头:`:e`{vim} 870 871 3. 按下 `<C-d>`{normal},Neovim 会显示一个以 "e" 开头的命令列表。 872 873 4. 按下 `<Tab>`{normal},Neovim 会显示一个包含可能补全项的菜单 874 (或者如果输入的命令是唯一的,则直接补全,例如 ":ed`<Tab>`{normal}" 会被补全为 ":edit")。 875 876 5. 使用 `<Tab>`{normal} 或 `<C-n>`{normal} 移动到下一个匹配项。或者 877 使用 `<S-Tab>`{normal} 或 `<C-p>`{normal} 移动到上一个匹配项。 878 879 6. 选择 `edit`{vim} 条目。现在你可以看到 `edit`{vim} 这个词已经被自动插入到命令行了。 880 881 7. 现在加上一个空格和一个已存在文件名的开头:`:edit FIL`{vim} 882 883 8. 按下 `<Tab>`{normal}。Vim 会显示一个补全菜单,列出以 `FIL` 开头的文件名。 884 885 NOTE: 补全功能对许多命令都有效。它对 `:help`{vim} 命令尤其有用。 886 887 # 第 7.3 课:配置 NVIM 888 889 Neovim 是一个高度可配置的编辑器。你可以根据自己的需求进行定制。要开始使用更多功能, 890 可以创建一个 vimrc 文件,如果你想用 Lua,文件名可以是 "init.lua",如果你想用 891 Vimscript,文件名可以是 "init.vim"。在本课中,我们将使用 "init.lua"。 892 893 1. 开始编辑 "init.lua" 文件。 894 895 `:exe 'edit' stdpath('config')..'/init.lua'`{vim} 896 897 2. 将 Lua 的示例配置复制到你的 "init.lua" 文件中。 898 899 `:read $VIMRUNTIME/example_init.lua`{vim} 900 901 3. 写入文件(这也会创建任何缺失的父目录): 902 903 `:w ++p`{vim} 904 905 4. 下次你启动 Neovim 时,可以用以下命令快速打开这个 vimrc 文件: 906 907 `:e $MYVIMRC`{vim} 908 909 # 第 7 课总结 910 911 1. 输入 `:help`{vim} 912 或按下 `<F1>`{normal} 或 `<Help>`{normal} 来打开一个帮助窗口。 913 914 2. 输入 `:help 主题`{vim} 来查找关于“主题”的帮助。 915 916 3. 输入 `<C-w><C-w>`{normal} 来跳转到另一个窗口。 917 918 4. 输入 `:q`{vim} 来关闭帮助窗口。 919 920 5. 在命令模式下,按 `<C-d>`{normal} 查看可能的补全。按 `<Tab>`{normal} 使用补全菜单并选择一个匹配项。 921 922 6. 创建你的配置文件来保存你的偏好设置。你可以用 `:e $MYVIMRC`{vim} 再次访问它。 923 924 # 接下来呢? 925 926 运行 `:help nvim-quickstart`{vim} 获取更多关于扩展 Nvim 的信息。 927 928 # 结语 929 930 这就是 Vim 教程第一章的全部内容。你可以继续学习[第二章](@tutor:vim-02-beginner)。 931 932 本教程旨在简要介绍 Neovim 编辑器,内容刚好足够让你能比较轻松地使用它。它远非完 933 整,因为 Neovim 还有许许多多其他的命令。请经常查阅帮助文档。网上也有无数优秀的 934 教程和视频可供学习。这里有一些推荐: 935 936 - *Learn Vim Progressively*: 937 https://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/ 938 - *Learning Vim in 2014*: 939 https://benmccormick.org/learning-vim-in-2014/ 940 - *Vimcasts*: 941 http://vimcasts.org/ 942 - *Vim Video-Tutorials by Derek Wyatt*: 943 http://derekwyatt.org/vim/tutorials/ 944 - *Learn Vimscript the Hard Way*: 945 https://learnvimscriptthehardway.stevelosh.com/ 946 - *7 Habits of Effective Text Editing*: 947 https://www.moolenaar.net/habits.html 948 - *vim-galore*: 949 https://github.com/mhinz/vim-galore 950 951 如果你更喜欢书籍,Drew Neil 的 *Practical Vim* 经常被推荐 952 (其续作 *Modern Vim* 包含了 Neovim 的特有内容)。 953 954 本教程由 Michael C. Pierce 和 Robert K. Ware(科罗拉多矿业大学)编写,采用了 955 Charles Smith(科罗拉多州立大学)提供的想法。电子邮件: bware@mines.colorado.edu。 956 957 由 Bram Moolenaar 为 Vim 修改。 958 由 Felipe Morales 为 vim-tutor-mode 修改。 959 由 Rory Nesbitt 为 Neovim 修改。 960 961 Neovim Tutor 简体中文翻译版由 PilgrimLyieu <pilgrimlyieu@outlook.com> 译制并校对。 962 963 变更记录: 964 - 2025-07-06 PilgrimLyieu <pilgrimlyieu@outlook.com> 965 译制并校对 966 967 // vim: nowrap