软硬件环境
安装vim
ubuntu
系统安装完毕后,默认的 vi
功能是被阉割的,我们需要安装 vim
sudo apt install vim
视频看这里
3种工作模式
使用 vi
编辑文件时,默认处于命令模式。这时可使用方向键(上、下、左、右键)或快捷键 k
、j
、h
、i
移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
输入模式下,vi
可以对文件执行写操作,类似于在 Windows
的文档中输入内容。
编辑模式用于对文件中的指定内容执行保存、查找或替换等操作。
基本操作
命令 |
描述 |
:set number |
加行号 |
:w |
保存文件 |
:wq |
保存并退出 |
:q |
退出vim |
:q! |
不保存退出 |
|
保存退出 |
:sav 文件名 |
保存成文件名 |
:i |
进入插入(编辑)状态 |
按Esc键 |
退出编辑状态 |
语法高亮
命令 |
描述 |
:syntax on |
打开语法高亮 |
:syntax off |
关闭语法高亮 |
:set syntax=perl |
强制语法高亮 |
文件内移动
命令 |
描述 |
h |
左移 |
l |
右移 |
j |
下移 |
k |
上移 |
e |
移到单词末尾 |
b |
移到单词开头 |
0 |
(数字0)移到行首 |
^ |
移动到行首 |
I |
(大写字母i)光标移到行首,并进入编辑状态 |
o |
(字母o)光标移到下一行行首,并进入编辑状态 |
O |
(大写字母o)光标移到上一行行首,并进入编辑状态 |
$ |
光标移到行末尾 |
A |
光标移到行末尾,并进入编辑状态 |
G |
光标移到文件的最后一行的起始位置 |
gg |
光标移到文件开头 |
L |
光标移到当前屏幕的底部 |
:行数 |
移动光标到指定行数 |
列数l |
(列数+字母l)移动光标到指定列 |
{ |
光标移动到上段 |
} |
光标移动到下段 |
( |
光标移动到上句 |
) |
光标移动到下句 |
复制、剪切、粘贴
命令 |
描述 |
y |
拷贝选中的文本 |
p |
(小写字母p)粘贴到光标后 |
P |
(大写字母p)粘贴到光标前 |
x |
剪切当前字符 |
s |
剪切当前字符并进入编辑状态 |
dd |
剪切当前行 |
5dd |
剪切自当前行起的5行内容 |
yy |
复制当前行 |
5yy |
复制自当前行起的5行内容 |
y$ |
复制当前到文件尾的内容 |
D |
剪切当前到文件尾的内容 |
dG |
删除自光标起的所有行 |
u |
回到修改前的状态 |
cw |
删除光标所在的单词,如果光标在单词的中间,则删除自光标处到单词结尾,并进入编辑状态 |
查找
命令 |
描述 |
/字符串 |
从头开始查找字符串,按n跳到下一处,N跳到上一处 |
?字符串 |
从尾开始查找字符串 |
* |
查找光标所在的单词 |
/\c字符串 |
查找字符串,不分大小写 |
/l[io]ve |
查找love或者live |
/\<字符串 |
查找以指定字符串开头的单词 |
/字符串> |
查找以指定字符串结尾的单词 |
/\<字符串> |
查找完全匹配字符串的单词 |
替换
命令 |
描述 |
r |
光标移动到要替换的字符,按下r再输入另一字符进行替换 |
:%s/旧字符串/新字符串/g |
将文件中的旧字符串替换成新字符串 |
:起始行,结束行s/旧/新/g |
将起始行到结束行内的旧字符串替换成新字符串 |
:%s/*$//g |
删除所有空格 |
:g/字符串/d |
删除包含字符串的所有行 |
:%s/^/字符串/g |
在每行开头插入字符串 |
:%s/$/字符串/g |
在每行末尾插入字符串 |
:s/旧/新/ |
在当前行把第一次出现的旧字符串替换成新字符串 |
:s/旧/新/g |
在当前行把出现的旧字符串替换成新字符串 |
vim与linux命令结合使用
命令 |
描述 |
:!命令 |
执行命令 |
!!命令 |
执行命令并将输出添加到当前文件当前位置,会替换原来的内容 |
:r !命令 |
执行命令并将输出添加到当前文件当前位置的下一行 |
:sh |
临时回到命令行,原来打开文件的进程在后台运行 |
文本缩进
命令 |
描述 |
:set autoindent |
打开自动缩进 |
:set smartindent |
打开智能缩进 |
:set shiftwidth=4 |
定义缩进大小为4个空格 |
>> |
当前行缩进 |
5>> |
自光标起5行整体进行缩进 |
<< |
当前行不缩进(un-indent) |
5<< |
自光标起5行整体不缩进 |
读写文件
命令 |
描述 |
:起始行数,结束行数 w 输出文件名 |
将从起始行数到结束行数输出到指定文件名中,如果文件名已经存在,则w后要跟上!,且文件内容会被替换 |
:起始行数,结束行数 w >> 输出文件名 |
将从起始行数到结束行数输出到指定文件名的末尾 |
:r 文件名 |
将指定文件名的内容添加到当前文件中来 |
:行数r 文件名 |
将指定文件名的内容添加到当前文件的指定行处 |
大小写
命令 |
描述 |
Vu |
将当前行中的大写字符转换成小写字符 |
VU |
将当前行中的小写字符转换成大写字符 |
g~~ |
将当前行的大小写互换 |
vEU |
将单词转换成大写 |
ggguG |
全文转换成小写 |
gggUG |
全文转换成大写 |
:%s/\<./\u&/g |
将每个单词的首字母转换成大写 |
:%s/\<./\l&/g |
将每个单词的首字母转换成小写 |
:%s/.*/\u& |
将每行的首字母转换成大写 |
:%s/.*/\l& |
将每行的首字母转换成小写 |
gU0 |
(数字0)从光标所在位置到行首,都变为大写 |
gU$ |
从光标所在位置到行尾,都变为大写 |
gUG |
从光标所在位置到文章末尾都变为大写 |
gU1G |
从光标所在位置到第一个字符,都变为大写 |