vim不像很多编辑器那样一启动便可以直接编辑文本,需要在普通模式按下i, a等键才会进入插入模式进行文本编辑。
如何进入插入模式
以下的命令都会让vim从普通模式切换到插入模式,但命令执行后的字符插入位置有所不同。
命令 | 执行后的字符插入位置 |
i | 当前字符之前 |
I | 当前行首第一个非空白字符之前 |
a | 当前字符之后 |
A | 当前行尾 |
s | 删除当前字符,光标停留在下一个字符处 |
S | 删除当前行,光标停留在行首 |
o | 在当前行的下方插入一个新行,光标停在新行行首 |
O | 在当前行的上方插入一个新行,光标停在新行行首 |
常用编辑操作
上一篇文章《vim】正常模式下的一般操作》已经提到过,vim中的很多操作都可以指定数量、范围和方向等,编辑操作也不例外。为了简洁,下表不会和上一篇一样根据动作范围不同分类(如单词操作只给出w,不给出W,e,E,b,B等),而是只给出几个经典操作,排列组合的举例在下一小节介绍一些,具体的多种变化还是需要自己在实际使用中尝试和练习。
类型 |
命令 | 说明 |
复制 | yw | 复制光标后的一个单词 |
yy | 复制当前行 | |
<n>yy | 复制以下n行 | |
yG | 复制当前行到文件末尾的内容 | |
y%、ya{ | 光标放在{上,复制{}及其内部中的内容 | |
剪切/删除 | x | 剪切当前字符,相当于dl |
X | 剪切前一个字符,相当于dh | |
dw、cw | 剪切光标后的一个单词,d和c的区别是c会进入插入模式,下同 | |
D、C | 剪切到行尾,相当于d$,c$ | |
dd、cc | 剪切当前行 | |
<n>dd、<n>cc | 剪切以下n行 | |
dG | 剪切当前行到文件末尾的内容 | |
J | 在上一行中任意位置按J,将会把下一行合并到这行末尾(Join) | |
粘贴 | p | 将剪切板中的内容粘贴到光标后 |
P | 将剪切板中的内容粘贴到光标前 | |
替换 | r | 按下后,再输入字符将替换当前字符 |
R | 按下后,进入替换模式,将依次替换之后字符 | |
撤销 | u | |
重做 | <Ctrl>+r | |
缩进 | >> | 当前行向右缩进 |
<< | 当前行向左缩进 | |
<n>>> | 以下n行向右缩进 | |
<n><< | 以下n行向左缩进 | |
== | 自动调整当前行的缩进,使之与上下文 | |
<n>== | 自动调整以下n行的缩进 | |
gg=G | 自动调整文件所有行的缩进 | |
转换大小写 | ~ | 转换当前字符的大小写 |
guw | 将光标后的单词全部变为小写 | |
gUw | 将光标后的单词全部变为大写 | |
guu | 将当前行全部变为小写 | |
gUU | 将当前行全部变为大写 | |
块注释* | 注释 |
假如要将第8行到第16行的内容用//注释掉,步骤是 |
取消注释 |
假如要将第8行到第16行用//注释的内容取消注释,步骤是 |
*其中块注释用到了可视模式的操作,这本应该在后面某篇中介绍的,但这个操作很重要,所以在这里介绍一下。取消注释第3步中定位到第16行行首和向右移动选中//两个操作,可以互换。
组合命令示例
y3w 复制光标后3个单词
d2$ 剪切光标到下面第2行的末尾
>} 将当前行到下一个空行之间的内容向右缩进
=% 光标放在{或}上,执行后自动缩进{}中间的内容
3gUU 将以下3行全部变为大写
dt<c> 在当前行内,删除从光标处到后面第1个字符<c>的内容
不常用的编辑操作
.
(小数点) 可以重复上一次的命令
<n><Command> 重复某个命令n次
:r!date 插入日期