常用的文本编辑器:Emacs, pico, nano, joe, vim
VIM-为什么选择vi编辑器
1. 所有Unix Like系统都会内置vi编辑器,而其他文本编辑器则不一定存在
2. 很多软件的编辑接口都会主动调用vi,例如contab, visudo, edquota
3. vim具有程序编辑能力,可以主动以字体颜色辨别语言正确性
4. 程序简单,编辑速度相当快速
第2点比较重要,因为太多Linux命令默认使用vi作为数据编辑的接口
vi的使用:
vi分为3种模型:一般模式,编辑模式,命令模式
一般模式:以vi打一个文件进入一般模式,可以使用上下左右键来移动光标,可以删除字符或删除整行,也可以复制,粘贴文件数据
编辑模式:在一般模式可以删除、复制、粘贴,但却无法编辑文件内容,要等到你按下i, o, a, r等任一个字母后才能进入编辑模式,按下这些键之后,在界面的左下方会出现INSERT或REPLACE,才可以进行编辑,如果要回到一般模式,则必须按下ESC退回编辑模式
命令行模式:在一般模式中,输入:, /, ? 3个中的任意一个字符就可以将光标移动到最下面一行,在这个模式中,可以查找数据、读取、保存、大量替换字符、离开vi、显示行号等
下图为相互转换图:
按键说明:
移动、翻页
h: 光标向左移动一个字符,同方向左键
j: 光标向下移动一个字符,同方向下键
k: 光标向上移动一个字符,同方向上键
l: 光标向后移动一个字符,同方向向右键
多个字符移动则为:n+方向,如:向左移动30个字符为30h
ctrl+f: 向下翻页
ctrl+b: 向上翻页
ctrl+d: 向下翻半页
ctrl+u: 向上翻半页
+: 光标移到非空格的下一行
-: 光标移到非空格的上一行
n+空格:向后移动n个字符,20[space],向后移动20个字符
0或home: 移到这一行最前面
$或end: 移到到这一行最后面
H: 光标移至屏幕最上方那行第一个字符
M: 光标移至屏幕中央那行第一个字符
L: 光标移至屏幕最下方那行最后第一个字符
G: 移到文件最后一行
nG: 移至文件第n行
gg: 移至文件第一行
n[Enter]: 光标向下移动n行
/word: 向下查找
?word: 向上查找
n: 向下查找
N: 向上查找
替换
:n1,n2s/word1/word2/g: 在n1~n2之间找word1, 并替换为word2
:1, $s/word1/word2/g: 在1~最后一行之间找word1, 并替换为word2
:1, $s/word1/word2/gc: 在1~最后一行之间找word1, 并替换为word2,在所有替换之前提示用户
删除
x, delete: 向后删除一个字符
X, backspace: 向前删除一个字符
nx: 向后删除n个字符
nX: 向前删除n个字符
dd: 删除光标所在的那一整行
ndd: 删除光标所在行的向下20行
d1G: 删除光标所在列第1行的所有数据
dG: 删除光标所在列到最后一行的所有数据
d0: 删除从光标所在处到该行的最前面一个字符
复制
yy: 复制光标所在的那一行
nyy: 复制光标所在的向下行
y1G:复制光标所在行到第一行的所有数据
yG: 复制光标所在行到最后一行的所有数据
y0: 复制光标所在那个字符到该行行首的所有数据
y$: 复制光标所在那个字符到该行结尾的所有数据
粘贴
p, P将已复制的数据在光标下一行粘贴,大写P则为贴在光标上一行
其他
J: 将光标所在行与下一行的数据结合成同一行
c: 重复删除,例如10cj, 向下删除10行
u: 复原前一个操作
ctrl+r: 重做上一个操作
.: 恢复前一个操作
编辑模式:
i: 从目前光标所在处插入
I: 从目前光标所在行第一个非空格符处开始插入
a: 从目前光标所在处下一个字符插入
A: 从目前光标所在行的最后一个字符插入
o: 从目前光标所在的下一行处插入新的一行
O: 从目前光标所在的上一行处插入新的一行
r: 替换光标所在的那个字符一次
R: 替换光标所在行所有匹配字符
命令行模式:
:w: 将编辑的数据写入到硬盘中
:w!: 若文件属性为“只读”时,强制写入文件,写入前会校验权限
:q: 退出vi
:q!: 强制离开不保存文件
:wq: 保存后离开
:wq!: 强制保存并离开
ZZ: 大写Z,若文件无更改,则不保存离开;若文件有更改,则保存离开
:w[filename]: 将编辑文件保存为另一个文件
:r[filename]: 在编辑的数据中,读入另一个文件的数据,将file这个文件内容加到光标所在行后面
:n1,n2 w[filename]: 将n1~n2内容保存成filename文件
:! command: 暂时离开vi到命令行模式下执行command的显示结果,例如::! ls /home即可在vi当中查看/home下面以ls输出的文件信息
:set nu: 显示行号,设置之后,会在每一行前缀显示行号
:set nonu: 不显示行号
vim的备份文件,恢复与打开时的警告信息
vim会主动创建备份文件:/tmp/vitest/.man.con.swp, 以swp结尾的备份文件
在编辑时,不正常保存,再撕开时会找开,*.swp文件
命令:alias,将显示所有的简写
块选择:
ctrl+v: 光标移动过的地方开始反白
y: 将反白地方复制
d: 将反白地方删除
多文件编辑:
:n: 编辑下一个文件
:N: 编辑上一个文件
:files: 列出目前这个vim打开的所有文件
>vim filename / filename2
多窗口功能:
在命令行输入::sp[filename],即可多窗口编辑,以下为详细步骤
1. 先打开文件:vim /man.config
2. 输入: :sp
3. 输入:G
4. 再输入::sp /man.config
5. 此时3屏显示同一个文件
各个屏幕之间切换:ctrl+w+k(向上键): 找到上一个编辑窗口,ctrl+w+j(向下键): 找到下一个编辑窗口,ctrl+w+q: 结束离开
vim环境设置与记录:~/.vimrc, ~/.viminfo
查看设置,在一般模式输入::set all,即可查看当前文件所有设置
整体vim设置值,一般是放在/etc/vimrc文件中,不过不建议修改它,可以修改~/.vimrc这个文件,默认不存在,可以自行手动创建
vim常用命令示意图:
其他问题:
中文编码问题:
1. Linux系统默认语系数据:/etc/sysconfig/i18n
2. 在bash下,与LANG变量有关
3. 文本原本编码
4. 打开终端机的软件
DOS与Linux的断行字符:
在Linux中Enter按键为LF,而在DOS中Enter按键为CRLF,在Linux中显示DOS回车会多出^M$
使用Linux中的格式转换工具可以进行转换:
dos2UNIX [-kn] file [newfile]
UNIX2dos [-kn] file [newfile]
最终建议:由于字符编码方式不一样,不建议在windows系统当中将文件编辑之后,才上传到Linux系统,容易发生错误,而且如果在不同的系统之间复制一些纯文文件时,使用以上两个 命令转换
语系编码转换:如何将big5编码转成utf-8,使用conv
>iconv -f 原本编码 -t 新编码 file [-o newfile]