利用 vi 这个文字处理器喔!
本文数据主要针对 Fedora Core 4 的系统进行说明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而来, 这个 Red Hat Linux 9 并不是当前大家听到的 RHEL 喔!那是在 RHEL 出现之前的产品,基本上是在 2003 年以前的作品了!Fedora Core 4 则是在 2005 年 6 月份发布,使用的内核是 2.6.11 版,当时是很红的一个作品!只是生命周期太短,所以用这个 Fedora 系列来介绍 Server, 当时的决定确实有点莫名其妙了...
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 Fedora Core 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
每个系统管理员都应该至少要学会一种文本接口的文字处理器,以方便系统日常的管理行为。 在 Linux 上头的文字处理软件非常的多,不过,鸟哥还是建议使用 vi 这个正规的文字处理器。 这是因为 vi 几乎在任何一个 Unix Like 的机器都存在,学会他,轻松很多啊! 而且后来的计划也有推出 vim 这个 vi 的高端版本,可以用的额外功能更多了! vi 是未来我们进行 shell script 程序的编写与服务器设置的重要工具喔! 而且是非常非常重要的工具,一定要学会才行啊! ^_^
[root@linux ~]# vi test.txt
直接输入『 vi 文件名』即可进入 vi 了!如下图所示,左下角还会显示这个文件目前的状态!如果是新建文件会显示
[New File],如果是已存在的文件,则会显示目前的文件名、行数与字符数,例如:『"/etc/man.config"
145L, 4614C』一般模式: 移动光标的方法 | |
光标向左移动一个字符 | |
光标向下移动一个字符 | |
光标向上移动一个字符 | |
光标向右移动一个字符 | |
如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可! | |
屏幕『向下』移动一页,相当于 [Page Down]按键 (常用) | |
屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用) | |
屏幕『向下』移动半页 | |
屏幕『向上』移动半页 | |
光标移动到非空白字符的下一列 | |
光标移动到非空白字符的上一列 | |
那个 n 表示『数字』,例如 20 。按下数字后再按空白键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。 | |
这是数字『 0 』:移动到这一行的最前面字符处 (常用) | |
移动到这一行的最后面字符处(常用) | |
光标移动到这个屏幕的最上方那一行 | |
光标移动到这个屏幕的中央那一行 | |
光标移动到这个屏幕的最下方那一行 | |
移动到这个文件的最后一行(常用) | |
n 为数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个文件的第 20 行(可配合 :set nu) | |
移动到这个文件的第一行,相当于 1G 啊! (常用) | |
n 为数字。光标向下移动 n 行(常用) | |
一般模式: 搜索与取代 | |
向光标之下寻找一个字符串名称为 word 的字符串。例如要在文件内搜索 vbird 这个字符串,就输入 /vbird 即可! (常用) | |
向光标之上寻找一个字符串名称为 word 的字符串。 | |
这个 n 是英文按键。代表『重复前一个搜索的动作』的意思。举例来说, 如果刚刚我们运行 /vbird 去向下搜索 vbird 这个字符串,则按下 n 后,会向下继续搜索下一个名称为 vbird 的字符串。如果是运行 ?vbird 的话,那么按下 n 则会向上继续搜索名称为 vbird 的字符串! | |
这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜索动作。 例如 /vbird 后,按下 N 则表示『向上』搜索 vbird 。 | |
n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为
word2 !举例来说,在 100 到 200 行之间搜索 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用) | |
从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) | |
从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) | |
一般模式: 删除、拷贝与粘贴 | |
在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是倒退键) (常用) | |
n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。 | |
删除光标所在的那一整列(常用) | |
n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用) | |
删除光标所在到第一行的所有数据 | |
删除光标所在到最后一行的所有数据 | |
删除光标所在处,到该行的最后一个字符 | |
那个是数字的 0 ,删除光标所在处,到该行的最前面一个字符 | |
拷贝光标所在的那一行(常用) | |
n 为数字。拷贝光标所在的向下 n 列,例如 20yy 则是拷贝 20 列(常用) | |
拷贝光标所在列到第一列的所有数据 | |
拷贝光标所在列到最后一列的所有数据 | |
拷贝光标所在的那个字符到该行行首的所有数据 | |
拷贝光标所在的那个字符到该行行尾的所有数据 | |
p 为将已拷贝的数据在光标下一行粘贴,P 则为贴在光标上一行! 举例来说,我目前光标在第 20 行,且已经拷贝了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用) | |
将光标所在列与下一列的数据结合成同一列 | |
重复删除多个数据,例如向下删除 10 行,[ 10cj ] | |
复原前一个动作。(常用) | |
重做上一个动作。(常用) | |
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,您的编辑,嘿嘿!很快乐的啦! | |
不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果您想要重复删除、重复粘贴等等动作,按下小数点『.』就好了! (常用) | |
进入编辑模式 | |
插入:在目前的光标所在处插入输入之文本,已存在的文本会向后退; 其中, i 为『从目前光标所在处插入』, I 为『在目前所在行的第一个非空白字符处开始插入』。 (常用) | |
a 为『从目前光标所在的下一个字符处开始插入』, A 为『从光标所在行的最后一个字符处开始插入』。(常用) | |
这是英文本母 o 的大小写。o 为『在目前光标所在的下一行处插入新的一行』; O 为在目前光标所在处的上一行插入新的一行!(常用) | |
取代:r 会取代光标所在的那一个字符;R会一直取代光标所在的文本,直到按下 ESC 为止;(常用) | |
上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在文件里面输入字符时, 一定要在左下角处看到 INSERT/REPLACE 才能输入喔! | |
退出编辑模式,回到一般模式中(常用) | |
指令列命令模式 | |
将编辑的数据写入硬盘文件中(常用) | |
若文件属性为『唯读』时,强制写入该文件。不过,到底能不能写入, 还是跟您对该文件的文件权限有关啊! | |
离开 vi (常用) | |
若曾修改过文件,又不想保存,使用 ! 为强制离开不保存文件。 | |
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~ | |
保存后离开,若为 :wq! 则为强制保存后离开 (常用) | |
将文件还原到最原始的状态! | |
若文件没有更动,则不保存离开,若文件已经经过更动,则保存后离开! | |
将编辑的数据保存成另一个文件(类似另存新档) | |
在编辑的数据中,读入另一个文件的数据。亦即将 『filename』 这个文件内容加到光标所在行后面 | |
将 n1 到 n2 的内容保存成 filename 这个文件。 | |
暂时离开 vi 到指令列模式下运行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的文件信息! | |
显示行号,设置之后,会在每一行的前缀显示该行的行号 | |
与 set nu 相反,为取消行号! |
[root@linux ~]# alias
alias vi='vim'
这表示当您使用 vi 这个指令时,其实就是运行 vim 啦!如果您没有这一行,那么您就必须要使用 vim filename
来启动 vim 啰!基本上, vim 的一般用法与 vi 完全一模一样~没有不同啦!那么我们就来看看 vim
的画面是怎样啰!假设我想要编辑 /etc/man.config ,则输入『vim /etc/man.config』# # Generated automatically from man.conf.in by the # configure script. # # man.conf from man-1.5p # # For more information about this file, see the man pages man(1) # and man.conf(5). "man.config" 138L, 4506C 1,1 Top上面的图标是 vim 一画面一角~他有几个特色要讲:
192.168.1.1 host1.class.net
192.168.1.2 host2.class.net
192.168.1.3 host3.class.net
192.168.1.4 host4.class.net
.....中间省略......
这个文件我将他放置到 http://vbird.org.cn/linux_basic/0310vi/hosts
,您可以自行下载来看一看这个文件啊!
如果我想要拷贝的只是前面的 IP 数字部分,后面的主机名称部分就不给他拷贝,那怎么办?
这个时候就得需要使用区块选择(Visual Block)的功能了。当我们按下 v 或者 V 或者 [Ctrl]+v 时,
这个时候光标移动过的地方就会开始反白,这三个按键的意义分别是:区块选择的按键意义 | |
v | 字符选择,会将光标经过的地方反白选择! |
V | 行选择,会将光标经过的行反白选择! |
[Ctrl]+v | 区块选择,可以用长方形的方式选择数据 |
y | 将反白的地方拷贝起来 |
d | 将反白的地方删除掉 |
多文件编辑的按键 | |
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
:files | 列出目前这个 vim 的打开的所有文件 |
[root@linux ~]# vi hosts /etc/hosts # 在这个文件中利用上个小节提到的区块选择,按下 [ctrl]+v 来进行区块选择,并拷贝。 # 然后按下 :n 在指令列的地方输入这玩意儿,就会转到下一个文件去,这个时候, # 就可以按下 p 将刚刚拷贝的 IP 给贴到您的文件中啰!如果您按下 :files ,则:看到了吧?利用多文件编辑的功能,可以让您很快速的就将需要的数据拷贝到正确的文件内。 当然啰,这个功能也可以利用窗口接口来达到,那就是底下要提到的多窗口功能。
192.168.1.4 host4.class.net 192.168.1.5 host5.class.net ~ ~ :files 1 %a "hosts" line 1 2 # "/etc/hosts" line 1 Hit ENTER or type command to continue
# 看到否?在指令列输入 :files 就可以显示目前所编辑的文件信息啰!
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.1.11 vbird-work 192.168.1.2 vbird-server ~ /etc/hosts 5,1 All 192.168.1.1 host1.class.net 192.168.1.2 host2.class.net 192.168.1.3 host3.class.net 192.168.1.4 host4.class.net 192.168.1.5 host5.class.net hosts 1,1 Top怎样?帅吧!两个文件同时在一个屏幕上面显示,您还可以利用『[ctrl]+w+j』及『[ctrl]+w+k』 在两个窗口之间移动呢!这样的话,拷贝啊、查阅啊等等的,就变的很简单啰~ 指令的功能有很多,不过,您只要记得这几个就好了:
多窗口情况下的按键功能 | |
:sp [filename] | 打开一个新窗口,如果有加 filename, 表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容(同步显示)。 |
[ctrl]+wj | 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j ,则光标可移动到下方的窗口。 |
[ctrl]+wk | 同上,不过光标移动到上面的窗口。 |
[ctrl]+wq | 其实就是 :q 结束离开啦! 举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+wj 移动到下方窗口后,按下 :q 即可离开, 也可以按下 [ctrl]+wq 啊! |
vim 的环境设置参数 | |
:set nu | 还记得这个吧?!就是设置行号啊!取消的话,就是 :set nonu |
:set hlsearch | 这个就是设置是否将搜索的字符串反白的设置值。 默认值就是 hlsearch ,如果不想要反白,就 :set nohlsearch 。 |
:set autoindent | 是否自动缩进?autoindent 就是自动缩进, 不想要缩进就 :set noautoindent 。 |
: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 | 显示目前所有的环境参数设置值。 |
:syntax (off|on) | 是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文本档时,如果开头是以 # 开始,那么该行就会变成蓝色。 如果您懂得写程序,那么这个 :syntax on 还会主动的帮您调试呢!但是, 如果您仅是编写纯文本文件,要避免颜色对您的屏幕产生的干扰,则可以取消这个设置 :syntax off 。 |
[root@linux ~]# vi ~/.vimrc :set hlsearch :set backspace=2 :set autoindent :set ruler :set showmode :syntax on这样,当您下次重新以 vim 编辑某个文件时,该文件的缺省环境设置就是上头写的啰~ 这样,是否很方便您的操作啊!多多利用 vim 的环境设置功能呢!^_^
例题一:我今天自己安装了一套软件,这套软件的 man page 放置在 /opt/vbirdsoft/man 这个目录下,
那我希望未来只要输入类似 man vbirdcommand 就可以查阅到我这个软件的说明文档,该如何是好? 答:
MANPATH /opt/vbirdsoft/man 保存后离开,从此以后,就可以查找到属于我自己的指令的在线说明文档了。 |
例题二:我知道查找文件可以利用 locate 来进行查找,但是,
该程序必须要配合数据库的更新才行 (updatedb)。现在,我想让我的 FC4 每天进行文件数据库的更新,
并且『不要更新 /var/cache 』这个目录,该如何是好? 答:
DAILY_UPDATE=yes PRUNEFS="selinuxfs usbdevfs NFS nfs afs sfs smbfs cifs autofs auto iso9660 udf" PRUNEPATHS="/tmp /usr/tmp /var/spool/cups /var/spool/squid /var/tmp /afs /net /sfs /selinux /udev /media /var/cache" 上列粗体部分为新加入的部分。那个 DAILY_UPDATE=yes 代表每日进行更新,至于 PRUNEPATHS 后面则接『不要更新的目录』, 所以,这样就能够达到我们的需求啰! |
例题三:在 partition 格式化的那个章节中,假设我有一个 partition 为 /dev/hdb5 ,
这个 partition 挂载到 /disk2 上面,且目录 /disk2 已经创建好了。该 partition 使用的 filesystem 为 ext3 ,
请问,如果我想要在开机的时候就挂载这个 partition ,该怎么办? 答:
/dev/hdb5 /disk2 ext3 defaults 2 2 这样修改完毕后,下达 mount -a 测试看看能否正确挂载,之后就可以开机自动挂载啰~ |
[root@linux ~]# dos2unix [-kn] file [newfile] [root@linux ~]# unix2dos [-kn] file [newfile] 参数: -k :保留该文件原本的 mtime 时间格式 (不更新文件上次内容经过修订的时间) -n :保留原本的旧档,将转换后的内容输出到新文件,如: dos2unix -n old new 范例: 范例一:将我们提供的 hosts 文件格式更新为 dos 格式。 [root@linux ~]# unix2dos -k hosts unix2dos: converting file hosts to DOS format ... # 此时 hosts 这个文件的时间不会改变,但是内容主要将断行字符修改成为 DOS 的 CRLF 了。 范例二:将范例一已经变成 DOS 格式的 hosts 改名成为 hosts.dos ,并且转换 Linux 格式到 hosts.linux [root@linux ~]# mv hosts hosts.dos [root@linux ~]# dos2unix -k -n hosts.dos hosts.linux dos2unix: converting file hosts.dos to file hosts.linux in UNIX format ... [root@linux ~]# ll -rw-r--r-- 1 root root 288 Aug 1 13:30 hosts.dos -rw------- 1 root root 279 Aug 1 13:30 hosts.linux # 嘿嘿!由于 DOS 格式当中多了 CR 字符,所以,文件比较大的啦!因为断行字符以及 DOS 与 Linux 操作系统底下一些字符的定义不同,因此, 不建议您在 Windows 系统当中将文件编辑好之后,才上传到 Linux 系统,会容易发生错误问题。 而且,如果您在不同的系统之间拷贝一些纯文本文件时,千万记得要使用 unix2dos 或 dos2unix 来转换一下格式啊!