在所有的 Linux distributions 上头都会有的一套文书编辑器就 是 vi ,而且很多软件默认也是使用 vi 做为他们编辑的接口, 因此鸟哥建议您务必要学会使用 vi 这个正规的文书编辑器。

此外,vim 是进阶版的 vi , vim 不但可以用不同颜色显示文字内 容,还能够进行诸如 shell script, C program 等程序编辑功能, 你可以将 vim 视为一种程序编 辑器

9.1 vi 与 vim

9.1.1 为何要学 vim

  • 所有的 Unix Like 系统都会内置 vi 文书编辑器,其他的文书编辑器则不一定会存在;

  • 很多个别软件的编辑接口都会主动调用 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);

  • vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计;

  • 因为程序简单,编辑速度相当快速。

可以将 vim 视作 vi 的进阶版本,vim 可以用颜色或底线等方式来 显示一些特殊的信息。

vim 会依据文件的扩展名或者是文件内的开头信息, 判断该文件的内容而自动的调用该程序的语法判断式,再以颜色来显示程序码与一般信息

简单的来说, vi 是老式的文书处理器,不过功能已经很齐全了,但是还是有可以进步的地 方。 vim 则可以说是程序开发者的一项很好用的工具,就连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个“程序开发工具”而不是文书处理软件

9.2 vi 的使用

vi 共分为三种模式,分别是“一般指令模式”、“编辑模式”与“命令行命令模式”

模式 描述
一般指令模式 (command mode) 以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在 这个模式中, 你可以使用“上下左右”按键来移动光标,你可以使用“删除字符”或“删除整列”来 处理文件内容, 也可以使用“复制、贴上”来处理你的文件数据。
编辑模式 (insert mode) 在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要 等到你按下“i, I, o, O, a, A, r, R”等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现“ INSERT 或 REPLACE ”的字样,此时才 可以进行编辑。而如果要回到一般指令模式时, 则必须要按下“Esc”这个按键即可退出编辑模 式。
命令行命令模式 (command-line mode) 在一般模式当中,输入“ : / ? ”三个中的任何一个按钮,就可以将光标移动到最下面那一列。在 这个模式当中, 可以提供你“搜寻数据”的动作,而读取、存盘、大量取代字符、离开 vi 、显 示行号等等的动作则是在此模式中达成的!

vi三种模式的相互关系

编辑模式与 命令行界面之间不可互相切换

9.2.1 简易执行范例

1. 使用“ vi filename ”进入一般指令模式

/bin/vi welcome.txt
# 在 CentOS 7 当中,由于一般帐号默认 vi 已经被 vim 取代了,因此得要输入绝对路径来执行才行!

root 账号和其他账号使用 type vi 可以看到不同

root 账号 vi 没有被 vim 取代

vi 后面一定要加文件名,不管该文件名存在与否

用 vi 开启一个新档案

整个画面主要分为两部份,上半部与最下面一列两者可以视为独立的

图 中那个虚线是不存在的, 鸟哥用来说明而已啦!上半部显示的是文件的实际内容,最下面一 列则是状态显示列(如下图的[New File]信息),或者是命令下达列

如果你打开的文件是旧文件(已经存在的文件),则可能会出现

"/etc/man_db.conf" [readonly] 131L, 5171C

目前文件为只读状态,且文 件内有 131 列 以及具有 5171 个字符

2. 按下 i 进入编辑模式,开始编辑文字

在一般指令模式之中,只要按下 i, o, a 等字符就可以进入编辑模式了!在编辑模式当中,你 可以发现在左下角状态列中会出现 -- INSERT -- 的字样

这个时候,键盘上除了 [Esc] 这个按键之外,其他的按键都可以视作为一般的输入按钮

3. 按下 [ESC] 按钮回到一般指令模式

按下 [Esc] 这个按钮即可!马上你就会发现画面左下角的 -- INSERT -- 不见了

4. 进入命令行界面,文件储存并离开 vi 环境

存盘 (write) 并离开 (quit) 的指令很简单,输入“:wq”即可存盘离 开

9.2.2 按键说明

第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等

移动光标的方法
指令 描述
h 或 向左方向键(←) 光标向左移动一个字符
j 或 向下方向键(↓) 光标向下移动一个字符
k 或 向上方向键(↑) 光标向上移动一个字符
l 或 向右方向键(→) 光标向右移动一个字符

