软硬件环境
安装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 |
从光标所在位置到第一个字符,都变为大写 |