vim常用命令
VIM一般分几种模式,通过不同模式来区分输入的到底是文字还是命令:
1. Normal mode(common mode,以下简称 c-mode):
一进入 VIM 就是处于 c-mode,只能输入指令,不能输入文字。这些指令可能是光标移动的指令,也可能是编辑指令或寻找替换指令。
2. Insert mode(i-mode):
按 i/a/o 会进入 i-mode,此时可以在编辑区输入文字,按 Esc 会回到 c-mode。
3. Ed mode(common-line mode,e-mode):
按:进入 e-mode,VIM命令提示区(编辑区最下方)会有一个冒号:出现,可以输入命令行命令,按 Esc 回 c-mode。
4.replace mode
按R进入替换模式,Esc返回c-mode
tips:在vim中Esc键需要经常使用,可以通过修改注册表将Esc键和Caps键的功能换一下。
光标在字符间移动
k 上移
h 左移 (Backspace )
l 右移 (空格键 )
j 下移
光标在单词间移动(光标可以跨行,默认一个单词由字母,数字和下划线组成)
E e(end) 先移动到当前单词结尾,若已经在结尾,则移动到下一个单词结尾
B b(begin) 倒退到当前单词的开头,若已经在开头,则移动到上一个单词开头
W w(word) 移动到下一个单词开头,标点符号也算一个单词
注意:大写的命令仅以空格作为单词间的分隔符,其他标点符号作为单词的一部分。
整行移动
0 移动到当前行首
^ 移动到当前行的第一个非blank处
$ 移动到当前行行尾
+ 移动到下一行开头(主键盘区shift + ”=键”,Enter也可以)
- 移动到上一行开头
n| 移动到当前行的第n列
ctrl + o|i 光标移动到上一次位置
滚屏(光标跟着代码走)
Ctrl+f(forward) 往前滚动一整屏
Ctrl+b(backward) 往回滚动一整屏
Ctrl+d(down) 往上滚动半屏
Ctrl+u(up) 往下滚动半屏
Ctrl+e 往后滚动一行
Ctrl+y 往前滚动一行
用z调整行
zt(top) 将光标所在行移动到屏幕顶端
zz 将光标所在行移动到屏幕中间
zb(bottom) 将光标所在行移动到屏幕低端
在屏幕范围移动光标(不会滚屏)
H(hight) 将光标移动到屏幕顶端的行
M(middle) 移动到屏幕中央的行
L(low) 移动到屏幕底端的行
nH 移动到屏幕顶端往下的第n行
nL 移动到屏幕顶端往上的第n行
根据文本移动光标
% : 另一个对应的括号,包括(, {, [
根据文本块移动光标(编程时用得不多,编辑时使用)
文本块也就是句子、段落、小节等
( 移动到当前句子开头
) 移动到下一个句子开头
{ 移动到当前这一段开头
} 移动到下一段开头
[[ 移动到当前这一节的开头
]] 移动到下一节的开头
其中,VIM以? . !等符号来标记一个句子,空白行来标记一个段落。
根据行号来移动
G 移动到文本末尾
gg 移动到文本开头
nG 移动到第n行(同:n + enter命令一样)
Ctrl+g VIM显示区显示当前行的完整信息(从根盘符一直到当前行)
tips:``两个单反引号可以返回到使用G之前的位置,只能记住一个
插入
字符位置插入
i 在光标之前插入
I 在一行的开头处插入
a 在光标之后插入
A 在一行的结尾处追加
o 在光标所在位置的下一行打开新行插入
O 在光标所在位置的上一行打开新行插入
r 替换光标所在处一个字符
合并行
J 将下一行内容合并到当前行,中间空一个空格
字符删除
x 剪切光标所在处字符,不会自动跨行
X 剪切光标前一个字符
s 删除光标所在字符并进入插入模式(可以和v命令合用)
S 删除光标所在行并进入插入模式
单词删除
dw 从光标所在字符开始删除到下一个单词开头
de 删除到本单词末尾(标点也算一个单词)
dE 删除到本单词末尾(标点不算单词)
db 删除到前一个单词
dB 删除到前一个单词包括标点在内
行删除
dd 剪切本行所有内容
d$ 剪切本行光标位置(含)之后的所有内容(同shift D)
d0 剪切本行光标位置(不含)之前的所有内容
搜索
fa 在光标所在行搜索下一个字符a,不跨行
* 往后匹配一个光标当前所在的单词
# 往前匹配一个光标当前所在的单词
/xyz 往光标下搜索xyz字符串
?xyz 往光标上搜索xyz字符串
gd 跳到该单词定义的位置
n 下一个搜素目标
N 上一个搜索目标
:set hls 打开高亮
:set nohls 关闭高亮
标记
ma 将光标当前位置标记为a
'a 单引号加标记号,跳到标记处
复制(y)与粘贴
yw 复制从光标开始(含)到词尾的字符
yb 复制从光标开始(不含)到词首的字符
yy 将当前行复制到缓存区
nyy 将当前行向下n行复制到缓冲区
nyw 复制从光标开始的n个单词(标点符号算一个单词)
y^ 复制从光标到行首的内容(y$到行尾)
p 在光标之后粘贴剪切板里的内容
P 在光标之前粘贴剪切板里的内容
tips:含后不含前(往前不含当前光标所在字符,往后含当前光标所在字符)
另外可以给缓存区做标记,方便以后引用,需要用到双引号:
"ayy, "byy等,使用时"ap或"bp,粘贴不同的内容。
系统粘贴板
从系统粘贴板复制到vim中:shift + Insert 或 "+p
从vim复制到系统粘贴板:"+y
替换
:s/old/new 用new替换当前行中首次出现的old
:s/old/new/g 用new替换行中所有的old
:n,m s/old/new/g 用new替换从n到m行里所有的old
:%s/old/new/gic 用new替换当前文件里所有的old,c为confirm
修改(c):指先删除,再进入编辑
通过c指令后面的参数,删除相应的内容,然后进入编辑模式修改。
C或c$ 对当前行光标后面的内容进行修改
c0或 c^ 对从光标处到当前行行首的内容进行修改
cc 或S 对当前行进行修改
cw 对光标所在字符到该单词结束部分进行修改(先删除再进入编辑状态)
cfx 或cFx 对从光标到下一个字符 x 之间的文本进行修改
cFx 对从光标到上一个字符 x 之间的文本进行修改
cG 表示对当前行至文本末行内容进行修改
tips:c 命令所删除的数据都存在缓冲区, 可以粘贴使用。
重复
. 重复上一次的命令
N<command> 重复某个命令N次,esc键执行该组合命令,enter键表示光标换行。
10I*<esc>:在一行开头输入十个*
5o###<esc>:在下5行中每一行开头插入###
5h:左移5次
n+:向下跳n行
n-:向上跳n行
nx:剪切从光标开始的n个字符
3dd:删除3行
撤销
u 撤销上一步操作,可执行多次
U 撤销对当前行的所有操作
Ctrl+r 反撤销 To undo the undo's, type: CTRL-R
visual模式
在可视化模式下,通过高亮显示,不但可以看到将要被操作的对象,而且可以对选中的文本块整体进行操作。
v 进入字符可视化模式,文本选择是以字符为单位。
V 进入行可视化模式,文本选择是以行为单位。
ctrl-V或ctrl-Q 进入块可视化模式
ctrl + v:选中指定一列
gv 再次选中前一次可视化模式时选择的文本
可视模式下:
o光标移动到块区的对角,O移动到水平的另一边。
vi[或vi’或vi} 选中当前光标所在的整个[]或’’或{}内的内容
va[或va’或va} 同上,而且符号本身也会被选中
viw 选中一个单词
代码格式化
对代码进行缩进处理,用等号命令: =
全部格式化 : gg=G
对当前行格式化: ==
对多行格式化: [count] ==
对选区格式化:选中后 [count] > 右移count个tab
分屏
:sp 同一个文档垂直分隔成两个屏幕,可以显示不同内容
打开/保存/退出/改变文件
:e <path/to/file> 打开一个文件
:w 保存文件
:saveas <path/to/file> 另存为 <path/to/file>
:wq 保存并退出
:q! 退出不保存
:qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
:bn 和 :bp 可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。