如果想要进行 多次移动的话,例如向下移动 30 列, 可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后, 按下动作即可!

指令 描述
[Ctrl] + [f] 屏幕“向下”移动一页,相当于 [Page Down]按 键 (常用)
[Ctrl] + [b] 屏幕“向上”移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕“向下”移动半页
[Ctrl] + [u] 屏幕“向上”移动半页
+ 光标移动到非空白字符的下一行
光标移动到非空白字符的上一行
n 那个 n 表示“数字”,例如 20 。按下数字后再 按空白键,光标会向右移动这一行的 n 个字 符。例如 20
则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字“ 0 ”:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一 个字符
M 光标移动到这个屏幕的中央那一行的第一个 字符
L 光标移动到这个屏幕的最下方那一行的第一 个字符
G 移动到这个文件的最后一行(常用)
nG n 为数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个文件的第 20 行(可配合 :set nu)
gg 移动到这个文件的第一行,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 行(常用)
搜寻与取代
指令 描述
/word 向光标之下寻找一个名称为 word 的字串。例 如要在文件内搜寻 vbird 这个字串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字串名称为 word 的字 串。
n 这个 n 是英文按键。代表“重复前一个搜 寻的动作”。举例来说, 如果刚刚我们执 行 /vbird 去向下搜寻 vbird 这个字串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的 字串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为
N 这个 N 是英文按键。与 n 刚好相反,为“反 向”进行前一个搜寻动作。 例如 /vbird 后,按 下 N 则表示“向上”搜寻 vbird 。

使用 /word 配合 n 及 N 是非常有帮助 的!可以让你重复的找到一些你搜寻的 关键字!

指令 描述
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字串,并将该字串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:“:100,200s/vbird/VBIRD/g”。(常用)
:1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字串,并将 该字串取代为 word2 !(常用)
:1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字串,并将 该字串取代为 word2 !且在取代前显示提示 字符给使用者确认 (confirm) 是否需要取 代!(常用)
删除、复制与粘贴
指令 描述
x, X 在一行字当中,x 为向后删除一个字符 (相 当于 [del] 按键), X 为向前删除一个字符 (相当于 [backspace] 亦即是倒退键) (常 用)
nx n 为数字,连续向后删除 n 个字符。举例来 说,我要连续删除 10 个字符, “10x”。
dd 删除光标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除光标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除光标所在处,到该行 的最前面一个字符
yy 复制光标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有 数据
y$ 复制光标所在的那个字符到该行行尾的所有 数据 p,
P p 为将已复制的数据在光标下一行贴上,P 则 为贴在光标上一行! 举例来说,我目前光标 在第 20 行,且已经复制了 10 行数据。则按 下 p 后, 那 10 行数据会贴在原本的 20 行之 后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
. 不要怀疑!这就是小数点!意思是重复前一 个动作的意思。 如果你想要重复删除、重复 贴上等等动作,按下小数点“.”就好了! (常 用)

u 与 [Ctrl]+r 是很常用的指令!一 个是复原,另一个则是重做一次

第二部份:一般指令模式切换到编辑模式的可用的按钮说明

进入插入或取代的编辑模式
指令 描述
i, I 进入插入模式(Insert mode):i 为“从目前光标所在处插入”, I 为“在目前所在行的第一个非空白 字符处开始插入”。 (常用)
a, A 进入插入模式(Insert mode):a 为“从目前光标所在的下一个字符 处开始插入”, A 为“从光标所在行 的最后一个字符处开始插入”。 (常用)
o, O 进入插入模式(Insert mode): 这是英文字母 o 的大小写。o 为“在目前光标所在的下一行处插 入新的一行”; O 为在目前光标所 在处的上一行插入新的一行!(常 用)
r, R 进入取代模式(Replace mode):r 只会取代光标所在的 那一个字符一次;R会一直取代光 标所在的文字,直到按下 ESC 为 止;(常用)
[Esc] 退出编辑模式,回到一般指令模式 中(常用)

上面这些按键中,在 vi 画面的左下角处会出现“– INSERT–”或“–REPLACE–”的字样。 由名称就知道 该动作了吧!!特别注意的是,我们上面也提过 了,你想要在文件里面输入字符时, 一定要在左下 角处看到 INSERT 或 REPLACE 才能输入喔!

第三部份:一般指令模式切换到命令行界面的可用按钮说明

