读书人

vi 简略编辑

发布时间: 2012-09-03 09:48:39 作者: rapoo

vi 简单编辑

vi 有两种模式:命令模式和插入模式。?简单移动光标
h - 光标左移一个字符j - 光标下移一个字符k - 光标上移一个字符l(小写 L) - 光标右移一个字符
也可以使用方向键,向各个方向移动一个字符。
在上面的命令前加一个数字键,表示执行上面命令的次数。例如 4l 表示执行 l 命令 4 次,即四次向右移动一个字符。??行内移动?0(数字零)、^ - 光标移动到行首$ - 光标移动到行尾?以文本块为单位移动?w - 光标向前移动一个单词,特殊符号以及标点符号同样作为单词处理W - 光标向前移动一个单词,特殊符号以及标点符号不作为单词处理,即会忽略特殊符号和标点符号b - 光标向后移动一个单词,特殊符号以及标点符号作为单词处理B - 光标向后移动一个单词,特殊符号以及标点符号不作为单词处理,即会忽略特殊符号和标点符号?G - 光标移动到文件最后一行nG - 光标移动到文件的第 n 行?插入?i - 进入插入模式,在当前光标处插入文本,直到按下 ESC 为止,当按下 ESC,退出插入模式,返回到命令模式?追加?a - 在当前光标后追加文本,当输入 a 命令后,光标向后移动一个字符,直到按下 ESC 键为止?修改?使用 c 命令修改文本。修改的时候需要使 c 命令知道哪些文本是需要修改的,在 c 命令后紧接一个移动命令。如果修改仅仅影响到当前行,vi 则会在待修改的文本末尾使用 $ 标识。(?:在 vim 中,使用命令 :set cp 使 vim 的行为兼容 vi,:set nocp 则使 vim 的行为不兼容 vi,vim 只有在兼容模式下才能在待修改文本的末尾使用 $ 标识 )?执行修改命令后,可以使用任意多个字符或文本来替换以前的文本,在执行修改命令后输入的文本都会替换掉以前的文本,直到按下 ESC 键为止,如果输入命令紧接着按下 ESC 键,则会删除待修改的文本。?cw - 修改一个单词,同样可以修改单词的一个部分,例如把 spelling 修改为 spelled,只要把光标移动到 i 上,执行 cw 命令,并输入 ed 并按下ESC 就可以了cc - 修改光标所在行整行的内容。cc 命令与 cw 所不同的是,cw 首先会标识出整个待修改的文本,在输入的文本长度超过待修改的文本之前,待修改的文本以及 $ 符号会一直显示,直到输入的文本长度超过待修改的文本的长度为止,如果新文本的长度比待修改的文本短,当按下 ESC 后,剩余的文本则会被删除;然而 cc 命令首先会删除当前文本行,把光标移动到行首,并进入插入模式等待用户输入。C - 修改当前光标到行尾的文本,效果与 c$ 等同r - 修改当前光标所在的那个字符,r 命令不需要使用 ESC 返回命令模式?vi 命令的通用格式?很多 vi 命令都遵循以下的模式( 括号仅是为了区分不同的部分 ):?(command)(text object)?command?可以是修改命令 c 或删除命令 d 等,text object?则是移动命令。由于移动命令前面可以添加一个可选的数值参数表示命令执行的次数,所以上述的模式可以扩展成以下的通用模式:?(command)(number)(text object)?或?(number)(command)(text object)??替换?如 果仅仅希望修改几个字符,而不是整个单词,那可以使用 s 命令。s 命令仅替换单个字符,使用一个数值参数则可以修改多个字符。如果仅使用 s 命令替换一个字符,那么一旦执行 s 命令,就会删除光标所在字符,如果使用命令 ns 替换 n 个字符,那么 vi 同样会使用 $ 标识 n 个字符的末尾,同样使用 ESC 来结束修改。?S - 替换当前行整行的文本R - 替换从当前光标开始向后的文本,直到按下 ESC 键。执行 R 命令后,vi 会进入插入模式,输入的任何字符会替换掉当前光标所在位置的字符,直到按下 ESC。R 命令最多仅能替换当前行的内容,如果修改到行尾,输入 ENTER 则会创建一个新行,如果在到达行尾之前输入 ENTER,光标后面的字符会转到下一行,新输入的字符同样会替换掉已存在的字符。?改变大小写?~ - 改变当前光标处字符的大小写,并把光标向后移动一个字符n~ - 改变当前光标开始的 n 个字符的大小写?删除?使用删除命令 d 可以删除文件中的文本,与修改命令 c 一样,删除命令需要一个 text object。?删除单词?dw - 删除当前光标到单词末尾的字符,并删除单词后面的空白de - 删除当前光标到单词末尾的字符,不包括单词后面的标点,也不包括单词后面的空白dE - 删除当前光标到单词末尾的字符,包括单词后面的标点,但不包括单词后面的空白db - 删除当前光标到单词开头的字符?dd- 删除光标所在行D - 删除当前光标到行尾的所有字符,效果与 d$ 相同?x - 删除当前光标处的字符X - 删除当前光标之前的字符?移动文本?在 vi 中移动文本是先删除文本,然后把删除的文本放置到新的位置。每次删除一些文本的时候,这些文本被临时地保存在一个特殊的缓冲区中。?p(小写) - 把缓存中的文本放置到光标之后。如果删除一行或多行文本,p 把文本放置到光标所在的下一行;如果删除的不足一行,p 则把文本放置到光标所在行P(大写) - 把缓存中的文本放置到光标之前?xp - 把光标所在位置的字符后移一个字符的位置(x 先删除光标所在位置的字符,使用 p 把这个字符放置到光标之后)?复制文本?复制(y) 命令把指定数量的文本复制到一个特殊的缓冲区中,这个缓冲区中的内容会一直保持到下一次复制之前,然后通过命令 p 可以把这些文本粘贴到文件中的其它位置。与修改命令和删除命令一样,复制命令后跟一个移动命令指定复制的文本的范围。?yy - 复制整行( 同 Y )?复制与删除共用同一个缓冲区,每次复制或删除会覆盖掉前一次复制或删除的内容。?.(点) - 重复执行最后执行的一个命令u - 撤销最后一个命令所做的修改U - 只要光标还在已经做过修改的行上,则撤销在光标所在行做的任何修改,光标一旦离开了执行过修改的行,就不能使用 U 命令了?其它插入方式?A - 在当前行结尾处追加I - 在当前行开始处插入o(小写) - 在当前行下一行插入一个新行O(大写) - 在当前行上一行插入一个新行s - 删除当前光标所在处的字符,并使用任意文本替换S - 删除当前行,使用任意文本替换R - 替换当前光标开始的任意个字符?所有这些命令使 vi 进入插入模式,使用 ESC 返回命令模式。?合并?J - 把光标的下一行合并到光标所在行,在当前行与合并的行之间添加一个空格,并把光标移动到这个空格处
1 楼 EldonReturn 2010-05-05 记得有人发过一个比较全的思维导图式的助记表。 2 楼 jsjxqjy 2010-05-07 有时候我们在windows下编写的shell 脚本 直接拖到linux下需要转码
:set encoding=utf-8

