【转】Linux下vi的用法

来源:互联网 发布:淘宝店怎么办营业执照 编辑:程序博客网 时间:2024/05/22 13:42

一、基本命令介绍

  ---- 1.光标命令

  k、j、h、l——上、下、左、右光标移动命令。

  nG——跳转命令。n为行数,该命令立即使光标跳到指定行。

  Ctrl+G——光标所在位置的行数和列数报告。

  w、b——使光标向前或向后跳过一个单词。

  ---- 2.编辑命令

  i、a、r——在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。

  cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。

  x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。

  ---- 3.查找命令

  ---- /string、?string——从光标所在处向后或向前查找相应的字符串的命令。

  ---- 4.拷贝复制命令

  ---- yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。

二、常见问题及应用技巧

  ---- 1.在一个新文件中读/etc/passwd中的内容,取出用户名部分。

  ---- vi file

  ---- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd

  ---- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。

  ----您也可以在指定的行号后读入文件内容,例如使用命令“:3r/etc/passwd”从新文件的第3行开始读入/etc/passwd的所有内容。

  ---- 我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。

  ---- #cat squid.conf.default | grep -v '^$' | grep -v '^#'

  ----2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。

  ---- vi file

  ----:w/tmp/1保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,可以键入如下命令:

  ---- vi file

  ---- :20,59w /tmp/1

  ---- 3.用VI编辑一个文件,但需要删除大段的内容。

  ----首先利用编辑命令“vifile”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。

  ----:23,1045d假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:'a,'bd”命令删除。

  ---- 4.在整个文件的各行或某几行的行首或行尾加一些字符串。

  ---- vi file

  ---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。

  ---- :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。

  ---- :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。

  ---- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。

  ---- 注意: 其中s为substitute,%表示所有行,g表示global。

  ---- 5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。

  ---- vi file1 file2

  ---- yy 在文件1的光标处拷贝所在行

  ---- :n 切换到文件2 (n=next)

  ---- p 在文件2的光标所在处粘贴所拷贝的行

  ---- :n 切换回文件1

  ---- 6.替换文件中的路径。

  ----使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。

#######################################################################

应用技巧一:快速注释

  1、连续行注释
使用Vim/Vi编辑shell脚本,在进行调试的时候,需要进行多行的注释,每次都要先切换到插入模式,在行首输入注释符“#”,再退回命令模式,非常麻烦。其实如果要注释连续行,可在命令模式下执行,格式如下:

  :起始行,终止行s/要替换字符/替换为新字符/g
如需注释第1行到第20行,可以执行:
:1,20s/^/#/g

  其中“^”表示在行首插入,“#”为要插入的字符,“g”表示执行替换时不确认,若希望每行交互询问是否执行,可将“g”改为“c”。

  如果编辑PHP脚本,注释要稍微麻烦一点,如也要注释第1行到第20行,要执行:

  :1,20s/^//////g

  PHP的注释符“//”要特殊处理,因为Vim/Vi替换命令格式中默认“/”为分隔符,这样就需要使用转义符“/”,表示“/”就要写成“//”才可以,所以命令如上所示。

  2、非连续行注释
如果注释非连续的多行,可以定义快捷键简化,格式为:
:map 快捷键 执行命令

  如定义快捷键Ctrl+P为在当前行行首添加“#”注释,可以执行:
:map ^P I//
“^P” 为定义快捷键Ctrl+P,要注意的是必须同时按“Ctrl+v+p”按出此“^P”方才有效,或先按“Ctrl+v”再按“Ctrl+p”也可 以;“I//”就是此快捷键要触发的动作,“I”为在光标所在行行首插入,“//”为要输入的字符,“”表示退回命令模式,“”要逐个字符键入,不可直接 按键盘的“Esc”键。执行成功后,直接在任意需要注释的行上按“Ctrl+P”就自动会在行首加上“//”号了非常方便。

  如果要取消此快捷键,只需输入命令:
:unmap ^P

  应用技巧二:乱七八糟的技巧

  1、传说中的命令“ab”
:ab 替代符 原始信息
示例如下:
:ab sammail sam_helen@vip.163.com

  执行之后,在输入模式任何地方录入“sammail”,再敲任意字母符号或者回车空格,就变成“sam_helen@vip.163.com”。

  2、原来可以双剑合一
在Vim/Vi中有两个小技巧:
No.1 可以直接在Vim/Vi中执行UNIX/Linux命令不需退出Vim/Vi

  有时编写一些系统脚本,需要了解系统信息,很多同学就退出Vim/Vi然后执行命令,获得信息后再进行编辑。其实大可不必,如想获得/tmp目录下内容,只需在Vim/Vi命令模式下直接执行:

  :!ls /etc
查看完命令结果,直接回车,就可以继续编辑非常方便。

  在Vim/Vi中执行命令,格式就是这么简单:
:!命令

  No.2 可以直接将其他文件内容导入当前编辑文件中
格式:
:r 文件名
如,需要导入文件/etc/issue的内容,执行:
:r /etc/issue

  它们可以结合起来用。很多程序员喜欢写完程序后在注释中写入当前时间,只需要在命令模式下执行:

  :r !date
当前时间就自动被导入了,任何命令的结果导入到当前编辑文件中,格式为:
:r !命令

  3、助力编程的查询功能
以前在Linux系统下写一些C语言程序,有时记性不好,忘记了语法格式,使用 Vim/Vi编写时可直接查询。如写程序写到fork时,突然失忆了(失去了对这个东东的记忆),就可以直接把光标移动到fork上,按“K”(大写的 K),直接就会跳到Linux程序员手册,看到fork的帮助,看完后回车继续编写。

  4、配置文件.vimrc
前面提到的快捷键、ab命令等的应用,设置后只在当前编辑文件中有效,如果想让它永久生效需要编辑用户宿主目录下的.vimrc文件,如你是root用户,则编辑/root/.vimrc(此文件默认不存在)。

  写入你常用的设置命令即可,如:
:set nu
:map ^M isam_helen@vip.163.com
:ab sammail limingkillyou@163.com
……
以后就永久生效了。