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.键盘宏。
命令模式:是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.键盘宏。
相关文章推荐
- 中大sicily9095 soj9095
- 为什么决定坚持写博客?
- XML的操作——JAXB进行Java对象和XML之间的转换
- hdu 4454 Stealing a Cake
- RTL行为级仿真、综合后门级功能仿真和时序仿真
- Java虚拟机系列(三)Java内存区域概述
- 通过注册表设置环境变量
- RTX 实时操作系统简介
- Java中两种String对象创建和初始化方式比较
- 字符串匹配:KMP算法
- 教你用python写游戏~
- Kaizen——英语学习小技巧之六
- windows下安装cygwin但是执行ssh localhost时出错,求解!
- 手机也能DIY!摩托罗拉启动模块化手机计划
- ffmpeg subtitle example
- 相声段子:求爱总动员
- 基于s5pv210嵌入式linux使用其他动态、静态库文件程序的交叉编译
- allegro 不显示铺铜
- 关于Cadence16.5和Cadence15.5共存的安装方法
- CSS margin值的設定