,主要是不同系统的编码不一样. 3 楼 lvgang 2010-05-08 EldonReturn 写道记得有人发过一个比较全的思维导图式的助记表。
是的,我个人也收集了很多张,我这边只是把最近看到的一些简单地记录下来,一来便于以后自己查看,二来跟大家分享一下,也希望各位看官把自己使用过程中的一些独家秘技跟大家分享分享 4 楼 姜太公 2010-05-08 VI不需要这样学吧,我刚开始学vi用的是自带的教程,就是一个文本文件。差不多半小时搞定基本操作。后来经常使用,从网上找点小技巧。现在没有编辑的时候没有vi都极度不习惯,eclipse必装vi插件。 5 楼 lvgang 2010-05-08 姜太公 写道VI不需要这样学吧,我刚开始学vi用的是自带的教程,就是一个文本文件。差不多半小时搞定基本操作。后来经常使用,从网上找点小技巧。现在没有编辑的时候没有vi都极度不习惯,eclipse必装vi插件。
没有什么东西是放之四海皆准的,只要适合自己就行了 6 楼 行者买刀 2010-05-09 vi这个有时候用得很麻烦,在nettrn下查看时,有时候右边会多一个字符。 7 楼 idealab 2010-05-24 姜太公 写道VI不需要这样学吧,我刚开始学vi用的是自带的教程,就是一个文本文件。差不多半小时搞定基本操作。后来经常使用,从网上找点小技巧。现在没有编辑的时候没有vi都极度不习惯,eclipse必装vi插件。

烦劳推荐个Eclipse的vi插件,一直在用vi,可居然还没用到Java开发中。

读书人网 >操作系统

热点推荐