官网 http://www.vim.org/
一,vi与vim
1,为何要学vim?
a)所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在;
b)很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
c)vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;
d)因为程序简单,编辑速度相当快速。
vim 视作 vi 的进阶版本,vim 可以用颜色或底线等方式来显示一些特殊的信息;
vim 会依据文件的扩展名或者是文件内的开头信息, 判断该文件的内容而自动的呼叫该程序的语法判断式,再以颜色来显示程序代码与一般信息;
vim 里面加入了很多额外的功能,例如支持正则表达式的搜寻架构、多文件编辑、区块复制等等
二, vi 的使用
vi 共分为三种模式,分别是『一般指令模式』、『编辑模式』与『指令列命令模式』
a)一般指令模式 (command mode)
以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模
式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整列』来处
理文件内容, 也可以使用『复制、贴上』来处理你的文件数据
b)编辑模式 (insert mode)
在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到
你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux
中,按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样,此时才可以进
行编辑。而如果要回到一般指令模式时, 则必须要按下『Esc』这个按键即可退出编辑模式
c)指令列命令模式 (command-line mode)
在一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一列。在
这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显
示行号等等的动作则是在此模式中达成的!
C:/Users/wpf/AppData/Local/YNote/data/qqDDF612C8ED77A7982F28C6F1290CC1BC/0eb779c81b5a4ea5b9f7861e46955dec/clipboard.png
注:一般指令模式可与编辑模式及指令列模式切换, 但编辑模式与指令列模式之间不可互相切换
1,简易执行范例
(1)使用『 vi filename 』进入一般指令模式
/bin/vim welcome.txt
打开后分为实际内容和状态信息行
(2)按下 i 进入编辑模式,开始编辑内容
a)在一般指令模式之中,只要按下 i, o, a 等字符就可以进入编辑模式
b)可以发现在左下角状态栏中会出现 –INSERT- 的字样,这个时候,键盘上除了 [Esc] 这个按键之外,其他的按键都可以视作为一般的输入按钮了
(3)按下 [ESC] 按钮回到一般指令模式
(4)进入指令列模式,保存文件并离开 vi 环境
保存 (write) 并离开 (quit) 的命令很简单,输入『:wq』即可保存退出! (按下 : 该光标就会移动到最底下一列去!
2,按键说明
(1)第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等
a)移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
注:进行多次移动,例如向下移动 30 列,可以使用 "30j" 或 "30↓" 的组合按键
[Ctrl] + [f] 屏幕向下移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + 屏幕向上移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕向下移动半页
[Ctrl] + 屏幕向上移动半页
+ 光标移动到非空格符的下一列
- 光标移动到非空格符的上一列
n<space> n为数字,按下数字后再按空格键,光标会向右移动这一列的 n个字符
0或功能键[Home] 移动到这一列的最前面字符处 (常用)
$ 或功能键[End] 移动到这一列的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一列的第一个字符
M 光标移动到这个屏幕的中央那一列的第一个字符
L 光标移动到这个屏幕的最下方那一列的第一个字符
G 移动到这个文件的最后一列(常用)
nG n 为数字。移动到文件的第 n 列。例如 20G 则会移动到文件的第 20 列(可配合 :set nu)
gg 移动到这个文件的第一列! (常用)
n<Enter> n 为数字。光标向下移动 n 列(常用)
b)查找与替换
/word 向光标之下寻找一个名称为 word 的字符串
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 重复前一个搜寻的动作。
N 与 n 刚好相反,为『反向』进行前一个搜寻动作
:n1,n2s/word1/word2/g 在第 n1 与 n2 列之间寻找 word1 这个字符串,并将该字符串取代为 word2
:1,$s/word1/word2/g 从第一列到最后一列寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
c)删除、复制与粘贴
x, X x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。
dd 删除游标所在的那一整列(常用)
ndd n 为数字。删除光标所在的向下 n 列 (常用)
d1G 删除光标所在到第一列的所有数据
dG 删除光标所在到最后一列的所有数据
d$ 删除游标所在处,到该列的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该列的最前面一个字符
yy 复制游标所在的那一列(常用)
nyy n 为数字。复制光标所在的向下 n 列(常用)
y1G 复制光标所在列到第一列的所有数据
yG 复制光标所在列到最后一列的所有数据
y0 复制光标所在的那个字符到该列行首的所有数据
y$ 复制光标所在的那个字符到该列行尾的所有数据
p, P p 为将已复制的数据在光标下一列贴上,P 则为贴在游标上一列!(常用)
J 将光标所在列与下一列的数据结合成同一列
c 重复删除多个数据,例如向下删除 10 列,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
. 重复前一个动作的意思 (常用)
(2)第二部份:一般指令模式切换到编辑模式的可用的按钮说明
a)进入插入或替换的编辑模式
i, I 进入插入模式(Insert mode):i 为光标所在处插入, I 为在所在列的第一个非空格符处开始插入。
a, A 进入插入模式(Insert mode):a 为光标所在的下一个字符处插入, A 为从光标所在列的最后一个字符处插入。
o, O 进入插入模式(Insert mode):o 光标所在的下一列处插入新的一列; O 在光标所在处的上一列插入新的一列!
r, R 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R 会一直取代光标所在的文字,直到按下 ESC为止;(常用)
[Esc] 退出编辑模式,回到一般指令模式中(常用)
(3)第三部份:一般指令模式切换到指令列模式的可用按钮说明
a)指令列模式的保存、离开等指令
:w 将编辑的数据写入硬盘文件中(常用)
:w! 若文件属性为『只读』时,强制写入该文件。
:q 离开 vi (常用)
:q! 为强制离开不储存文件。
:wq 保存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 若文件没有更动,则不保存离开,若文件已经被更动过,则保存后离开!
:w [filename] 将编辑的数据储存成另一个文件(类似另存新文件)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到游标所在列后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件。
:! command 暂时离开 vi 到指令列模式下执行 command 的显示结果!
b)vim 环境的变更
:set nu 显示行号,设定之后,会在每一列的前缀显示该列的行号
:set nonu 与 set nu 相反,为取消行号!
4,vim 的暂存档、救援回复与开启时的警告讯息
在使用 vim 编辑时, vim 会在与被编辑的文件的目录下,再建立一个名为 .filename.swp 的文件;
vim提示两点主要的问题与解决方案:
问题一 :可能有其他人或程序同时在编辑这个文件
解决方法:
a)找到另外那个程序或人员,请他将该 vim 的工作结束,然后你再继续处理。
b)如果你只是要看该文件的内容并不会有任何修改编辑的行为,那么可以选择开启成为只读(O)文件,
问题二:在前一个 vim 的环境中,可能因为某些不知名原因导致 vim 中断 (crashed)
解决方法:
a)如果你之前的 vim 处理动作没有保存,此时你应该要按下『R』,亦即使用 (R)ecover 的项目, 此
时 vim 会载入 .man_db.conf.swp 的内容,那个 .man_db.conf.swp 并不会在你结束 vim 后自动删除,
所以你离开 vim 后还得要删除 .man_db.conf.swp 才能避免每次打开这个文件都会出现这样的警告!
b)如果你确定这个暂存盘是没有用的,那么你可以直接按下『D』删除掉这个暂存盘,亦即 (D)elete it
这个项目即可。 此时 vim 会载入 man_db.conf ,并且将旧的 .man_db.conf.swp 删除后,建立这
次会使用的新的 .man_db.conf.swp !
暂存盘警告讯息的画面中,有出现六个可用按钮,各按钮的说明如下:
a)[O]pen Read-Only:打开此文件成为只读文件
b)(E)dit anyway:还是用正常的方式打开你要编辑的那个文件, 并不会载入暂存盘的内容,容易出现冲突。
c) (R)ecover:就是加载暂存盘的内容,用在你要救回之前未保存的内容。 需要手动自行删除那个暂存档!
d) (D)elete it:删除暂存文件
e)(Q)uit:按下 q 就离开 vim ,不会进行任何动作回到命令提示字符。
f) (A)bort:忽略这个编辑行为,感觉上与 quit 非常类似! 也会回到命令提示字符!
三,vim 的额外功能
1,区块选择(Visual Block)
区块选择的按键意义
v 字符选择,会将光标经过的地方反白选择!
V 列选择,会将光标经过的列反白选择!
[Ctrl]+v 区块选择,可以用长方形的方式选择资料
y 将反白的地方复制起来
d 将反白的地方删除掉
p 将刚刚复制的区块,在游标所在处贴上!
2,多文件编辑
多文件编辑的按键
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的开启的所有文件