在所有的Linux distributions 上头都会有的一套文书编辑器就是vi,而且很多软件默认也是使用vi做为他们编辑的接口,因此建议您务必要学会使用vi 这个正规的文书编辑器。此外,vim是进阶版的 vi,vim 不但可以用不同颜色显示文字内容,还能够进行诸如shell script, C program等程序编辑功能,你可以将vim视为一种程序编辑器!
基本上 vi共分为三种模式,分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是:
以vim打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模式中,你可以使用“上下左右”按键来移动光标,你可以使用“删除字符”或“删除整列”来处理文件内容,也可以使用“复制、贴上”来处理你的文件数据。
在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的!要等到你按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式。注意了!通常在Linux中,按下这些按键时,在画面的左下方会出现“ INSERT 或 REPLACE ”的字样,此时才可以进行编辑。而如果要回到一般指令模式时,则必须要按下“Esc”这个按键即可退出编辑模式。
在一般模式当中,输入“ : / ? ”三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中,可以提供你“搜寻数据”的动作,而读取、存盘、大量取代字符、离开vim 、显示行号等等的动作则是在此模式中达成的!
h或向左方向键(←) | 光标向左移动一个字符 |
j 或向下方向键(↓)(30j或30↓) | 光标向下移动一个字符/行(向下移动30行) |
k或向上方向键(↑)(30k或30↑) | 光标向上移动一个字符/行(向上移动30行) |
l 或 向右方向键(→) | 光标向右移动一个字符 |
[Ctrl] + [f] | 屏幕“向下”移动一页,相当于[Page Down]按键 |
[Ctrl] +[b] | 屏幕“向上”移动一页,相当于[Page Up]按键 |
0或功能键[Home] | 这是数字“ 0”:移动到这一列的最前面字符处 |
$ 或功能键[End] | 移动到这一列的最后面字符处 |
G | 移动到这个文件的最后一列 |
gg | 移动到这个文件的第一列,相当于1G啊! |
nG | n为数字。移动到这个文件的第 n 列。 |
n |
n 为数字。光标向下移动 n 列 |
/word | 向光标之下寻找一个名称为 word的字串。 |
n或N | 这个n或N是英文按键。n代表“重复前一个搜寻的动作”。N代表反向“重复前一个搜寻的动作” |
:n1,n2s/word1/word2/g | n1与 n2为数字。在第n1与n2列之间寻找word1 这个字串,并将该字串取代为word2 |
:1,$s/word1/word2/g | 从第一列到最后一列寻找word1字串,并将该字串取代为word2 |
:1,$s/word1/word2/gc | 从第一列到最后一列寻找word1字串,并将该字串取代为word2!且在取代前显示提示字符给使用者确认(confirm)是否需要取代! |
x, X | 在一列字当中,x为向后删除一个字符(相当于[del] 按键),X为向前删除一个字符(相当于[backspace]亦即是倒退键) |
dd或ndd | dd:删除光标所在的那一整列;ndd:。删除光标所在的向下n列,其中n是数字 |
yy或nyy | yy复制光标所在的那一列;nyy:复制光标所在的向下 n 列,其中n是数字 |
p, P | p 为将已复制的数据在光标下一列贴上,P则为贴在光标上一列! |
u | 复原前一个动作。 |
[Ctrl]+r | 重做上一个动作。 |
. | 这就是小数点!意思是重复前一个动作的意思。如果你想要重复删除、重复贴上等等动作,按下小数点“.”就好了! |
特别注意的是,我们上面也提过了,你想要在文件里面输入字符时,一定要在左下角处看到INSERT或REPLACE 才能输入!
i,I | 进入插入模式(Insert mode):i为“从目前光标所在处插入”, I为“在目前所在列的第一个非空白字符处开始插入”。 |
a,A | 进入插入模式(Insert mode):a为“从目前光标所在的下一个字符处开始插入”,A 为“从光标所在列的最后一个字符处开始插入”。 |
o,O | 进入插入模式(Insert mode):这是英文字母o 的大小写。o为“在目前光标所在的下一列处插入新的一列”;O 为在目前光标所 在处的上一列插入新的一列! |
r,R | 进入取代模式(Replacemode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下ESC为止; |
[Esc] | 退出编辑模式,回到一般指令模式中 |
:w | 将编辑的数据写入硬盘文件中 |
:q | 离开 vim |
:q! | 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存盘。 注意一下啊,那个惊叹号(!)在vim当中,常常具有“强制”的意思 |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 |
:w [filename] | 将编辑的数据储存成另一个文件(类似另存新文件) |
:set nu | 显示行号,设置之后,会在每一列的字首显示该列的行号 |
:set nonu | 与set nu相反,为取消行号! |
在目前主要的文书编辑软件都会有“回复”的功能,亦即当你的系统因为某些原因而导致类似死机的情况时,还可以通过某些特别的机制来让你将之前未储存的数据“救”回来! vim就是通过“暂存盘”来救援的啦!当我们在使用 vim编辑时,vim会在与被编辑的文件的目录下,再创建一个名为.filename.swp的文件。如果你的系统因为某些原因断线了, 导致你编辑的文件还没有储存,这个时候.filename.swp 就能够发挥救援的功能了。
例如:当你vim man_db.conf时,出现如下提示:
则有两种可能:
1. 可能有其他人或程序同时在编辑这个文件:这就是常见的不正常结束 vim 产生的后果。解决方案依据不同的情况而不同喔!常见的处理方法为:
至于这个发现暂存盘警告讯息的画面中,有出现六个可用按钮,各按钮的说明如下:
多文件编辑功能: | 同一窗口,多个文件,通过:n查看下一个文件,:N查看上一个文件 |
vim file1 file2 file3 ... | 一次性查看多个文件,窗口下只有一个文件 |
多窗口功能: (同一屏幕,多个窗口) |
通过[ctrl ]+ ww 切换窗口,[ctrl]+w+q结束当前窗口: [ctrl]+w+j 或向下方向键(↓)为移到下方的窗口;[ctrl]+w+k或向上方向键(↑)为移到上方的窗口 |
vim -o file1 file2 file3 ... | 水平分隔,即分隔线是水平的! |
水平分隔多个文件的另一种方式 | 首先vim file1 ;然后:sp file2 ; 在继续 :sp file3 [sp即split的简写,两者皆可被识别] |
垂直分隔多个文件的方式 | 首先vim file1 ;然后:vsp file2 ; 在继续 :vsp file3 [vsp即vertical split的简写] |
挑字补全功能: | [ctrl]+x -> [ctrl]+n即先按[ctrl]+x,再按[ctrl]+n |
[ctrl]+x -> [ctrl]+n | 通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐 |
[ctrl]+x -> [ctrl]+f | 以当前目录内的“文件名”作为关键字,予以补齐 |
[ctrl]+x -> [ctrl]+o | 以扩展名作为语法补充,以vim内置的关键字,予以补齐 |
例如下图所示:
尤其注意中文编码问题!!!!!
若vim某文件打开乱码,则考虑以下三个方面:
要求以上第2,3点与1一致!!!!!若直接查看某文件时,则要求2和1一致!!!!
vim环境设置方法,如下图所示,此时设置的编码格式是gbk:
DOS 使用的断行字符为^M$,我们称为CR与LF 两个符号。而在Linux 下面,则是仅有LF($) 这个断行符号。这个断行符号对于Linux的影响很大。在 Linux下面的指令在开始执行时,他的判断依据是“Enter”,而 Linux 的Enter为 LF符号,不过,由于DOS的断行符号是CRLF,也就是多了一个^M 的符号出来,在这样的情况下,如果是一个shell script的程序文件,将可能造成“程序无法执行”的状态。因为他会误判程序所下达的指令内容啊!
因此,DOS和Linux的文件进行转换时的命令:(ps:这是直接在原文件上更改的,直接覆盖原文件)
编码转换命令说明:
若在进行编码时,出现报错说:存在非法序列,这是因为原文件中存在新编码无法识别(即不能转换)的字符,有可能该字符不存在于该编码中。此时,可以将上述命令如下更改: