工作中经常用vi,所以统计整理了一下自己用得最多一些vi编辑器的快捷键。
常用的设置项
命令 | 作用 |
set nu | 显示行号 |
set nonu | 隐藏行号 |
set ts=4 |
将1个制表符的长度设为4 将缩进长度设为4 |
set sw=4 (shiftwidth) | |
set expandtab | |
syntax on | 开启语法高亮 |
常用快捷键
复制 | |
命令 | 作用 |
yy => p | 复制光标所在行,p粘贴 |
nyy => p | 复制包含光标以内的n行,p粘贴 |
yy =>np | 将复制的内容粘贴n次 |
yw | 复制光标所在的一个词(光标之后部分) |
ynw | 复制光标所在的之后n个词 |
yb | 复制光标所在的一个词(光标之前的部分) |
ynb | 复制光标所在处的之前n个词 |
y^ | 复制行首到光标之间的内容 |
y$ | 复制光标所在处到行尾的内容 |
y1G | 复制文档首部到光标所在处的内容 |
yG | 复制光标处到文档尾部的内容 |
剪切 | |
命令 | 作用 |
x | 剪切光标所在的单个字符 |
nx | 剪切包括光标所在及其后的n个字符 |
dw,de | 剪切光标之后一个词(或者说是光标所在的word的后部分) |
dnw,dne | 剪切光标之后n个词 |
db | 剪切光标前面一个词(或者说是光标所在的word的前部分) |
dnb | 剪切光标之前n个词 |
d$或者D或者C | 剪切至行尾 |
d^ | 剪切至行首 |
dd | 剪切当前行,注意是剪切,而不是删除,之后可以使用p招贴 |
ndd | 剪切包含本行在内的n行 |
dG | 从光标所在处,删除至文档结尾处 |
dnG | 删除从第n行到光标所在行的内容 |
v | 进入visual视图 |
d => p | 在visual视图模式下,利用方向键选中内容后,d表示剪切,然后p粘贴 |
粘贴 | |
p | 粘贴在光标之后 |
P | 粘贴在光标之前 |
替换 | |
r + char | 将光标所在的字符替换为char |
R | 从光标处开始,持续替换,知道ESC退出替换 |
~ | 命令模式下翻转光标所在的大小写,如果在visual模式下,则翻转所选中的内容的大小写 |
u | 撤销 |
ctrl + r | 反撤销 |
:s/old/new | 将本行的第一个old替换为new,注意只替换本行的第一个old |
:s/old/new/g | 将本行的所有old替换为new,注意替换本行的所有old |
:s/old/new/gc | 将本行的所有old替换为new,每次替换前,先询问是否替换 c->confirm |
:10,20s/old/new | 将第10行到第20行之间的第一个old替换为new |
:10,20s/old/new | 将第10行到第20行之间所有的old都替换为new |
查找 | |
/keyword | 向后查找keyword |
?keyword | 向前查找keyword 然后n查找下一个,N查找上一个 |
:noh | 取消查找后keyword的高亮状态 |
缩进 | |
<< | 向左缩进 |
>> | 向右缩进 |
n<<或者n>> | 向左或向右缩进n个tab |
shift + j | 删除行末的换行(代码提交之前的压缩) |
光标移动 | |
h | 光标左移 |
j | 光标下移 |
k | 光标上移 |
l | 光标右移 |
shift + h | 光标移动到屏幕的第一行 |
shift + l | 光标移动到屏幕的最后一行 |
加密 | |
vi -x a.txt | 编辑a.txt之前设定密码或者输入密码,输入密码不对,看不到真实内容 |
文件切换 | |
vi a.txt b.txt c.txt | 同时编辑多个文件 |
:first | 切换到第一个文件 |
:previous | 切换到上一个文件 |
:next | 切换到写一个文件 |
:last | 切换到最后一个文件 |
文字大小 | |
ctrl + | 放大字体(注意是ctrl+shift+=) |
ctrl - | 减小字体 |
mac下对应 | |
command + | 放大 |
command - | 缩小 |
多栏多列窗口 | |
vi -o a.txt b.txt | 多窗口的方式打开a.txt,b.txt |
:split a.txt | 水平分出一栏,打开a.txt,呈上下两块 |
:vsplit a.txt | 垂直分出一栏,打开a.txt,呈左右两块 |
ctrl + w(两下w) | 光标切换到下栏(一次切换) |
ctrl + w + h | 光标切换到当前窗口的左边窗口 |
ctrl + w + j | 光标切换到当前窗口的下边窗口 |
ctrl + w + k | 光标切换到当前窗口的上边窗口 |
ctrl + w + l | 光标切换到当前窗口的右边一窗口 |
ctrl + w + t | 光标切换到最上面的窗口 |
ctrl + w + b | 光标切换到最下面的窗口 |
:wall | 保存所有做过修改的窗口的文件 |
:qall | 退出所有保存过的文件 |
视野移动 | |
zt | 将光标所在行移到屏幕最上面 |
zz | 将光标所在行移到屏幕中间 |
zb | 将光标所在行移到屏幕最下面 |