BSD下vi用法详解
<p>vi用法<br /> VI命令可以说是Unix/linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种<a class="UBBWordLink" href="#" target="_blank">方法</a>。本文旨在介绍VI的一些最常用命令和高级应用技巧。<br />一、基本命令介绍<br />---- 1.光标命令<br />k、j、h、l——上、下、左、右光标移动命令。虽然您可以在linux中使用键盘右边的4个光标键,但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。<br />nG——跳转命令。n为行数,该命令立即使光标跳到指定行。<br />Ctrl+G——光标所在位置的行数和列数报告。<br />w、b——使光标向前或向后跳过一个单词。<br />---- 2.编辑命令<br />i、a、r——在光标的前、后以及所在处字符命令(i=insert、a=append、r=replace)。<br />cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。<br />x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。<br />按ESC跳出编辑模式到命令模式<br />---- 3.查找命令<br />---- /string、?string——从光标所在处向后或向前查找相应的字符串的命令。<br />---- 4.拷贝复制命令<br />---- yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。<br />二、常见问题及应用技巧<br />---- 1.在一个新文件中读/etc/passwd中的内容,取出用户名部分。<br />---- vi file<br />---- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd<br />---- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。<br />---- 您也可以在指定的行号后读入文件内容,例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。<br />---- 我们还可以使用以下<a class="UBBWordLink" href="#" target="_blank">方法</a>删掉文件中所有的空行及以#开始的注释行。<br />---- #cat squid.conf.default | grep -v '^$' | grep -v '^#'<br />---- 2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。<br />---- vi file<br />---- :w /tmp/1 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。<br />---- vi file<br />---- :20,59w /tmp/1<br />---- 3.用VI编辑一个文件,但需要删除大段的内容。<br />---- 首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。(注:可以先用命令:set nu来显示全部的行号)<br />---- :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:'a,'bd”命令删除。<br />---- 4.在整个文件的各行或某几行的行首或行尾加一些字符串。<br />---- vi file<br />---- :3,$s/^/some string / 在文件的第一行至最后一行的行首“some string”。<br />---- :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。<br />---- :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。<br />---- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。<br />---- 注意: 其中s为substitute,%表示所有行,g表示global。<br />---- 5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。<br />---- vi file1 file2<br />---- yy 在文件1的光标处拷贝所在行<br />---- :n 切换到文件2 (n=next)<br />---- p 在文件2的光标所在处粘贴所拷贝的行<br />---- :n 切换回文件1<br />---- 6.替换文件中的字符串。<br />使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。(linux知识宝库)<br />--------------------------------------------------------------------------------------------<br />vi的简单用法:<br />进入vi后 有两种模式<br />1.编辑模式<br />2.命令模式</p><p>进入vi后默认是命令模式,所以不要乱按 就会得到dd的警告声,要输入文字的话 请按a后i 就可以开始输入文字拉!<br />输入结束后 请按esc键回命令模式<br />输入q就是退出<br />输入wq就是存盘后退出<br />输入q!放弃存盘强行退出</p>
<p>Vi 的使用</p>
<p>Vi 已经是 Unix <a class="UBBWordLink" href="#" target="_blank">系统</a>中标准的文字编辑器, 每个人员都必须熟悉它, 因为你会在维护<a class="UBBWordLink" href="#" target="_blank">系统</a>时常常遇到它.<br />Vi 对初学者而言, 第一印象总是不好, 觉得它难用. 其实, 大家在用惯了办公室软件之后, 再回过头来用这些未见过的怪物, 难免无法适应, 这是很正常的. 但别忘了, 各位都将是学校中重要的人员,您的角色不再是纯粹的使用者, 而是一位面对复杂<a class="UBBWordLink" href="#" target="_blank">网络</a>的管理者及问题<a class="UBBWordLink" href="#" target="_blank">解决</a>者, 你必须能够亲手操控你的<a class="UBBWordLink" href="#" target="_blank">系统</a>, 设定你的<a class="UBBWordLink" href="#" target="_blank">系统</a>, 调整你的<a class="UBBWordLink" href="#" target="_blank">系统</a>, 而这个过程, 你就不得不去面对 Vi.<br />不要拿 Word 的使用习惯来挑剔 Vi, 它们的作用方向不同, 风格也不同, 一旦您能上手, 也许你会喜欢上它. Vi 是<a class="UBBWordLink" href="#" target="_blank">网络</a>管理人员的标准左右手.<br />So, 打开你的心, 接受会比反弹更有收获.<br />二. 开启档案, 关闭档案<br />vi 檔名 开启档案<br />: 进入命令列的<a class="UBBWordLink" href="#" target="_blank">方法</a><br />q 离开 (命令列)<br />wq 存盘然后离开 (命令列)<br />q! 放弃存盘, 强迫离开 (命令列)<br />ZZ 存盘然后离开 (不在命令列使用)<br />:e 檔名 在 Vi 中开启档案<br />三. Vi 的<a class="UBBWordLink" href="#" target="_blank">操作</a>模式:<br />Vi 有二种主要的<a class="UBBWordLink" href="#" target="_blank">操作</a>模式, ESC 键为单向的切换键(由本文输入模式回到编辑命令模式)<br />编辑命令模式 : 要 vi 做一些特定目的的动作. 如,附加,取代,修改,删除,移动光标,搜寻等等. 若是存盘等动作, 则需在命令列中下达, 欲切换至命令列, 需先按 :<br />本文输入模式 : 在此模式下, 任何字符, 皆被视为输入的数据.<br />一开始进入 Vi 之后, 即进入编辑命令模式, 你输入的每一个字符, 皆被预视为一个指令. 有效的指令会被接受, 若是无效的指令, 会产生 beep beep 声, 以示警告.<br />若想做输入的动作, 必须切换为本文输入模式, 切换的<a class="UBBWordLink" href="#" target="_blank">方法</a>, 只要单按一个特殊意义的字符键即可, 如下所示:<br />按 i 或 I 状态<br />按 a 或 A 附加状态<br />按 R 取代状态R 会进行连续字符取代<br />按 s 或 S 删除一个字符;删除光标所在那一列<br />按 cw, c2b, c$, c0 修改状态<br />按 o 或 O 新增空白列<br />你不必一下子全用上, 只要会 i, a, o 这个三个模式即可胜任愉快, 因为大部份时候, 你也只用这三个.<br />OK, 现在你可以试着在本文输入模式下, 键入一些资料看看. 然后, 按 ESC 切换回编辑命令模式.<br />四. 移动光标:<br />Vi 为了适用于各种不同的终端机模式, 因此以字键的方式来操控光标.<br />k j h l 上 下 左 右<br />Enter 换列<br />w b 往前一个 word ; 一个 word<br />0 $ 至该列开头 ; 至该列尾端<br />+ - 往下一列; 往上一列<br />请记住一个要诀:<br />在 Vi 中, 大部份的命令都可以在其前面加上数字, 该数字表示重复该命令的次数.<br />例如: 8l 表示往右移动 8 个字符, 3w 表示往前移动三个 word, 2b 表示 2 个 word<br />注: word 的定义, 连续英数字元形成一个 word, 而其它特殊符号则每一个字符便是一个 word(除非连续特殊字符), 例如: --classify 中含有 2 个 word, 一个是 -- ; 一个是 classify<br />而 -x, 则有 3 个 word.<br />在特殊的终端机模式下, 方向键也是可以使用的. 如 linux 或 vt100.<br />其实大部份时候, 你仍可以保有使用方向键的习惯. 但大概只有 local 下才能使用 PgUp , PgDn, End, Home 等键喔!<br />不过, 若你所使用的终端机模式不支持方向键, 那么上表中的按键, 就相当重要了.<br />五. 卷页:<br />ctrl+f 往下一页 (forward)<br />ctrl+b 往上一页 (before)<br />ctrl+d 往下半个屏幕(down)<br />ctrl+u 往上半个屏幕(up)<br />六. 跳列:<br />你可以指定跳至某一列位置. 跳动之前, 先查看一下目前所在列数是多少.<br />ctrl+g 可以显示目前的位置, 如: "ls.txt" line 53 of 264 --20%-- col 16-23<br />上面表示, 目前是在第 53 列, 全部共有 264 列, 占该档百分之20的位置, 目前的光标, 实际是在第23行, 但只算成第16行, 因为中间有使用 tab 键.<br />80G 或 80gg 跳至第 80 列<br />G 跳至文件尾<br />gg 跳至文件头<br />七. 删除: (但不会进入本文输入模式)<br />x 删除一个字符<br />dd 删除一行<br />r 取代一个字符<br />以上皆针对光标目前的所在位置产生作用.<br />还有 dw, db, de, d0, d$ 等命令, 但你不须一下子全用上. 上表中这三个够用了.<br />记住一个要诀: Vi 的命令繁多, 但你真正用上手的不必多, 而且这些也就够了.<br />八. undo (回复动作):<br />若你对上一个动作反悔了, 可以使用 undo 的功能:<br />u 取消上一个动作所产生的改变<br />U 取消光标所在那一列所有的改变<br />:e! 取消所有的改变, 回复至未修改之前<br />九. 关键词搜寻/取代:<br />/ 关键词 往下搜寻关键词<br />? 关键词 往上搜寻关键词<br />n 重复搜寻命令(不管往下或往上) (注:等于是“寻找下一个”)<br />N 和 n 相反方向<br />cw字符串 以该字符串取代原有的关键词<br />n. 继续取代该字符串的动作<br />%s/目标/取代/g 将目标字符串全换成取代字符串<br />十. 选取、复制与搬移:<br />Y 或 yy 选取光标所在那一列<br />5Y 或 5yy 选取光标列所在共5列(5 只是一个例子, 可改用其它数字)<br />p 将选取的内容, 复制至光标之后<br />P 将选取的内容, 复制至光标之前<br />cw, x, dd 等删除命令 会将被删除的内容放入 buffer 中, 配合 p 或 P 即可做出搬移的效果.<br />十一. 暂时跳出 Vi:<br />在编辑过程中, 你可能想要执行其它命令, <a class="UBBWordLink" href="#" target="_blank">方法</a>如下:<br />:! 命令 执行该令命<br />:sh 暂时跳出 Vi, 欲回 Vi 按 ctrl+d 或 exit</p>
頁:
[1]