vi是一个比较通用的文本编辑器,在所有linuxdistribution上都会存在vi这个编辑器。而vim是高级版的vi,vim不但可以用不同颜色显示文件内容,还能进行诸如shell脚本,C等程序的编辑功能。
vim相对其他编辑器的优点:
1、所有的UNIX Like系统都会内置vi文本编辑器,其他文本编辑器不一定存在
2、很多软件的接口都会主动调用vi
3、vim具有程序编辑的能力,可以主动以字体颜色来辨别语法的正确性,方便程序设计、
4、程序简单,编辑速度相当快速
vi的使用
vi分为三个模式:一般模式,编辑模式,命令行模式,其转换关系如下图:
注意:在编辑模式下,tab键和空格的结果是不一样的!
vi按键说明(仅列举常用命令)
第一部分:一般模式可用的按键说明,光标移动,复制粘贴,查找替换等。
移动光标的方法 | |
h或向左箭头键 | 光标向左移动一个字符 |
j或向下箭头键 | 光标向下移动一个字符 |
k或向上箭头键 | 光标向上移动一个字符 |
l或向右箭头键 | 光标向右移动一个字符 |
若要连续多次移动,可以用数字加方向的组合键,如30↓ | |
Ctrl+f | 屏幕向下移动一页,相当于page down |
Ctrl+b | 屏幕向上移动一页,相当于page up |
0或home | 移动到这一行最前面字符处 |
$或end | 移动到这一行最后面字符处 |
G | 移动到这个文件的最后一行 |
nG | 移动到文件的第n行 |
gg | 移动到文件的第一行,相当于1G |
n[enter] | n为数字,光标向下移动n行 |
查找与替换 | |
/word | 向下查找word字符串 |
?word | 向上查找word字符串 |
n | 这个是英文按键,重复上一个查找操作 |
:n1,n2s/word1/word2/g | 在n1与n2行之间查找word1并替换为word2 |
:1,$s/word1/word2/g[c] | 从第一行到最后一行查找word1并替换为word2【询问是否替换】 |
删除,复制与粘贴 | |
x,X | 在一行字当中,x为向后删除一个字符,X为向前删除一个字符 |
nx | 连续向后删除n个字符 |
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 | 保存后离开 |
ZZ | 若未变动,则直接离开,若有变动,保存后离开 |
vim环境的更改 | |
:set nu | 显示行号 |
:set nonu | 不显示行号 |
vim的保存,恢复与打开时的警告信息
当使用vim编辑时,vim会在被编辑的文件目录下创建一个名为.filename.swp的文件,当编辑因意外情况未能正确编辑时,重新打开文件便可通过这个文件继续上次未保存的操作。
重新打开文件时会出现以下问题:
一、可能有其他人或程序同时在编辑这个文件
1、找到另外那个人或程序,请他结束该vim的工作,然后你在继续处理
2、若只是查看文件内容而不进行更改,那么可以选择打开成为只读文件,即输入o即可
二、在前一个vim环境中,可能因为某些不明原因导致vim中断
1、如果之前的操作尚未保存,则可通过R 将暂存文件的内容导入,再次进行保存,不过在保存之后必须要将暂存文件删除,系统并不会自动删除该暂存文件
2、如果确定该暂存文件是没有用的,则可用输入D直接将暂存文件删除掉
vim的功能
vim的块选择(Visual Block)
在一般模式下:
V | 字符选择,会将光标经过的地方反白选择 |
v | 行选择,会将光标经过的行反白选择 |
Ctrl+v | 块选择,可以用长方形的方式选择数据 |
y | 将反白的地方复制起来 |
d | 将反白的地方删除 |
p | 粘贴 |
vim的多文件编辑
vim file1 file2 …
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个vim打开的所有文件
vim的多窗口功能
:sp[filename] | 打开一个新窗口,如果写上filename则打开新文件,否则打开同一个文件(同步显示) |
ctrl+w+j(↓) | 移动到下一个窗口 |
ctrl+w+k(↑) | 移动到上一个窗口 |
ctrl+w+q | 关闭光标所在的窗口 |
vim常用命令示意图:
使用vim的其他注意事项
DOS与Linux的断行字符
在DOS中使用的断行字符为^M$,我们成为CR与LF,而Linux下的断行字符仅有$,即LF;
若不进行格式的转换,则有可能造成程序无法正常运行的问题,而转换的命令如下:
dos2UNIX [-kn] file [newfile]
UNIX2dos [-kn] file [newfile]
-k 保留该文件原本的mtime时间格式
-n 保留原本的旧文件,将转换后的内容输出到新文件
语系编码转换
iconv --list
iconv -f 原本编码 -t 目标编码filrname [-o newfile]
--list 列出iconv支持的语系数据
-f from -t to
-o file:如果要保留原本的文件,那么使用-o newfile可以建立新的编码文件