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
image.png

  1. 将光标移到第一行h按ctrl+v然后将光标移到最后一行9上面, 按y进行复制

image.png

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

image.png

多文件编辑


使用场合: 将文件A中的10条数据移动到B文件中, 使用鼠标复制的话tab会转换为空格, 于是可以使用多文件编辑进行复制粘贴.

按键:

  • n : 编辑下一个文件
  • N : 编辑上一个文件
  • files : 列出vim开启的文件

案例: 存在两个文件/tmp/hosts和/etc/hosts, 将/tmp/hosts内容复制到/etc/hosts中.

  1. vim /tmp/hosts /etc/hosts, 使用:files列出文件

image.png

  1. 在/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

  1. 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 : 保留原来文件

示例:

  1. big5转换成utf8编码:

    iconv -f big5 -t utf8 vi.big5 -o vi.utf8
    
  2. utf-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的换行符