插入
字符 | 含义 |
---|---|
a | 在当前光标后插入文本 |
A | 在本行行尾插入文本 |
i | 在光标前插入文本 |
I | 在本行行首插入文本 |
o | 在光标下插入新行 |
O | 在光标上插入新行 |
h | 左移一个字符 |
j | 下移一个字符 |
k | 下移一个字符 |
I | 右移一个字符 |
$ | 移动至当前行的行尾 |
0 | 移动至当前行的行首(数字零) |
H | 移动屏幕上端 |
M | 移动至屏幕中央 |
L | 移动屏幕下端 |
Gg | 到整个文件的第一行 |
G | 到整个文件的最后一行 |
nG | 到第n行,例如5G 到整个文件的第5行 |
:n | 到第n行 |
删除
字符 | 含义 |
---|---|
x | 删除光标所在处字符 |
nx | 删除光标所在处n个字符 |
dd | 删除光标所在行 |
ndd | 删除n行,例如:5dd 删除5行 |
dG | 删除光标所在处到末尾的内容 |
D | 删除从光标所在处到行尾 |
:n1,n2d | 删除指定范围的行,表示删除从n1行开始至n2行。例如:8,20d 表示删除从第8行至第20行的内容 |
复制和粘贴
字符 | 含义 |
---|---|
yy,Y | 复制当前行 |
nyy,nY | 复制当前行以下的n行 |
dd | 剪切当前行(先删除再粘贴) |
ndd | 剪切当前行以下n行 |
p | 将内容粘贴在当前光标所在行的下一行(小写) |
P | 将内容粘贴在当前光标所在行的上一行(大写) |
D | 删除从光标所在处到当前行的行尾 |
:n1,n2d | 删除指定范围的行,表示删除从n1行开始至n2行。例如:8,20d 表示删除从第8行至第20行的内容 |
替换和取消
字 符 | 含 义 |
---|---|
r | 替换光标所在处的字符 |
R | 从光标所在处开始替换字符,按ESC结束。例如:this is a test document 假如当前光标在a处,你在命令模式下输入了R。则你开始输入的内容都会把a test document给替换掉 |
u | 取消上一步操作 |
搜索和替换
字 符 | 含 义 |
---|---|
/string | /表示从文档从前往后查找string,当按n的时候就会跳转到字符在一个出现的地方,当按N的时候,会向上跳转到上次出现的地方,开启搜索时忽略大小写 :set ic,关闭搜索时忽略大小写 :set noic |
n | 从前往后查询字符出现的位置 |
N | 从后往前查找字符出现的位置 |
:%s/old/new/g | 全文替换指定字符串,old表示要替换的字符。new表示要替换成的字符,例如,将文档中所有123字符替换为789, :%s/123/789/g |
:n1,n2s/old/new/g | 在一定范围内替换指定字符串,跟全文类似。只不过在一定范围。n1和n2表示在某一定行内。 例如:将第10行至12行中的789替换成007字符 :10,12s/789/007/g, 也可以把:10,12s/789/007/g后面的g改为c字符 (:10,12s/789/007/c)会出现确认信息提示你是否要替换(类似Windows中的:你确定要删除吗?) replace with 007 (y/n/a/q/l/^E/^Y)? y:替换 n:不替换 a:替换所有 q:取消替换 |
保存和退出
字 符 | 含 义 |
---|---|
:w | 只保存不退出 |
:w a.txt | 保存至a.txt文件(另存为) |
:q | 只退出 |
:q! | 退出不保存 |
:wq | 退出并保存 |
:wq! | 强行退出并保存(只针对于文件的所有者或者root才能这样做) |
ZZ | 退出并保存(等同于:wq) |
其他技巧
字 符 | 含 义 |
---|---|
导入文件 | :r 文件名例1:将hello文件的内容导入到当前光标所在处 :r hello |
导入命令执行结果 | :r !命令 例2:将系统当前时间导入到当前光标处 :r !date |
在vi中执行命令 | :! 命令 例如:正在vi编辑某个文件的时候,想查看/root/test目录下有哪些内容,可以执行如下命令 :! ls /root/test 此时屏幕将会出现test目录中的内容,会提示你按任意键回到vi编辑中 Press ENTER or type command to continue |
定义快捷键 | :map 快捷键 触发命令 例1:不管光标在当前行的任意位置,当按下ctrl+b的时候。将行首的#注释给删除掉。 命令如下 :map ^b 0x 例2:不管光标在当前行的任意位置,当按下ctr+p的时候。给行首添加#注释 :map ^P I#< ESC> (^表示是ctrl键)^b是通过ctrl+v+b或者ctrl+v ctrl+b给按出来的。如果是通过ctrl按出来的^的话,显示的是这样 ^p是绿色的 |
取消快捷键 | :unmap 快捷键 例如:取消ctrl+b的快捷键 :unmap ^b |
连续行注释 | :n1,n2s/^/#/g :n1,n2s/^/#//g :n1,n2s/^/\/\//g 例1:在5到10行行首添加# 命令如下 :5,10s/^/#/g ^表示回到行首 例2:取消5到10行行首的# :5,10s/^#//g 例3:在5到10行行首添加// :5,10s/^/\/\//g 其中\表示转义字符,\/\/不是字母W而是\和/ |
替换 | :ab abc abc@163.com 表示当你输入abc的时候,会自动转换为abc@163.com 例1:如果你在vi中经常输入一串字符,而又不想定义快捷键。可以使用ab的方式。 假如,你经常输入abc@163.com。则可以像下面这样:ab abc@163.com这条命令会在你在vi中输入abc时,回车或者空格时,abc字符将会成abc@163.com |
配置VI
vi的配置文件在每个用户的home目录下的.vimrc文件,如果想每个用户都生效,则修改/etc/vimrc文件
没有这个文件的话,可以新建一个,注意权限问题
例如vi /root/.vimrc文件,输入如下简单配置
syntax on
set nu
set autoindent
在使用vim的时候有语法高亮,但是使用vi的时候没有语法高亮的解决办法?
设置vim的别名为vi即可:alias vi=vim