VIM支持四种基本的模式,即普通模式,插入模式,视图模式和命令行模式.html
普通模式是最经常使用的,该模式下,能够执行不少编辑操做以及其余的命令,程序员
vim最经常使用的效率最高的操做均是在普通模式下执行的.若是编辑文件须要中止一会或者你去休息了,最好让vim处于普通模式下.vim
在任何模式下都可使用[ESC]按键退回到普通模式下,<C-c>命令也能够作到这点.函数
可是执行ESC命令时,手指活动的范围太大,操做多了会以为很累.插入模式下能够执行<C-[>命令回到普通模式下.spa
a/A命令行
i/I设计
corm
V:选择当前行进入视图模式htm
v:选择当前字符进入视图模式内存
<C-v>:进入列块视图模式
gv:重选上次的选取
:set number显示行号
:q/w
Vim [filename,...]
Vim [filename,...] +line_num 打开文件并定位到指定行
:q无修改退出
:q!放弃修改强制退出
:wq保存修改退出
:x 同:wq
ZZ 同:wq
ZQ 同去q!
:w保存缓冲区内容到文件
命令行模式下输入须要查看的命令或者内容便可查看帮助文档,例如
:h c 查看c命令的帮助文档
:h motion 查看有关motion的内容
h/j/k/l可用于当前光标位置的左上右下移动,
h:光标移动到左边一个字符,若是到达行首,则进入上一行
j:光标移动到下一行相同的位置
k:光标向上移动一行到相同的位置
l:光标向右移动一个字符,若是到达行尾,则进入下一行
须要注意的是,上面的针对操做针对实际行。
这是最基本最简单的移动方式,固然这也是最低效的。
行是以分行符来区分的,即一个分行符内的文本为一个实际行,无论屏幕自动分行显示了多少行,都是一个实际行,若是超出屏幕窗口显示长度而自动分行,那么此时这些行称为屏幕行。
若是是在屏幕行上下移动的话则须要在上述命令前加g。
F/f{char}
行内搜索字符移动,f{char}搜索本行光标以后的某个字符,并移动到第一个匹配字符后的一个位置;F命令正好是反方向的。
T/t{char}:
t命令与f命令类似,只是他会移动到匹配字符的前一个字符位置上。
/{chars}
全文搜索匹配的字符串,并移动到第一个匹配字符串的首位置。
*
在当前光标所在的单词或者字符串位置,按键*会查找匹配该单词或者字符串,并进入下一个匹配字符串的首位置。
gg:文件头部
G:文件尾部
nG:移动到指定行,n为行号
0:行首
$:行尾
^:行首第一个非空字符
H:屏幕头部
L:屏幕底部
M:屏幕中间
能够在H/L/M前面加上数字,此时这些数字不表明倍数,而是指距离目标位置多少行。
好比3H指的是光标定位到距离屏幕顶部3行的位置。
<C-f>:向下翻一页
<C-b>:向上翻一页
<C-d>:向下翻半页
<C-u>:向上翻半页
<C-e>:光标位置不变,向上按行滚屏
zz:滚动屏幕,使本行显示在屏幕中间
E:移动到本字符串或者下一个字符串的尾部
e:移动到本单词或者下一个单词的尾部
B: 移动到上一个字符串的首部
b:移动到上一个单词的首部
W:移动到下一个字符串的首部
w:移动到下一个单词的首部
) 移至下一个句子(sentence)首。
( 移至上一个句子(sentence)首。
} 移至下一个段落(paragraph)首。
{ 移至上一个段落(paragraph)首。
sentence 是以 . ! ? 为区格。
paragraph 是以空白行为区格。
有时咱们须要在函数间内快速移动,对于程序员来讲,这是最快的最适合的移动方式。
[[:进入上一个函数的起始处
]]:进入下一个函数的起始处
像<>/{}/()这样的成对出现的标记符号,能够快速的定位.
光标先定位到其中一个,而后执行%便可定位到另外一个标记位置上.
删除即剪切
d{motion}
dd:删除光标所在的整行
c{motion}
C:删除当前光标到行尾,而且进入插入模式
cc:删除本行内容,而且进入插入模式
插入模式内删除
<C-w>:删除光标到本字符串起始处
<C-u>:删除光标到行首处
X:删除光标前一个字符
x:删除光标所在的字符
y{motion}
yy复制当前光标所在的整行。
若是不指定寄存器,那么文本将会复制到默认寄存器和选择专用寄存器中,若是想使用寄存器,那么在该命令以前指明寄存器。请参考【寄存器】一节。
执行粘贴的是p命令。
若是复制的是非行文本,那么在当前光标以后粘贴,若是是行,那么粘贴到下一行,这是小写的p命令;大写的P命令正好相反。
另外若是仅执行p/P命令,那么,粘贴的是默认寄存器中的文本,若是向粘贴某个寄存器中复制的文本,那么必须在前面指明寄存器。请参考【寄存器】一节。
u
O/o
Motion用于执行删除拷贝等操做符的做用范围,简单而言就是选取。
aw:整个单词,包含先后的空白符
iw:整个单词,不包括先后的空白符
i/a{
i/a[
i/a(
a/it:html等标记语言的tag范围
t/T{char}
F/f{char}
典型:
daw:删除整个单词包括先后的空白符
Ctrl+r
恢复撤销的修改。
.
点命令支持对上一次的操做重复执行。合理设计命令再执行点命令将会大大提升执行效率。
寄存器是文件编辑时使用到,能够临时保存文件的删除复制的内容。灵活使用寄存器将大大提升复制和删除的效率。
使用寄存器
“{register}
默认寄存器
Vim默认使用的寄存器,若是执行文件操做时不指定寄存器时,将默认使用。
等同于””
复制专用寄存器
0:在执行复制操做时,若是没有指定寄存器,那么vim将会将复制的内容将保存在该寄存器。
字母寄存器
a-z:新的内容将会覆盖旧内容
A-Z:新内容追加的旧内容上
系统寄存器
Vim与系统剪贴板的联系经过寄存器“+”,这就容许vim从系统剪贴板拷贝其余程序复制的内容,或者将vim的内容复制到寄存器提供给其余程序使用。
黑洞寄存器
_:若是真正想删除文件内容而且再也不使用,那么应该使用黑洞寄存器,使用后该内容将一去不返!
查找
f{char}:本行内正向搜索字符
F{char}:本行内反向搜索字符
/{chars}:全文搜索字符串
*:全文搜索光标下的字符串,并跳转到符合匹配的字符串位置
插入模式下:
<C-d>:当前行左缩进tab
<C-t>:当前行右缩进tab
普通模式下
>>:当前行右缩进一个tab
<<:当前行左缩进一个tab
视图模式下:
>>:当前选中行右缩进一个tab
<<:当前选中行左缩进一个tab
Vim原生支持自动补全功能。可在插入模式下触发。
插入模式下触发方法总结
命令 |
用途 |
<C-p> |
普通关键字 |
<C-n> |
普通关键字 |
<C-x><C-n> |
当前缓冲区关键字 |
<C-x><C-i> |
包含文件关键字,例如c/cpp语言下的include包含进来的文件中匹配。 |
<C-x><C-]> |
标签文件关键字 |
<C-x><C-k> |
字典查找 |
<C-x><C-l> |
整行补全 |
<C-x><C-f> |
文件名补全 |
<C-x><C-o> |
全能补全,根据光标所在的上下文的短范围文本进行匹配补全 |
|
|
若是匹配选项存在多个的话,那么会弹出选择下拉菜单,支持可使用<C-n><C-p>选择上一项或者下一项,固然也可使用上下箭头按键选择。
r{char}:替换单个字符
R{chars}:按位替换,至关于【insert】按键功能
Substitute替换命令
:[range]s/{pattern}/{string}/[flags]
:s/src/des:替换当前行第一个匹配的字符串
:s/src/des/g:替换当前行全部匹配的字符串
:%s/src/des/g:替换全文匹配的字符串
:%s/src/des/gc:替换全文匹配的字符串,替换时询问是否替换
VIM使用缓冲区来管理窗口上的文件显示,每一个缓冲区仅针对一个文件,一个文件可使用多个缓冲区。
缓冲区是文件加载到内存后的显示,因此对文件的修改其实是对缓冲区的修改,仅当执行了保存,缓冲区的内容才会写入真实的文件中。
缓冲区列表在vim同时打开多个文件时使用很是方便,当仅限于查看而已,不能使用缓冲区命令中途打开新文件。
查看当前缓冲区列表
:ls
查看指定缓冲区
命令 |
用途 |
:b[uffer]f |
激活并显示第一个缓冲区 |
:b[uffer]l |
激活并显示最后缓冲区 |
:b[uffer]n |
激活并显示下一个缓冲区 |
:b[uffer]p |
激活并显示上一个缓冲区 |
:b[uffer] N |
激活并显示指定序号的缓冲区 |
:b[uffer] path |
激活并显示指定文件路径的缓冲区 |
删除缓冲区
:bdelete N1[,N2...Nn]
:N,M bdelete
:tabedit {filename}命令在一个新的标签页打开文件,若是省略了{filename}参数,那么vim建立一个新的标签页,可是缓冲区空。
<C-w>+T:若是当前标签页包含了多个缓冲区窗口,使用该命令能够将当前缓冲区窗口移动到一个新的标签页。
命令 |
用途 |
:tabe[dit] {filename} |
在新的标签页总打开filename |
<C-w>+T |
把当前窗口移到一个新标签页 |
:tabc[lose] |
关闭当前标签页以及其中的全部窗口 |
:tabo[nly] |
只保留当前活动标签页,关闭全部其余的标签页 |
标签页切换
Ex命令 |
普通模式命令 |
用途 |
:tabn[ext] {N} |
{N}gt |
切换到编号为{N}的标签页 |
:tabn[ext] |
gt |
切换到下一个标签页 |
:tabp[revious] |
gT |
切换到上一个标签页 |
标签页移动
命令 |
用途 |
:tabmove N |
将当前活动的标签页移动到制定编号的位置 |
:tabmove 0 |
将当前活动标签页移动到开头 |
:tabmove |
将当前活动标签页移动到结尾 |
VIM支持分屏显示。
左右分屏:<C-w>+v
上下分屏:<C-w>+s
在使用<C-w>执行分屏时,是以当前缓冲区为基准的,同时获得的新的缓冲区将于原先的保持同步。
若是须要打开其余的文件,那么使用命令:e[dit] filename
或者从命令模式中分割窗口
:vsplit filename
:split filename
关闭当前分屏:<C-w>+c或者<C-w>+q,须要注意的是若是当前仅有一个屏幕,那么执行<C-w>+q会退出vim。
使用<C-w>+o关闭全部其余的分屏
使用<C-w>+w能够循环切换分屏
切换分屏:<C-w>+h/j/k/l,该命令将光标在几个不一样的屏幕之间切换
命令模式下:pwd
命令模式下:He,水平分屏浏览当前目录
命令模式下:Ve,垂直分屏浏览当前目录
若是命令后方追加!,那么将会调整分屏的次序。
ddp
进入命令模式,
:!{cmd}
好比查看当前所在路径的全部文件清单
:!ls
:lcd {path}该命令能够设定当前窗口的本地工做目录,使用该命令可让咱们不一样的标签页工做在不一样的目录下。
当光标处于一个文件路径时,此时在普通模式下执行gf能够在当前窗口中直接打开该文件