命令行界面的储存、离开等 指令

惊叹号 (!) 在 vi 当中,常常具 有“强制”的意思

指令 描述
:w 将编辑的数据写入硬盘文件中(常用)
:w! 若文件属性为“只读”时,强制写入该文件。不过,到底能 不能写入, 还是跟你对该文件的文件权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过文件,又不想储存,使用 ! 为强制离开不储存 盘案。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若文件没有更动,则不储存离开,若 文件已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个文件(类似另存新文件)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 “filename” 这个文件内容加到光标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件。
:! command 暂时离开 vi 到命令行界面下执行 command 的显示结 果!例如 “:! ls /home”即可在 vi 当中察看 /home 下面以 ls 输出的文件信息!
vim 环境的变更
指令 描述
:set nu 显示行号,设置之后,会在每一行的字首显示该行的行 号
:set nonu 与 set nu 相反,为取消行号!

9.2.4 vim 的暂存盘、救援回复与打开时的警告讯息

vim 就是通过“暂存盘”来救援

当我们在使用 vim 编辑时, vim 会在与被编辑的文件的目录下,再创建一个名为 .filename.swp 的文件

在 vim 的一般指令模式下按下 [ctrl]-z 的组合按键时,你的 vim 会被丢到后台去执行

由于暂存盘存在的关系,因此 vim 会主动的判断你的这个文件可能有些问题,vim 提示两点主要的问题与解决方案

  • 问题一:可能有其他人或程序同时在编辑这个文件

  • 问题二:在前一个 vim 的环境中,可能因为某些不知名原因导致 vim 中断 (crashed)

至于这个发现暂存盘警告讯息的画面中,有出现六个可用按钮,各按钮的说明如下:

  • [O]pen Read-Only

  • (E)dit anyway

  • (R)ecover

  • (D)elete it

    • 测试的时候发现没有这个选项,可能是因为版本不同的关系
  • (Q)uit

  • (A)bort

9.3 vim 的额外功能

目前大部分的 distributions 都以 vim 取代 vi 的功能了!如果你使用 vi 后,却看到画面 的右下角有显示目前光标所在的行列号码,那么你的 vi 已经被 vim 所取代

vim 的图示示意

# 查看命令别名
alias

9.3.1 区块选择(Visual Block)

多列编辑模式

指令 描述
v 字符选择,会将光标经过的地方反白选择!
V 列选择,会将光标经过的列反白选择! [Ctrl]+v 区块选择,可以用长方形的方式选择数据
y 将反白的地方复制起来
d 将反白的地方删除掉
p 将刚刚复制的区块,在光标所在处贴上!

9.3.2 多文件编辑

指令 描述
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的打开的所有文件

通过“ vim hosts /etc/hosts ”指令来使用一个 vim 打开两个文件

9.3.3 多窗口功能

指令 描述
:sp [filename] 打开一个新窗口,如果有加 filename, 表示在新窗口打开一个新文件,否 则表示两个窗口为同一个文件内容(同步显示)。
[ctrl]+w+ j [ctrl]+w+↓ 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按 下 j (或向下方向键),则光标可移动到下方的窗口。
[ctrl]+w+ k [ctrl]+w+↑ 同上,不过光标移动到上面的窗口。
[ctrl]+w+ q 其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利 用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+w+q 啊!

9.3.4 vim 的挑字补全功能

指令 描述
[ctrl]+x -> [ctrl]+n 通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐
[ctrl]+x -> [ctrl]+f 以当前目录内的“文件名”作为关键字,予以补齐
[ctrl]+x -> [ctrl]+o 以扩展名作为语法补充,以 vim 内置的关键字,予以补齐

9.3.5 vim 环境设置与记录: ~/.vimrc, ~/.viminfo

vim 会主动的将你曾经做过的行为登录下来,好让你下次可以轻松的作业 啊! 那个记录动作的文件就是: ~/.viminfo

vim 的环境设置参数有很多,如果你想要知道目前的设 置值,可以在一般指令模式时输入“ :set all ” 来查阅

环境设置参数 描述
:set nu :set nonu 就是设置与取消行号啊!
:set hlsearch :set nohlsearch hlsearch 就是 high light search(高亮度搜寻)。 这个就是设置 是否将搜寻的字串反白的设置值。默认值是 hlsearch
:set autoindent :set noautoindent 是否自动缩排?autoindent 就是自动缩排。
:set backup 是否自动储存备份文件?一般是 nobackup 的, 如果设置 backup 的话,那么当你更动任何一个文件时,则原始文件会被另 存成一个文件名为 filename~ 的文件。 举例来说,我们编辑 hosts ,设置 :set backup ,那么当更动 hosts 时,在同目录下, 就会产生 hosts~ 文件名的文件,记录原始的 hosts 文件内容
:set ruler 还记得我们提到的右下角的一些状态列说明吗? 这个 ruler 就是 在显示或不显示该设置值的啦!
:set showmode 这个则是,是否要显示 –INSERT– 之类的字眼在左下角的状态 列。
:set backspace=(012) 一般来说, 如果我们按下 i 进入编辑模式后,可以利用倒退键 (backspace) 来删除任意字符的。 但是,某些 distribution 则 不许如此。此时,我们就可以通过 backspace 来设置啰~ 当 backspace 为 2 时,就是可以删除任意值;0 或 1 时,仅可删除 刚刚输入的字符, 而无法删除原本就已经存在的文字了!
:set all 显示目前所有的环境参数设置值。
:set 显示与系统默认值不同的设置参数, 一般来说就是你有自行变动 过的设置参数啦! :syntax on :syntax off 是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯 文本文件时,如果开头是以 # 开始,那么该列就会变成蓝色。 如 果你懂得写程序,那么这个 :syntax on 还会主动的帮你除错呢! 但是, 如果你仅是编写纯文本,要避免颜色对你的屏幕产生的干 扰,则可以取消这个设置 。
:set bg=dark :set bg=light 可用以显示不同的颜色色调,默认是“ light ”。如果你常常发现注 解的字体深蓝色实在很不容易看, 那么这里可以设置为 dark 喔!试看看,会有不同的样式呢!

整体 vim 的设置值一般是放置在 /etc/vimrc 这个文件,不过,不建议你修改他! 你 可以修改 ~/.vimrc 这个文件 (默认不存在,请你自行手动创建!)

在这个文件中,使用“ set hlsearch ”或“ :set hlsearch ”,亦即最前面有没有冒号“ : ”效果都是 一样的! 至于双引号则是注解符号!

9.3.6 vim 常用指令示意图

vim 常用指令示意图

9.4 其他 vim 使用注意事项

9.4.1 中文编码的问题

  1. 你的 Linux 系统默认支持的语系数据:这与 /etc/locale.conf 有关;

  2. 你的终端接口 (bash) 的语系: 这与 LANG, LC_ALL 这几个变量有关;

  3. 你的文件原本的编码;

  4. 打开终端机的软件,例如在 GNOME 下面的窗口接口。

9.4.2 DOS 与 Linux 的断行字符

DOS(Windows) 与 Linux 断行字符不同

DOS 使用的断行字符为 ^M$ ,我们称为 CR 与 LF 两个符号。 而在 Linux 下面,则是仅有 LF ($) 这个断行符号

可能造成“程序无法执行”的状 态

dos2unix [-kn] file [newfile] 
unix2dos [-kn] file [newfile] 

选项与参数: 
-k :保留该文件原本的 mtime 时间格式 (不更新文件上次内容经过修订的时间) 
-n :保留原本的旧文件,将转换后的内容输出到新文件,如: dos2unix -n old new

不建议你在 Windows 系统当中将文件编辑好之后,才上传到 Linux 系统,会容易发生错误问题

9.4.3 语系编码转换

举例来说,想要将 big5 编码转成 utf8

iconv --list 
iconv -f 原本编码 -t 新编码 filename [-o newfile] 

选项与参数: 
--list :列出 iconv 支持的语系数据 
-f :from ,亦即来源之意,后接原本的编码格式; 
-t :to ,亦即后来的新编码要是什么格式; 
-o file:如果要保留原本的文件,那么使用 -o 新文件名,可以创建新编码文件。
# 范例一:将 /tmp/vitest/vi.big5 转成 utf8 编码
iconv -f big5 -t utf8 vi.big5 -o vi.utf8
# 范例二:将繁体中文的 utf8 转成简体中文的 utf8 编码
iconv -f utf8 -t big5 vi.utf8 |  iconv -f big5 -t gb2312 | iconv -f gb2312 -t utf8 -o vi.gb.utf8

原文地址:http://www.cnblogs.com/huangwenjie/p/16870669.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性