在所有的Linux distributions 上头都会有的一套文书编辑器就是vi,而且很多软件默认也是使用vi做为他们编辑的接口,因此建议您务必要学会使用vi 这个正规的文书编辑器。此外,vim是进阶版的 vi,vim 不但可以用不同颜色显示文字内容,还能够进行诸如shell script, C program等程序编辑功能,你可以将vim视为一种程序编辑器!
一、vim的使用
基本上 vi共分为三种模式,分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是:
- 一般指令模式(command mode)
以vim打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模式中,你可以使用“上下左右”按键来移动光标,你可以使用“删除字符”或“删除整列”来处理文件内容,也可以使用“复制、贴上”来处理你的文件数据。
- 编辑模式(insert mode)
在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的!要等到你按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式。注意了!通常在Linux中,按下这些按键时,在画面的左下方会出现“ INSERT 或 REPLACE ”的字样,此时才可以进行编辑。而如果要回到一般指令模式时,则必须要按下“Esc”这个按键即可退出编辑模式。
- 命令行命令模式(command-line mode)
在一般模式当中,输入“ : / ? ”三个中的任何一个按钮,就可以将光标移动到最下面那一列。在这个模式当中,可以提供你“搜寻数据”的动作,而读取、存盘、大量取代字符、离开vim 、显示行号等等的动作则是在此模式中达成的!
1.1 vim 的简单操作
- 打开/创建文件:使用“ vim filename”进入一般指令模式,若filename是已存在的文件,则打开该文件;若filename不存在,则自动创建该文件。此时,处于一般指令模式。
- 进入编辑模式:在一般指令模式之中,只要按下 i, o, a 等字符就可以进入编辑模式。
- 返回一般指令模式:按下[ESC]按钮回到一般指令模式;
- 退出vim环境:进入命令行界面,输入“:wq”即可存盘离开 vim 环境。
1.2 一般指令模式下常用的按钮操作,包括光标移动、复制粘贴、搜寻取代等
1.2.1 移动光标的常用快捷键
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<Enter> | n 为数字。光标向下移动 n 列 |
1.2.2 搜寻查找的常用快捷键
/word | 向光标之下寻找一个名称为 word的字串。 |
n或N | 这个n或N是英文按键。n代表“<u>重复前一个搜寻的动作</u>”。N代表反向“<u>重复前一个搜寻的动作</u>” |
: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)是否需要取代! |
1.2.3 删除、复制粘贴的常用快捷键
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 | 重做上一个动作。 |
. | 这就是小数点!意思是重复前一个动作的意思。如果你想要重复删除、重复贴上等等动作,按下小数点“.”就好了! |
1.3 一般指令模式切换到编辑模式的可用的按钮说明
特别注意的是,我们上面也提过了,你想要在文件里面输入字符时,一定要在左下角处看到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] | 退出编辑模式,回到一般指令模式中 |
1.4 一般指令模式切换到命令行界面的可用按钮说明
:w | 将编辑的数据写入硬盘文件中 |
:q | 离开 vim |
:q! | 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存盘。 注意一下啊,那个惊叹号(!)在vim当中,常常具有“强制”的意思 |
:wq | 储存后离开,若为 :wq! 则为强制储存后离开 |
:w [filename] | 将编辑的数据储存成另一个文件(类似另存新文件) |
:set nu | 显示行号,设置之后,会在每一列的字首显示该列的行号 |
:set nonu | 与set nu相反,为取消行号! |
二、 vim的暂存盘、救援回复与打开时的警告讯息
在目前主要的文书编辑软件都会有“回复”的功能,亦即当你的系统因为某些原因而导致类似死机的情况时,还可以通过某些特别的机制来让你将之前未储存的数据“救”回来! vim就是通过“暂存盘”来救援的啦!当我们在使用 vim编辑时,vim会在与被编辑的文件的目录下,再创建一个名为.filename.swp的文件。如果你的系统因为某些原因断线了, 导致你编辑的文件还没有储存,这个时候.filename.swp 就能够发挥救援的功能了。
例如:当你vim man_db.conf时,出现如下提示:
则有两种可能:
1. 可能有其他人或程序同时在编辑这个文件:- 由于Linux是多用户多任务的环境,因此很可能有很多人同时在编辑同一个文件。如果在多人共同编辑的情况下,万一大家同时储存,那么这个文件的内容将会变的乱七八糟!为了避免这个问题,因此vim会出现这个警告窗口!解决的方法则是:找到另外那个程序或人员,请他将该 vim 的工作结束,然后你再继续处理。
- 如果你只是要看该文件的内容并不会有任何修改编辑的行为,那么可以选择打开成为只读(O)文件,亦即上述画面反白部分输入英文“o ”即可,其实就是[O]pen Read-Only 的选项啦!
这就是常见的不正常结束 vim 产生的后果。解决方案依据不同的情况而不同喔!常见的处理方法为:
- 如果你之前的vim 处理动作尚未储存,此时你应该要按下“R”,亦即使用(R)ecover 的项目,此时vim会载入 .man_db.conf.swp的内容,让你自己来决定要不要储存!这样就能够救回来你之前未储存的工作。不过那个 .man_db.conf.swp并不会在你结束vim后自动删除,所以你离开vim后还得要自行删除.man_db.conf.swp才能避免每次打开这个文件都会出现这样的警告!
- 如果你确定这个暂存盘是没有用的,那么你可以直接按下“D”删除掉这个暂存盘,亦即(D)elete it 这个项目即可。此时vim会载入 man_db.conf ,并且将旧的.man_db.conf.swp 删除后,创建这次会使用的新的 .man_db.conf.swp喔!
至于这个发现暂存盘警告讯息的画面中,有出现六个可用按钮,各按钮的说明如下:
- [O]pen Read-Only:打开此文件成为只读文件,可以用在你只是想要查阅该文件内容并不想要进行编辑行为时。一般来说,在上课时,如果你是登陆到同学的计算机去看他的配置文件,结果发现其实同学他自己也在编辑时,可以使用这个模式;
- (E)dit anyway:还是用正常的方式打开你要编辑的那个文件,并不会载入暂存盘的内容。不过很容易出现两个使用者互相改变对方的文件等问题!不好不好!
- (R)ecover:就是载入暂存盘的内容,用在你要救回之前未储存的工作。不过当你救回来并且储存离开 vim 后,还是要手动自行删除那个暂存盘喔!
- (D)elete it:你确定那个暂存盘是无用的!那么打开文件前会先将这个暂存盘删除!这个动作其实是比较常做的!因为你可能不确定这个暂存盘是怎么来的,所以就删除掉他吧!
- (Q)uit:按下q就离开 vim,不会进行任何动作回到命令提示字符。
- (A)bort:忽略这个编辑行为,感觉上与quit非常类似!也会送你回到命令提示字符!
三、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环境设置与记录:~/.vimrc , ~/.viminfo
- ~/.viminfo文件:vim会主动的将你曾经做过的行为登录下来,好让你下次可以轻松的作业!那个记录动作的文件就是: ~/.viminfo !如果你曾经使用过vim,那你的主文件夹应该会存在这个文件才对。这个文件是自动产生的,你不必自行创建。而你在 vim里头所做过的动作,就可以在这个文件内部查询到。
- ~/.vimrc 文件:整体vim的设置值一般是放置在/etc/vimrc这个文件,你可以修改 ~/.vimrc这个文件(默认不存在,请你自行手动创建)。将你所希望的设置值写入。
例如下图所示:
尤其注意中文编码问题!!!!!
若vim某文件打开乱码,则考虑以下三个方面:
- 该文件原本的中文编码
- 打开终端机的软件的编码设置
- vim 环境设置中的编码设置
要求以上第2,3点与1一致!!!!!若直接查看某文件时,则要求2和1一致!!!!
vim环境设置方法,如下图所示,此时设置的编码格式是gbk:
五、DOS与Linux 的断行字符
DOS 使用的断行字符为^M$,我们称为CR与LF 两个符号。而在Linux 下面,则是仅有LF($) 这个断行符号。这个断行符号对于Linux的影响很大。在 Linux下面的指令在开始执行时,他的判断依据是“Enter”,而 Linux 的Enter为 LF符号,不过,由于DOS的断行符号是CRLF,也就是多了一个^M 的符号出来,在这样的情况下,如果是一个shell script的程序文件,将可能造成“程序无法执行”的状态。因为他会误判程序所下达的指令内容啊!
因此,DOS和Linux的文件进行转换时的命令:(ps:这是直接在原文件上更改的,直接覆盖原文件)
- 将DOS文件转换成Linux文件:dos2unix dos_file
- 将Linux文件转换成DOS文件:unix2dos linux_file
六、编码转换
编码转换命令说明:
若在进行编码时,出现报错说:存在非法序列,这是因为原文件中存在新编码无法识别(即不能转换)的字符,有可能该字符不存在于该编码中。此时,可以将上述命令如下更改:
- iconv -c -f 原本编码 -t 新编码 filename [-o newfile]