vim常用快捷键
常用vim命令
命令列模式/ex模式的命令
1)vim与终端间的切换
:! 切换到terminal下执行命令并显示结果,按回车返回vim
:sh 切换到命令行,按Ctrl+d返回vim
:x 保存并退出,相当于:wq
ZZ 保存并退出,相当于:wq
2)设置行号:set nu/set number
显示命令 set showcmd
命令模式命令
1)移动光标命令
h或<– 光标左移一个字符
l或–> 光标右移一个字符
j或向下 光标下移一行
k或向上 光标上移一行
2)翻页命令
Ctrl+b 向上移动一页
Ctrl+f 向下移动一页
10Ctrl+f 向下移动10页
Ctrl+d 向下移动半页
Ctrl+u 向上移动半页
3)按行移动
gg 移动到文档的第一行,相当于1G
G 移动到文档的最后一行
nG 移动到文档的第n行,配合set nu使用
nh 光标向前移动n个字符
n 光标向后移动n个字符(等价于nl)
nk 光标上移n行
n 光标下移n行(等价于nj)
0或^或 光标移至该行行首
$或 光标移至该行行尾
:nEnter 在ex模式下输入行号,可直接定位到目标行
编辑命令:
1)删除命令
x 删除光标所在的字符
X 向前删除一个字符
nx 连续向后删除n个字符
dd 删除光标所在行
d0 删除光标所在处至行首的字符
d
删除光标所在处至行尾的字符2)复制粘贴命令yy复制光标所在行y0复制光标所在处至行首的字符y
复制光标所在处至行尾的字符
p 将复制的内容粘贴到光标的后面/下一行
P 将复制的内容粘贴到光标的前面/上一行
注意:当删除/复制一行的一部分时,p和P会把文本放在左侧或右侧;当删除/复制几行内容时,p和P会把文本放在下面或上面;
J 将光标所在行和下一行合并为一行
u 恢复上一次操作
U 取消在当前行上执行的所有操作
Ctrl+r 重做上一次操作
在一般模式切换到编辑模式可以使用的常用命令:
i 从目前光标所在处插入
I 从目前所在行中第一个非空格符处开始插入
a 从目前光标所在处的下一个字符出插入
A 在光标所在行的最后一个字符处插入
r 替换光标所在处的字符
R 一直替换光标所在的字符,知道按下Esc为止
s 删除光标所在字符,进入插入模式
3s 删除当前光标及其后面的2个字符,并进入插入模式
S 删除光标所在行,进入插入模式
“a3yy 将光标所在位置的三行复制到a剪贴板
“ap 将a剪贴板中的内容粘贴到当前位置
:n1,n2s/word1/word2/g //n1和n2为数字。在第n1和n2行之间寻找word1字符串,并将该字符串替换为word2。
:1,
s/word1/word2/g//从第一行到最后一行查找word1字符串,并将该字符串替换为字符串word2。:1,
s/word1/wod2/gc //从第一行到最后一行查找word1字符串,并将该字符串替换为字符串word2。且在替换前显示提示符给用户确认是否需要替换
:e! 强行回到文件打开时的状态(取消所有的改变)
03.1 单词间移动
w 光标向下一个单词移动(光标定位在第一个字母,标点也当作一个单词),当光标在行尾时,按下w将移动到下一行的行首。
b 光标向上一个单词移动(与w方向相反)。当光标在行首时,按下b将移动到上一行的行尾。
e 光标向下一个单词移动(光标定位在末尾的字母)
ge 光标向上一个单词移动(与e方向相反)
将上面的命令改为大写,作用是跳过字母间的的非字母字符,在空格/Tab间的字符间跳转。
W
B
E
gE
3.2 行首行尾定位
^/home/0 光标移动到所在行的行首
/end光标移动到所在行的行首1
光标移动到当前行的行尾
2
光标移动到下一行的行尾3
光标移动到当前行的下面第二行
03.3 根据单个字符定位光标命令(光标所在行)
f? 向后查找字符?并定位到此(?代表一个字符,f代表find)
3f? 向后定位到第三个?字符
F? 同f?,方向相反
t? (t-to)向后定位字符?,但光标停留在定位字符的前面的一个字符
T? 向前定位字符?,但光标停留在定位字符的后面的一个字符
–>使用;可以重复执行上述命令(向后)
–>使用,(同[;],但方向相反)
提示输入错误时,可按下Esc取消操作
3.4 成对符号匹配,如(),{},[]。
% 当光标定位在某个作括号上时,按下%时,就会定位到与之匹配的另一个括号上。重复按,光标就会在这两个括号间跳转。
3.5 行定位
30G 定位到第30行
gg 定位到第一行
G 定位到最后一行
50% 定位到文件的一半处
90% 定位到文件的大约90%处
H 定位到该页面的头部(home)
M 定位到该页面的总部(middle)
L 定位到该页面的末尾(Last)
3.6 显示当前光标的位置信息
Ctrl+g
:set number 显示行号
:set nonumber 不显示行号
:set ruler 显示光标所在的行列信息
3.7 滚动屏幕
Ctrl+d 屏幕向上滚动半页
Ctrl+u 屏幕向下滚动半页
Ctrl+e 屏幕向上滚动一行
Ctrl+y 屏幕向下滚动一行
zt 将光标所在行放置到该页的顶部
zz 将光标所在行放置到该页的中部
zb 将光标所在行放置到该页的底部
3.8 简单查找
/keyword 正向查找
?keyword 方向查找
n(next)继续上次查找
N方向进行查找
设置查找时忽略大小写 :set ignorecase
查找时可以使用上下键进行历史的查找
取词查找:将光标移动到要截取的词上,然后按下*,vim将把这个词作为关键字查找。
#功能相似,只是方向相反
\<仅在单词的开头进行匹配,>仅在单词的末尾进行匹配
/\
4.1
d3w 删除光标后的3个单词(包括光标所在单词,并且删除最后一个单词后的空白)
d3e 删除光标后的3个单词(包括光标所在单词,但是不删除最后一个单词后的空白)
4.2 改变文字内容c(change)
c2w[content] 将光标及其后的1个单词删除,并进入插入模式
cc 删除光标所在行,并进入插入模式
c
删除本行光标以后的内容,并进入插入模式x(等价于dl,删除光标下的字符)X(等价于dh,删除光标左侧的字符)D(等价于d
,删除当前至行尾的字符)
C (等价于c$,改变当前至行尾的字符)
s (等价于cl,改变一个字符)
S (等价于cc,改变一行)
在什么地方放置数字
3dw 一次删除一个单词,执行三次
d3w 删除3个单词
3d2w 一次删除2个单词,执行3次
r 替换光标所在字符,不需要按Esc
cl/s 替换光标所在字符,需要按下Esc
5rx 将光标及其后的4个字符替换为x
rEnter 将光标所在字符替换为回车(从光标处断行)
4rEnter 替换4个字符为回车
. 等价于(n),重复上次操作
df> 从当前位置删除到>
4.4 visul模式
v 选中字符模式
V 行选中模式
ve 选中一个字符串
Vjj 选中两行
Ctrl+v 块选择(定位到块的左上角,按下Ctrl+v,然后将光标移动到块的右下角即可)
当选中一个块后,可以使用o,O改变区域左右的边界
4.5 移动文本
使用d,x等命令删除文本时,内容都会被存储。
移动文本的方法:先删除要移动的文本,再在要放置的位置粘贴即可。
交换两个字符
例如:本来是想输入the,去输成了teh。将光标移动到e上,然后按下xp,即可交换e和h.
4.6 拷贝文本
yw 复制一个单词(包括单词后的空白符)
y2w 复制两个单词
ye 复制一个单词(不包括单词后的空白符)
yy/Y 复制一行
y$ 复制到行尾
4.7 使用剪贴板
“*yy 复制一行到剪贴板
“*p 将剪贴板的内容粘贴回来
4.8 文本对象
daw 删除一个内含单词(aw,a word)
cis 删除一个句子,并进入插入模式。(is,Inner Sentence)
das 删除一个内含句子
4.9 替换模式
R 替换光标以后的字符,按下Esc结束
4.10 结论
x 删除光标下的字符(“dl”的缩写)
X 删除光标前的字符(“dh”的缩写)
D 从当前位置删除到行尾(“d$”的缩写)
dw 从当前位置删除到下一个单词开头
d( 从当前位置删除到当前句子的开头
d) 从当前位置删除到当前句子的结尾
diw 删除光标上的单词(不包括空白字符)
daw 删除光标上的单词(包括空白字符)
dG 删除到文件末尾
dgg 删除到文件首
如果你将”d”,改为”c”,就会变为修改命令(删除相应字符,进入插入模式)。而改为”y”,则变为拷贝命令。其他命令类似。
~ 修改光标下字符的大小写,并移动到下一个字符。
7.编辑多个文件
7.1 编辑另一个文件
:edit foo.txt //在编辑一个文件时打开foo.txt。vim会关闭当前文件而打开这个新文件。如果当前文件没有保存,vim会提示你保存。
:edit! foo.txt //强制vim放弃当前修改并编辑新的文件。(也可以先保存当前文件在编辑新文件)
:hide edit foo.txt //如果你想编辑另一个文件,但有不想保存当前文件,可以隐藏它。
7.2 文件列表
可以在启动vim时打开许多文件。例如
vim a.c b.c d.c(在文件间切换时,vim按照打开时的顺序排列)
:n[ext] //编辑下一个文件
:wnext //保存当前文件再切换的下一个文件
:N/previous //编辑上一个文件
:wprevious //保存当前文件再切换的上一个文件
:first //移动到第一个文件
:last //移动到最后一个文件
:2next //向后跳两个文件
:2previous //向前跳两个文件
:file //
:files //列出目前vim打开的所有的文件
:set autowrite //每次都将修改存盘
7.3 从一个文件跳转到另一个文件
Ctrl+^ 当使用:next或:previous时,该快捷键可以在这两个文件间切换
7.4 文件备份
:set backup
:set backup=.bak //修改备份文件的扩展名为.bak
:set nobackup //不进行文件备份
7.5 文件间拷贝文本
1)编辑一个你要拷贝的文本文件,把光标移动到要拷贝的文本的开始处,用"v"命令启动可视模式,然后把光标移动到要拷贝文本的结尾处,输入"y"拷贝文本。
例如,要拷贝上面这段文字,你可以执行:
:edit thisfile
/1)编辑
vjj$y
现在编辑要粘贴的文本的文本。光标移到你要插入文本的地方。用"p"命令把文本粘贴到那里:
:edit otherfile
/There
p
使用寄存器
"fyas //拷贝一个句子到寄存器f,"yas"表示拷贝一个句子,"f告诉vim把文本拷贝到寄存器f(f表示First)
"l3y //拷贝3行到寄存l(l表示line)
Ctrl+V jjww "by //拷贝文本列块到寄存器b,Ctrl+V开启可视模式,"jjww"为选中文本命令
编辑另一个文件,并移动到要插入文本的地方,例如要插入f寄存器的内容:
"fp
"wdaw //将删除的单词存放在w寄存器中
:write >>logfile //将当前文件的内容写入到目标文件的末尾。
7.6 显示文件
vim -R file //以只读模式启动vim,但是可以强制写入
vim -M file //使vim工作在只读模式,任何对文件的修改都会失败
用户可以通过以下命令去掉这层保护:
:set modifiable
:set write
7.7 修改文件名
编辑一个新的文件的快捷方法是使用一个现存的文件。例如你已经有一个copy.c文件,先打开它:
:edit copy.c
编辑该文件,使用一个新的文件名保存该文件:
:saveas newfile.c
vim会用给定的名称保存文件,并开始编辑文件。这样下一次你用":write"保存修改时,
被写入的就是"newfile.c",而"copy.c"不会被改变。
8.分割窗口
8.1 分割窗口
最简单的命令是:
:split //水平分割
:vsplit //垂直分割
ctrl-w w 在窗口间跳转
CTRL-W h 跳转到左边的窗口
CTRL-W j 跳转到下面的窗口
CTRL-W k 跳转到上面的窗口
CTRL-W l 跳转到右边的窗口
CTRL-W H 跳转到最左边的窗口
CTRL-W J 跳转到最下面的窗口
CTRL-W K 跳转到最上面的窗口
CTRL-W L 跳转到最右边的窗口
:qall 表示 "quit all" (全部退出)
:wall 表示 "write all" (全部保存)