Vim官网:*
http://www.vim.org/
Vim文档:
Vim简介
-
Vim(Vi[Improved])
编辑器是功能强大的跨平台文本文件编辑工具,继承自Unix系统
的Vi
编辑器,支持Linux/Mac OS X/Windows系统
,利用它可以建立、修改文本文件
-
Vim
是从 vi
发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,和Emacs
并列成为类Unix系统
用户最喜欢的文本编辑器。
-
vim
的设计理念是命令的组合
Vim的6种基本模式
-
普通模式
使用vim打开一个文件时默认模式。在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim
启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)
-
插入模式
也可以叫做编辑模式,在普通模式下敲击i
、a
或 o
就进入插入模式,允许用户通过键盘输入、编辑。在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一只保持这个模式。在插入模式中,可以按ESC
键回到普通模式
-
可视模式
在普通模式下敲击前盘上的v
键,就进入可视化模式,然后移动光标就可以选中一块文本,常用来完成文本的赋值、粘贴、删除等操作。这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim
的“文本对象”也能和移动命令一样用在这个模式中
-
选择模式
这个模式和无模式编辑器的行为比较相似(Windows
标准文本控制的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim
会用这个字符替换选择的高亮文本块,并且自动进入插入模式
-
命令行模式
在命令行模式可以输入会被解释成并执行的文本。在执行命令后,Vim返回到命令模式之前的模式,通常是普通模式
-
Ex模式
这和命令行模式比较相似,在使用:visual
命令离开Ex
模式前,可以一次执行多条命令。
这6中模式我们常用到就是普通模式、插入模式 和 命令行模式
Vim键盘图
模式的切换
在刚进入Vim
时,便进入了普通模式,在普通模式中可以按i
(插入)或者a
(附加)进入插入模式,在普通模式中按:
进入命令行模式;在命令行模式中和插入模式中按ESC
返回到普通模式。如图:
常用命令及说明
命令 |
说明 |
h |
向 左 移动 |
l (小写字母L) |
向 右 移动 |
j |
向 下 移动 |
k |
向 上 移动 |
xh |
向 左 移动x 个字符距离 |
命令 |
说明 |
w |
将光标移动到下一个单词的开头 |
b |
将光标移动到前一个单词的开头 |
e |
将光标移动到下一个单词的词末 |
E |
移动到单词的结尾(忽略标点符号) |
ge |
将光标移动到上一个单词的词末 |
2w |
指定移动的次数 |
命令 |
说明 |
$ |
将光标移动到当前行的行尾 |
0 |
将光标移动到当前行的行首 |
^ |
将光标移动到当前行的第一个非空字符(行首和当前行非空字符不是一个位置) |
2| |
移到当前行的第2 列 |
fx |
将光标移动到当前行的第一个字符x 上 |
3fx |
将光标移动到航前行的第3个字符x 上 |
tx |
将光标移动到目标字符x 的前一个字符上 |
% |
用于符号间的移动,它会在一对() 、[] 、{} 之间跳跃 |
fx
和 tx
可以通过 ;
和 ,
进行重复移动,一个是正向重复,一个是反向重复
命令 |
说明 |
( |
移到当前句子的开头 |
) |
移到下一个句子的开头 |
{ |
移到当前一段的开头 |
} |
移到下一段的开头 |
[[ |
移到当前这一节的开头 |
]] |
移到下一节的开头 |
命令 |
说明 |
xG |
跳转到指定的第x 行,G 移动到文件按末尾 |
``(2次单引号) |
返回到跳转前的位置 |
gg |
移动到文件开头 |
x% |
移动到文件中间,就使用50% |
H |
移动到home |
M |
移动到屏幕中间 |
L |
移动到一屏末尾 |
ctrl+G |
查看当前的位置状态 |
命令 |
说明 |
ctrl+u /ctrl+d
|
半屏滚动 |
ctrl+f /ctrl+b
|
全屏滚动 |
命令 |
说明 |
zz |
将光标置于屏幕的中间 |
zt |
将光标移动到屏幕的顶部 |
zb |
将光标移动到屏幕的底部 |
命令 |
说明 |
mx , my , mz
|
设置三个位置 |
x , y , z
|
跳转到设置 |
命令 |
说明 |
i |
在当前光标的前面插入字符 |
a |
在当前光标的后面追加字符 |
o |
在当前光标的下一行行首插入字符 |
I (大写字母i ) |
在一行的开头添加文本 |
A |
在一行的结尾处添加文本 |
O |
在光标当前行的上一行插入文本 |
s |
删除当前光标处的字符并进入到插入模式 |
S |
删除光标所在处的行,并进入到插入模式 |
u |
撤销修改 |
命令 |
说明 |
x |
删除当前光标所在处的字符 |
3x |
删除3 个连续字符,以此类推 |
X |
删除当前光标左边的字符 |
Delete |
同 x
|
dw |
删除一个单词(从光标处到空格) |
daw |
无论光标在什么位置,删除光标所在的整个单词(包括空白字符) |
diw |
删除整个单词文本,但是保留空格字符不删除 |
d2w |
删除从当前光标开始处的2 个单词 |
d$ 或 D
|
删除从光标到一行末尾的整个文本 |
d0 (字母d 和数字0 ) |
删除从光标到一行开头的所有单词 |
dl (字母d 和小写字母L ) |
删除当前光标处的字符(等同于x ) |
dh |
删除当前光标左边的字符(等同于X ) |
dd |
删除当前光标处的一整行(等同于D ) |
5dd |
删除从光标开始处的5 行代码 |
d^ |
删除至行首 |
dgg |
删除从光标到文本开头 |
dG |
删除从光标到文本结尾 |
d1G |
删除至文档首部 |
J |
删除一个分行符,将当前行与下一行合并 |
命令 |
说明 |
y |
复制 |
y0 (数字0 ) |
复制从当前光标到行首的所有单词 |
yy |
复制一整行 |
3yy |
复制从当前光标所在行开始的3 行 |
y^ |
复制至行首,不含光标所在处字符 |
y$ |
复制从当前光标到行结尾的所有单词 |
yw |
复制一个单词 |
y2w |
复制2 个单词 |
yG |
复制至文本末 |
y1G |
复制至文本开头 |
p |
粘贴到光标后 |
P |
粘贴到光标前 |
ddp |
剪切并粘贴 |
复制文本块
1.首先进入visual
(可视)模式:v
2.移动光标选择文本
3.复制与粘贴的操作
命令 |
说明 |
cw |
删除从光标处到单词结尾的文本并进入到插入模式 |
cb |
删除从光标处到单词开头的文本并进入到插入模式 |
cc |
删除一整行并进入到插入模式 |
~ |
修改光标下字符的大小写 |
r |
替换当前光标下的字符 |
R |
进入到替换模式,连续替换,直到按下Esc |
xp |
交换光标和下一个字符 |
r+<待替换字母> |
将游标所在字母替换为指定字母 |
C(大写) |
替换游标以后至行末 |
命令 |
说明 |
/string |
正向查找 |
?string |
反向查找 |
f<字母> |
向后搜索<字母> 并跳转到第一个匹配的位置 |
F<字母> |
向前搜索<字母> 并跳转到第一个匹配的位置 |
t<字母> |
向后搜索<字母> 并跳转到第一个匹配位置之前的字母 |
T<字母> |
向前搜索<字母> 并跳转到第一个匹配位置之后的字母 |
:s/old/new |
将当前行的第一个字符串old 替换为new
|
:s/old/new/g |
将当前行的所有字符串old 替换为new
|
:90s/old/new/g (90指定的行数) |
将指定行的所有字符串old 替换为new
|
:90,93s/old/new/g (90,93指定的行数) |
将指定范围的行的所有字符串old 替换为new
|
:%s/old/new/g |
将文本中所有的字符串old 替换为new
|
:%s/old/new/gc |
依次替换每个字符串关键字 |
:%s/^struct/int/g |
将所有以struct 开头的字符串替换为int
|
设置高亮显示
:set hls
*
按键将当前光标处的单词高亮显示,使用n
浏览下一个查找高亮的结果
命令 |
说明 |
u |
撤销上一步的操作 |
Ctrl+r |
将原来的插销重做一遍 |
U |
恢复一整行原来的面貌(文件打开时的文本状态) |
:q |
若文件没有修改,直接退出 |
:q! |
文件已经被修改,放弃修改退出,不保存 |
:wq |
文件已经被修改,保存修改并退出 |
:wq! |
强制保存并退出 |
:w 文件路径 |
另存为 |
:saveas 文件路径 |
另存为 |
:x |
保存并退出 |
shift+zz |
退出vim
|
命令 |
说明 |
>> |
整行向右缩进 |
<< |
整行向左回退 |
/+<需要查找的字符串>+回车 |
向下查找(进入查找之后,输入n 和N 可以继续查找,n 是查找下一个内容,N 查找上一个内容,命令行模式下输入noh 回车可取消搜索) |
?+<需要查找的字符串>+回车 |
向上查找(进入查找之后,输入n 和N 可以继续查找,n 是查找下一个内容,N 查找上一个内容,命令行模式下输入noh 回车可取消搜索) |
\* |
寻找游标所在处的单词 |
:set nu |
显示行号 |
:set shiftwidth=10 |
设置缩进为10 个字符,以此类推(输入Es c回到普通模式,再次尝试>> 看缩进是否变化) |
:ce(center) |
本行内容居中 |
:ri(right) |
本行内容居右 |
:le(left) |
本行内容居左 |
:== |
当前行自动缩进 |
:n== |
(n 是自然数)表示自动缩进从当前行起的下面n 行 |
命令 |
说明 |
:buffers |
查看缓冲区列表(等同于(小写字母L )ls ) |
:buffer N |
根据缓冲区列表的编号跳转到指定缓冲区 |
:bnext/bprev |
遍历缓冲区列表 |
:bfirst/blast |
分别调到缓冲区列表的开头和结尾 |
:write |
将缓冲区的修改保存到磁盘上 |
:edit! e! |
放弃缓冲区的修改,恢复到文件打开时的状态 |
:edit file |
编辑另一个文件 |
:wnext |
保存当前缓冲区的修改并跳转到缓冲区列表中的下一个文件 |
命令 |
说明 |
tabedit file / tab split
|
标签页的新建 |
tabn / tabp
|
标签页的切换 |
gt / gT
|
按键 |
tabclose |
标签页的关闭 |
tabonly |
关闭当前的标签页 |
zf200G |
将光标和200 行之间的代码折叠起来 |
za |
打开和关闭折叠 |
zr / zm
|
一层一层地打开和关闭折叠 |
zR / zM
|
分别打开和关闭所有的折叠 |
zj |
跳转到下一个折叠处 |
zk |
跳转到上一个折叠处 |
zd |
删除光标下的折叠 |
zD |
删除光标下的折叠以及嵌套的折叠 |
zE |
删除所有的折叠标签 |
创建的折叠当退出vim之后就失效了
命令 |
说明 |
split / vsplit fileName
|
分割窗口 |
ctrl+w hjkl ctrl+w w
|
窗口间跳转 |
ctrl+w HJKL |
移动窗口 |
ctrl+w +/- |
调整窗口的高度 |
ctrl+w </> |
调整窗口的宽度 |
ctrl+w = |
所有的窗口设置相同的尺寸 |
close |
关闭一个窗口 |
qall |
退出所有窗口 |
qall! |
放弃修改,退出所有窗口 |
wqall |
保存并退出所有窗口 |
wall |
保存所有窗口 |