您的位置:首页 > 其它

vi命令

2013-11-01 21:02 701 查看
一、vi的三种工作状态:

命令模式:是vi的初始方式也是一般方式。用于执行命令,但不能输入文本内容。大部分的命令都是在此模式下执行的

插入模式:用于文本内容的输入

末行命令模式:用于执行存盘命令、退出命令、vi设置命令等

三种工作状态的转换:

从命令模式可以进入其它两种模式。插入模式和末行命令模式不能直接转换,以命令模式为中介

ESC键、编辑键(i或a或o)、: 键是模式转换的控制键

(1)编辑文本(进入插入模式)

[Esc]->a 把文本添加到光标之后 A在一个行的末尾插入。

[Esc]->i 把文本添加到光标之前

[Esc]->o 在光标所在行下面开新行,O在光标的上一行开新行。

   w,b  是光标向前或后跳一个单词。

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

(2)存盘退出

[Esc]->:w [回车] 表示保存不退出

[Esc]->ZZ 表示保存同时退出vi

[Esc]->:wq [回车] 表示保存同时退出vi

[Esc]->:q [回车] 表示退出vi

[Esc]->:q! [回车] 表示不保存强行退出vi

(3)光标移动

[Esc]->h(←)   j(↓)   k(↑) l(→)

[Esc]->$ 光标移动到本行行尾

[Esc]->0 光标移动到本行行首

[Esc]->G 光标移动到文件末行

[Esc]->1G或gg 光标移动到文件首行

[Esc]->nG 光标移动到指定的n行

[Esc]->ctrl+f 向前翻一屏

[Esc]->ctrl+b 向后翻一屏

(4)删除操作

[Esc]->x   删除光标所在处的字符

[Esc]->dw 删除一个单词

[Esc]->dd 删除光标所在行

[Esc]->5dd 删除从当前行开始的5行文本

   d$ 删除光标所在处到行尾的所有字符。

(5)拷贝粘贴

[Esc]->yy拷贝光标所在行到编辑缓冲区

[Esc]->p 将编辑缓冲区内容拷贝至光标后的行

[Esc]->5yy 拷贝自当前行开始的五行至编辑缓冲区

(6)取消操作

[Esc]->u 取消最后一次的修改

        U 取消所有操作

Ctrl+R可以恢复对使用u命令的操作

(7)末行命令

[Esc]->:set

[Esc]->:set number 显示行号

[Esc]->:set autoindent 自动缩进 

[Esc]->:set tabstop TAB键宽度

(8)查找命令

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

vi怎么保存文件名

: w /pathto/yourfile

注:当屏幕出现乱字符时候,可以先使用[ESC]进入命令状态然后按^ +l 刷新屏幕

     可以使用Ctrl+I键对屏幕进行刷新,如果在终端可以使用Ctrl+r刷新

当对屏幕上的信息进行操作时,系统没有任何反映,此时可使用Ctrl+q解脱

二、vi替换字符串

  1. 基本的替换

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

如果替换的范围较大时,在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,

例如:s/old/new/c 或s/old/new/gc

  2. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来替换 / ): /oradata/apras/替换成/user01/apras1/

  3. 删除文本中的^M
  问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M,请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
  使用命令:cat filename1 | tr -d “^V^M” > newfile;
  使用命令:sed -e “s/^V^M//” filename > outputfilename
  需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
  在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:

:%s/^V^M//

        :%s/^M$//g

  如果上述方法无用,则正确的解决办法是:

tr -d “/r” < src >dest

tr -d “/015″ dest

strings A>B

  4. 其它用法
  利用 :s 命令可以实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

  从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

VI常见问题及实用技巧
vi编译器多行删除
单行删除:1(待删除行)d

多行删除:1,10d

删除光标所在行:dd

删除光标所在行以下N行

J 合并下一行和当前行为1行。

~ 将光标所在位置的字母,改变大小写。

粘贴多行

1.光标放到第6行,输入2yy,光标放到第9行,输入p,会在第10行插入6,7行。

2.命令行方式:6,9 co 12 复制第6行--9行。到12行后面。

3.有时候不想费劲看多少行或复制大量行时,可以使用标签来代替。

光标移到起始行,输入ma

光标移到结束行,输入mb

光标移到粘贴行,输入mc

然后输入 :'a,'b co 'c 把co改成m就成剪切了。

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

vi file

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

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

:3r /etc/passwd 这是在指定的行号后面读入文件内容

另一种方法删掉文件中所有的空行及以#开始的注释行

#cat file_name | grep -v '^$' | grep -v '^#'

5.在打开一个文件编辑后才知道登录的用户对该文件没有写权,不能存盘。

vi file

:w /tmp/1 既然没法存盘,不想放弃所做的所有修改,先临时存在/tmp/1

:20,59w /tmp/1 或者仅仅把第20到59行之间的内容存盘成文件/tmp/1

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

vi file

Ctrl+G 可以显示当前所处的行号

:23,1045d 删除23到1045的所有行。

也可以在开始和结束两行中用ma,mb命令标记后用 :'a,'bd删除。

7.在整个文件或几行中在行首后行尾加一些字符串

vi file

:3,$s/^/string/在文件第三行至最后一行的行首前插入string

:%s/$/string/g 在整个文件的行尾插入string

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

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

Note:s为substitute,%表示所有行,g表示global。

8.同事编辑两个文件,在两个文件中拷贝剪贴文本

vi file1 file2

yy 同时编辑两个文件,在两个文件中拷贝剪贴文本。

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

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

:N 切换回文件1

9.替换文件的路径

:%s#/usr/bin#/bin#g 把文件中所有路径/usr/bin换成/bin

或者用

:%s//usr/bin//bin/g 在‘/'前用符号指出'/'是真的单个字符'/'

10.用vi多行注释

如果要给多行程序注释,一个笨方法就是插入 #,然后用j跳到下一行用 . 命令,重复上个命令。如果要注释几百行,

:.,+499s/^/#/g (或者 :1,499s/^/#/g

若需全文的行首出入可用如下命令

:%s/^/#/g

11.恢复文件

  vi在编辑某一个文件时,会生成一个临时文件,这个文件以 . 开头并以 .swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,该文件不会删除,我们在下次编辑时可以选择一下命令处理:
  O只读打开,不改变文件内容
  E继续编辑文件,不恢复.swp文件保存的内容
  R将恢复上次编辑以后未保存文件内容
  Q退出vi
  D删除.swp文件
  或者使用vi -r 文件名来恢复未保存的内容

 
   在同一编辑窗打开第二个文件,用:sp [filename]
     在多个编辑文件之间切换,用Ctrl+w

其他内容:

1.在vi进行文本编辑的过程中对某一行进行标记,将光标移到某一行,用命令ma。a是标记名称。

做标记后可以快速移动到此行 'a(行首)   ·a(光标处)

2. !10G光标位置,到10行。此时可以输入命令,sort 排序。

    !!ls  在当前行执行ls,输出结果作为输入内容。

本文部分内容引用自:http://rainbowbridg.itpub.net/post/23663/477445

尾巴:

1.多个文件之间复制,粘贴

2.键盘宏。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: