vi的使用
vi分三种模式:
- 一般命令模式
- 编辑模式
- 命令行模式
按键说明
一般命令可用的功能按键说明, 光标移动, 复制粘贴, 查找替换
| 移动光标的方式 | |
|---|---|
| ctrl+f | 屏幕向下移动一页, 相当于page down |
| ctrl+b | 屏幕向上移动一页, 相当于page up |
| 0或home | 移到该行的最前面 |
| $或End | 移到这一行的最后面字符 |
| G | 移到这个文件的最后一行 |
| gg | 移到该文件的第一行,相当于1G |
| n |
n为数字, 光标向下移动n行 |
| 查找与替换 | |
| /word | 向光标之下寻找一个名称为word的字符串. |
| :n1,n2s/word1/word3/g | n1,n2为数字, 在第n1与n2行之间寻找word1这个字符串, 并将该字符串替换为word2. |
| :1, $s/word1/word2/g | 从第一行查找到最后一行 |
| :1,$s/word1/word2/gc | 每次替换时都提示确定 |
| 删除,复制与粘贴 | |
| x与X | 在一行当中, x为向后删除一个字符, X为向前删除一个字符 |
| dd | 删除光标所在行(常用) |
| ndd | 删除光标所在的向下n行 |
| yy | 复制光标所在行 |
| nyy | 复制光标所在的向下n行 |
| p与P | p将已复制的数据在光标下一行粘贴, P则粘贴在光标上一行 |
| u | 恢复前一个操作 |
| ctrl+r | 重做上一个操作 |
| . | 重复前一个操作 |
一般命令模式切换到编辑模式可用的按键说明
| i/I | 进入插入模式 i为从当前目标所在处插入, I为目前所在行的第一个非空格符处开始插入 |
|---|---|
| a/A | 进入插入模式 a从目前光标所在的下一个字符处开始插入, A为光标所在行最后一个字符插入 |
| o/O | 进入插入模式 o在当前光标所处的下一行处插入新的一行 O在当前光标所在行的上一行插入新的一行 |
| r/R | 进入替换模式 r替换光标所在字符一次, R会一直替换, 直到按下Esc |
| Esc | 退出编辑模式 |
一般命令切换到命令行模式的可用按键说明
| 命令行模式的保存, 退出等命令 | |
|---|---|
| :w | 将编辑的数据写入硬盘文件中 |
| :q | 退出vi |
| :wq | 保存退出 |
vim的缓存,恢复与打开时的警告信息
简单来说, 编辑vim时因为某些中断导致vim被中断时需要使用.filename.swap缓存文件进行恢复处理.
打开原来文件时被提醒可以进行的操作:
- O : 只读方式打开
- E : 编辑
- R : 加载缓存的内容恢复
- D : 删除缓存
- Q : 退出
- A : 与quit类似
vim的额外功能
可视区块(Visual Block)
可视区块的按键意义:
- v : 字符选择
- V : 行选择
- [ctrl]+v : 可视区块, 用矩形的方式选择数据
- y : 复制反白数据
- d : 删除反白数据
- p : 将刚刚复制的区块进行粘贴
示例:
将192.168.1.1 host1.class.net 变成192.168.1.1 host1.class.net host1
- 将光标移到第一行h按ctrl+v然后将光标移到最后一行9上面, 按y进行复制

- 将光标移到第一行末尾, 并且进入编辑模式向右按两个空格键, 按下p进行复制

多文件编辑
使用场合: 将文件A中的10条数据移动到B文件中, 使用鼠标复制的话tab会转换为空格, 于是可以使用多文件编辑进行复制粘贴.
按键:
- n : 编辑下一个文件
- N : 编辑上一个文件
- files : 列出vim开启的文件
案例: 存在两个文件/tmp/hosts和/etc/hosts, 将/tmp/hosts内容复制到/etc/hosts中.
- vim /tmp/hosts /etc/hosts, 使用:files列出文件

- 在/tmp/hosts中使用nyy复制内容然后使用:n编辑下一个文件,按p进行复制
多窗口功能
按键:
- :sp [filename] 打开一个新窗口
- ctrl+w 切换窗口
- ctrl+w+j : 移动到下一个窗口
- ctrl+w+k : 移动到上一个窗口
vim的关键字补全功能
目前仅验证html和php语法
按键:
- ctrl+x -> ctrl+n : 通过当前文件内容作为关键字补全
- ctrl+x -> ctrl+f : 当前目录文件名补全
- ctrl+x -> ctrl+o : 语法补全
vim 环境设置与记录: ~/.vimrc, ~/.viminfo
~/.viminfo记录使用vim进行的操作.
/etc/vimrc设置vim操作环境,
~/.vimrc : 设置vim操作环境
示例:
~/.vimrc
set nu #设置行号ls
vim 快捷功能
| 功能 | 按键 | |
|---|---|---|
| 重新加载文件(恢复原来内容) | :e! | |
vim使用注意选项
中文编码问题
保证中文显示正确的要素:
- Linux系统支持的语系数据: /etc/locale.conf
- 终端的语系: LANG, LC_ALL
- 文件编码
- 打开终端的软件
输入中文乱码问题
解决方案一:
编辑/etc/vim/vimrc文件:
set encoding=UTF-8
DOS和Linux的换行符
DOS下的换行符是CRLF. Linux下面的换行符为LF. 由于Linux命令的执行是LF这个符号触发的, 所以DOS下的脚本放在Linux无法执行.
DOS与Linux下字符的转换需要借助dos2unix和unix2dos这两个命令.
语法:
dos2unix [-kn] file [newfile]
unix2dos [-kn] file [newfile]
选项与参数:
-k : 不修改文件mtime
-n : 保留旧文件, 输出到新文件
示例:
# 可以观察到两个语系下文件的大小不一致
[root@kuaicdn tmp]# ll -h man_db.conf
-rw-r--r-- 1 root root 4.8K 11月 3 15:29 man_db.conf
[root@kuaicdn tmp]# unix2dos -k man_db.conf
unix2dos: converting file man_db.conf to DOS format ...
[root@kuaicdn tmp]# ll -h man_db.conf
-rw-r--r-- 1 root root 4.9K 11月 3 15:29 man_db.conf
[root@kuaicdn tmp]# dos2unix -k -n man_db.conf man_db.conf.linux
dos2unix: converting file man_db.conf to file man_db.conf.linux in Unix format ...
[root@kuaicdn tmp]# ll -h man_db.conf man_db.conf.linux
-rw-r--r-- 1 root root 4.9K 11月 3 15:29 man_db.conf
-rw-r--r-- 1 root root 4.8K 11月 3 15:29 man_db.conf.linux
[root@kuaicdn tmp]# file man_db.conf*
man_db.conf: ASCII text, with CRLF line terminators
man_db.conf.linux: ASCII text
语系编码转换
语系编码的转换需要借助于iconv命令.
iconv语法:
iconv --list
iconv -f 原本编码 -t 新编码 filename [-o newfile]
选项与参数:
--list : 列出iconv支持的语系数据
-f : 原本编码
-t : 新编码
-o file : 保留原来文件
示例:
big5转换成utf8编码:
iconv -f big5 -t utf8 vi.big5 -o vi.utf8utf-8繁体转换为utf-8简体中文
iconv -f utf8 -t big5 vi.utf8 | iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8
重点
- 注意vi的替换功能, :n1,n2:/old/new/g
- . 重复进行前一次操作
- 进入编辑模式, i, o, R , i新增一行, R替换
- :sp划分窗口
- vim通过ctrl+x与ctrl+o取得关键词
- vim的环境设置~/.vimrc
- iconv语系转换
- dos2unix与unix2dos转换linux和dos的换行符
