vim 基础编辑
目标
熟练掌握 Vim 的基本编辑操作(插入、删除、复制、粘贴),并学习将编辑命令保存为文件以便重现操作的方法。
为什么重要
Vim 按键不是需要死记硬背的列表,而是一种 {횟수}{동작}{범위} 语法。例如把 d(删除)与 3w(3 个单词)组合成 d3w,就能自行构造尚未学过的命令。在 Vim 中,删除就是剪切——删除的内容会留在寄存器里,因此 ddp(与下一行交换位置)这样的惯用操作才得以成立。最后两个步骤要求提交编辑命令本身,是因为仅得到正确结果与能够重现过程,完全是两回事。
步骤
- 创建
/root/.vimrc,启用以下四项:显示行号、用空格代替制表符、制表符宽度 4、缩进宽度 4。 - 创建
/root/vim/poem.txt,准确写入以下 8 行。第 4 行和第 7 行是空行。alpha/bravo/charlie/(空行)/delta/echo/(空行)/foxtrot - 创建
/root/vim/notes.txt,写入以下 3 行。i = insert before cursor/a = append after cursor/o = open line below - 从
poem.txt中只删除bravo和charlie两行,将结果保存为/root/vim/cut.txt。保留原文件不变。 - 在
poem.txt的delta正下方再添加一行delta,将这 9 行保存为/root/vim/dup.txt。 - 只交换
poem.txt中alpha与bravo的顺序,将这 8 行保存为/root/vim/swap.txt。 - 将用于删除全部空行的一行 ex 命令保存到
/root/vim/blank.ex,并把应用该命令后的 6 行结果保存到/root/vim/nogap.txt。 - 将删除空行并把所有字母改为大写的 ex 命令保存到
/root/vim/build.ex,并把结果保存到/root/vim/final.txt。
提示
.ex文件中只放编辑命令,不要加入:wq之类的保存、退出命令。评分器会自行保存。- 评分器会把
.ex文件重新应用到原文件副本,并检查结果是否相同。也就是说,结果文件与命令文件必须一致。 - 替换时使用
&引用完整匹配,转换为大写的指令是\U。 - 常见错误 1:第 4~6 步直接修改
poem.txt,会破坏所有后续步骤。请使用:w 새파일另存为其他名称。 - 常见错误 2:第 1 步的
.vimrc中出现拼写错误时,该行会被静默忽略。打开 Vim,用:set expandtab?确认是否真正生效。
创建并检查配置文件
创建 /root/.vimrc,启用以下四项:显示行号、用空格代替制表符、制表符宽度 4、缩进宽度 4。
写入文件与 Vim 实际应用配置是两回事。在 Vim 中像 :set number? 这样加上问号,可以查看当前值。
创建练习文件
创建 /root/vim/poem.txt,准确写入以下 8 行。第 4 行和第 7 行是空行。
alpha / bravo / charlie /(空行)/ delta / echo /(空行)/ foxtrot
空行也算一行。第 4 行和第 7 行必须为空。
练习进入插入模式
创建 /root/vim/notes.txt,写入以下 3 行。
i = insert before cursor / a = append after cursor / o = open line below
i、a、o 分别从光标前、光标后和下一行开始输入。三行的内容与顺序必须准确。
删除行
从 poem.txt 中只删除 bravo 和 charlie 两行,将结果保存为 /root/vim/cut.txt。保留原文件不变。
dd 删除一行,2dd 删除两行。不要修改原文件,请把结果保存为新文件。
复制行
在 poem.txt 的 delta 正下方再添加一行 delta,将这 9 行保存为 /root/vim/dup.txt。
用 yy 复制,用 p 粘贴。请回想在 Vim 中删除也是剪切。
交换两行的位置
只交换 poem.txt 中 alpha 与 bravo 的顺序,将这 8 行保存为 /root/vim/swap.txt。
用 dd 删除后,内容会留在寄存器中。接着想一想应该在哪里按 p。
用命令删除空行
将用于删除全部空行的一行 ex 命令保存到 /root/vim/blank.ex,并把应用该命令后的 6 行结果保存到 /root/vim/nogap.txt。
:g/模式/d 会删除与模式匹配的行。表示空行的模式是行首与行尾紧挨在一起的形式。
用一个脚本执行多项编辑
将删除空行并把所有字母改为大写的 ex 命令保存到 /root/vim/build.ex,并把结果保存到 /root/vim/final.txt。
把用于转换为大写的指令与表示完整匹配的符号组合起来。按顺序写入两条命令即可。