vi&&vim用法
命令 | 含义 | 命令 | 含义 |
a | 在光标后输入(进入输入模式) | A | 行尾插入(进入输入模式) |
i | 在光标前输入(进入输入模式) | I | 从光标所在列的第一个非空白字元前面开始插入(进入输入模式) |
o | 光标所在行下面新加一行(进入输入模式) | O | 光标所在行上面新加一行(进入输入模式) |
操作:
y | 复制选择部分 | yw | 复制单词 |
yy | 复制行 | p | 粘贴 |
d | 删除选择部分 | dd | 删除行 |
数字n+dd | 删除n行 | gg | 到文件头 |
GG | 到文件尾 | n+yy | 复制当前开始的n行 |
删除和复制(普通模式、可视模式)
删除:
- dd:
删除一行 - dw:
删除一个单词,需将光标移到单词的第一个字母。 - d$:
删除当前光标到该行的行尾的字母 - daw:
- dnw:
- dnj:
向下删除n行 - dnk:
向上删除n行 - J:
删除换行符,将光标移到改行,按shift+j删除行尾的换行符,下一行接上来了。 -
x 删除光标下的字符 ("dl" 的缩写)
X 删除光标前的字符 ("dh" 的缩写)
D 从当前位置删除到行尾 ("d$" 的缩写)
dw 从当前位置删除到下一个单词开头
db 从当前位置删除到前一个单词的开头
diw 删除光标上的单词 (不包括空白字符)
daw 删除光标上的单词 (包括空白字符)
dG 删除到文件末
dgg 删除到文件首
"dl" 删除字符 (缩写: "x") |dl|
"diw" 删除内含单词 *diw*
"daw" 删除一个单词 *daw*
"diW" 删除内含字串 (见 |WORD|) *diW*"daW" 删除一个字串 (见 |WORD|) *daW*
"dd" 删除一行 |dd|
"dis" 删除内含句子 *dis*
"das" 删除一个句子 *das*
"dib" 删除内含 '(' ')' 块 *dib*
"dab" 删除一个 '(' ')' 块 *dab*
"dip" 删除内含段落 *dip*
"dap" 删除一个段落 *dap*
"diB" 删除内含 '{ ' ' }' 大块 *diB*
"daB" 删除一个 '{ ' ' }' 大块 *daB
复制:
- yy:
复制一行 - yw:
复制一个单词,需将光标移到单词的第一个字母。 - yaw:
- ynw:
- ynj:
向下复制n行 - ynk:
向上复制n行
修改:
- cl:
更改当前字符 - cw:
修改当前单词到结尾 - cc:
修改当前行
粘贴:p,粘贴用x、d、y操作的文本
光标:
k | 上一行 | h | 左移一个字符 |
l | 右移一个字符 | j | 下一行 |
0
^
gg
G
``
H
M
L
w:
b:
e:
ge:
%:
CTRL+G
向下翻页(page down):
向上翻页(page up):
向下移动半屏:CTRL+d
向上移动半屏:CTRL+u
'' 同`` -- 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
找到某个单词后, 再输入此命令则回到上次停留的位置.
'. -- 此命令相当好使, 它移动光标到上一次的修改行.
`. -- 此命令相当强大, 它移动光标到上一次的修改点.
ctrl+d | 向下翻半屏 | ctrl+f | 向下翻屏 |
ctrl+b | 向上翻屏 | ctrl+u | 向上翻半屏 |
0(零);^ | 行首 | $ | 行尾 |
GG | 到文件尾 | gg | 到文件头 |
查找替换:
N | 找到上一个匹配字符 | n | 找到下一个匹配字符 |
:s/vivian/sky/ | 替换当前行第一个 vivian 为 sky |
:s/vivian/sky/g | 替换当前行所有 vivian 为 sky |
:n,$s/vivian/sky/ | 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky |
:n,$s/vivian/sky/g | 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky |
:%s/vivian/sky/ | 等同于 :g/vivian/s//sky/ 替换每一行的第一个 vivian 为 sky |
:%s/vivian/sky/g | 等同于 :g/vivian/s//sky/g 替换每一行中所有 vivian 为 sky |
:s#vivian/#sky/# | 替换当前行第一个 vivian/ 为 sky/ ;可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 |
推出保存:
命令 | 含义 | 命令 | 含义 |
esc | 重新进入命令模式 | esc + “:” | 进入vi行末模式 |
q | 退出 | q! | 强制退出 |
wq | 保存并退出 | w | 保存 |
ls | 执行系统命令 | ZZ | 保存退出 |
ZQ | 不保存退出 | :x | 保存退出 |
寄存器下的操作:
在复制前可以先指定一个寄存器,方法是在双引号后跟一个字母,例如"a指定了寄存器a,"B指定了寄存器B。所以,"ayy把当前行放进了寄存器a,以后就可以用"ap来粘贴寄存器a里的内容了。如果不确定寄存器里放了什么内容,可以使用:reg来查看。
Vim提供了一个很有用的特殊寄存器"+,它的内容就是系统剪贴板的内容。可以在Vim里用"+p粘贴出来。
多文件操作
:ls
- :bn
转到下一个buffer
:bp转到上一个buffer
:b 3转到编号为 3 的buffer
:b index.html转到名为index.html的buffer