Ⅲ. Vim 文本批量化操作
0x00 复制和粘贴(yy & p)
指令 | 操作 |
yy | 复制光标指定的当前行内容 |
p | 粘贴 yy 复制的内容,默认粘贴到当前行后面(可光标指定) |
在文本操作的时候我们可能会需要对文本进行批量化操作,比如删除、复制粘贴等功能,
这些在插入模式下是比较难做到的,我们一般会在命令模式下进行文本批量化操作。
💭 操作演示:文本的复制和粘贴,如果我们想复制下面的 printf 代码,我们可以:
在光标所在行 yy 进行复制,随后你可以把光标移到你想粘贴的位置按 p 进行粘贴,
直接按 p 默认在 yy 复制行的下一行粘贴。你按几次 p 就会粘贴几次。
0x01 批量化复制和粘贴(nyy & np)
指令 | 操作 |
[n] yy | 复制光标指定的当前行(包括当前行以内的)n 行内容 |
[n] p | 粘贴 n 份 yy 复制的内容,默认粘贴到当前行后面(可光标指定) |
❓ 思考:如果我想粘贴 100 次,我难道要按100次 p 吗?
王曰 —— dark♂不必 !当然不用,我们可以使用 批量化粘贴 的功能:
💭 操作演示:此时输入如果想粘贴 100 份,我们可以输入 100p :
对应的,还有 批量化复制 的功能,如果我们想让这两行复制:
我们可以光标选中第一个 printf 并输入 2yy,此时就复制了包括它本身以内的 2 行内容。
此时我们在 p 一下,我们就可以把这两行粘贴出来了:
0x02 剪贴操作(dd & p)
指令 | 操作 |
dd | 剪贴光标指定行内容 |
[n] dd | 剪贴光标指定行(包括当前行)的 n 行内容 |
💭 操作演示:将 printf 剪贴到 return 0 后面
值得一提的是,dd 也可以当删除去使用,你只要不 p 他就等于是删除的效果了。
0x03 撤销操作和收回撤销(u & Ctrl+R)
指令 | 操作 |
u | 撤销刚刚的操作 |
Ctrl + R | 对撤销进行撤销(收回 u 撤销操作) |
我删着删着后悔了怎么办?也就是我们经常喜欢用的 Ctrl + Z 撤销!vim 下是什么呢?
💭 操作演示:按 u 撤销
诶,这个时候我又后悔了,我想收回刚才的 u 撤销,怎么办? Ctrl + R!
当然,你再 Ctrl + R 就没用了,会显示 Already at newest change
你需要回到刚才的撤销操作,你可以再 u 回去,此时才能 Ctrl + R,
也就是 对于你的最近两次的误操作,你可以使用 u 和 Ctrl + R 在两个操作之间来回跳转。
0x04 光标跳转(gg & shift+gg & n+shift+gg)
指令 | 操作 |
shift + g |
光标快速定位到文本末尾 |
gg | 光标快速定位到文本的最开始 |
[n] shift + g | 将光标快速定位到文本的任意 (n) 行 |
为了方便我们讲解,我们先创建一个场景大文本的场景。
我想要我的文本扩增到十万行,我们先产出十万行的 "哈哈哈哈哈哈" :
在 Windows 下你会怎么做?不断地 CV……不断地 CV?
而在 Linux 中你只需要 yy100000,再 p 一下即可瞬间完成:
当文本一旦大了,我想让光标快速定位到文本的最尾部,该如何操作?
💭 操作演示:
① shift + g 跳转至文本最后一行
② gg 跳转至文本第一行首位置
③ 如果我想定位到第 12345 行呢?12345 + shift + g 即可!
如果想让光标跳到当前所在的文本行开头呢?
也就是我们在 Windows 下经常使用的 End 键:
指令 | 操作 |
shift + $ | 光标快速定位到文本行的末尾(我们称 $ 为 "锚点" ) |
shift + ^ | 光标快速定位到文本行的开始 |
w / b | 以单词为单位移动(warp 与 back) |
💭 操作演示:单行光标移动操作
0x05 方向键(HJKL)
玩到这里相信你也发现了,我们是可以通过键盘上的方向键去进行光标移动的。
但是我们是不太推荐用上下左右键去进行光标移动的,我们建议用 "HJKL"
指令 | 操作 |
h | 左 |
j | 下 |
k | 上 |
l | 右 |
❓ 为什么建议使用 HJKL 而不使用我们一直习惯的 ↑ ↓ ← → 呢?
💡 因为我们会学一些组合命令,比如批量化注释,它只能支持用 HJKL。
至于为什么 vim 它的上下左右是这几个按键呢?
老式键盘是没有上下左右键的,以前就是那 HJKL 充当 上下左右键的:
这样的上下左右移动方式好奇怪啊,不是所见即所得的 ↑ ↓ ← → ,但我们可以这么记:
(可以说是非常形象了)
0x06 一些修改和替换操作(shift~ & r & nr)
指令 | 操作 |
shift + ~ | 大小写快速切换 |
r | 替换光标所在位置的字符 |
[n] r | 替换光标所在位置开始的 n 个字符 |
我们现在想让这些字母大小写互换:
按住 shift 不动 + 波浪号 ~ 即可将光标位置字符进行大小写的转换。
💭 操作演示:shift + ~
现在我们又想让 KavaScript 改成 JavaScript,我不想删掉 K 之后敲上 J,我想直接覆盖修改:
先输入一个 r,然后再输入你要替换的字符(这里是J),此时就可以做到修改。
💭 操作演示:r 修改
我们甚至还可以批量化修改,在 r 前加上数字。
比如我们想把 JavaScript 改成 XXXXXXript,J 光标处按 6rX 即可:
(我们这里没有提批量化替换,因为我们下面要介绍一种专门用来替换的模式:Replace)
0x07 replace 模式
输入 shift + r 进入 replace 模式:
进入 replace 模式后,光标所在处直接输入即可替换,你的所有输入的都会直接替换。
这非常类似于 Windows 中恼人的 Insert 键,一些不知道的人总会莫名其妙按到,然后百度问。
💭 操作演示:replace 模式
0x08 删除和批量化删除(x & nx)
指令 | 操作 |
x | 删除当前光标位置字符 |
[n] r | 删除当前光标位置开始的后n个字符 |
如果我们要删除,我们可以按 X,如果要批量删除可以输入 nX(底行模式下):
💭 操作演示:一次性删掉一个 Hello
Ⅳ. 配置 Vim
0x00 引入:默认的 Vim 配置
大家有没有发现好像用起来很不方便?这未免也太简陋了吧:
默认的 vim 没有配置,没有提示、没有缩进、没有行,这就太恶心了。
我们先这里提供一个能够直接输入指令一键配置的方法,让大家先能用起来,
至于具体的 vim 配置学习我们会放到会面去讲解。
0x01 懒人一键配置
直接无脑复制下面的文字,shift+insert 粘贴到命令行:
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh &&bash ./install.sh
配置是需要用到 root 密码的,这里输入一下 root 密码。
此时就进入了安装阶段(当然,前提是你的 yum 都要搞好):
等待安装完成后,我们在打开 vim 看看,效果如何。瞬间就变得神清气爽了有木有~