vi

vi的基本概念
Command mode功能键列表
Linux shell vi 常操作[更精简]
Shell

vi的基本概念 http://www.cnblogs.com/harryguo/archive/2008/01/08/1030360.html
基本上vi可分为三种操作状态,分别是命令模式(Command mode)、插入模式(Insert mode)和底线命令模式(Last line mode),各模式的功能区分如下:
1. Comand mode:控制屏幕光标的移动,字符或光标的删除,移动复制某区段及进入Insert mode下,或者到Last line mode。
2. Insert mode:唯有在Insert mode下,才可做文字数据输入,按Esc等可回到Comand mode。
3. Last line mode:将储存文件或离开编辑器,也可设置编辑环境,如寻找字符串、列出行号等
不过可以把vi简化成两个模式,即是将Last line mode也算入Command mode,把vi分成Command 和Insert mode。

Comand mode模式下:     insert,i,a,o
寻找字符串:/ + n(next)
到文件末尾:shift + g
删除一个字符:x Esc
删除一行:d   :

vi的基本操作
•进入vi
在系统提示符号输入vi及文件名称后,即可进入vi全屏幕编辑画面:
$ vi testfile
有一点要特别注意,就是您进入vi之后是处于“Command mode”下,您要切换到Insert mode才能输入文字。初次用vi的用户都会想先用上下左右键移动光标,结果电脑一直叫,把自己气个半死,
所以进入vi后,先不要乱动,转换入Insert后再说。

•切换至Insert mode编辑文件
在Command mode下按‘i’、‘a’或‘o’三键就可进入Insert mode。这时候您就可以开始输入文字了。
i: 插入,从目前光标所在之处插入所输入的文字。
a: 增加,目前光标所在的下一个字开始输入文字。
o: 插入新的一行,从行首开始输入文字。
•Insert的切换→Command mode,按Esc键
您目前处于Insert mode,您就只能一直打字。假如您发现打错字了,想用光标键往回移动,将该字删除,就要按ESC键转换回Command mode,再删除文字。
•离开vi及存文件
在Command mode下,可按冒号“:”键入入Last line mode,例如:
:w filename (输入“w filename”,将文章存入指定的文件名filename)
:wq (输入“wq”,因为进入之时已经指定文件名testfile,所以会写入testfile并离开vi)
:q! (输入“q!”,强制离开并放弃编辑的文件)

Command mode功能键列表
在介绍command mode指令的时后,指令后面加上“常用”字眼的功能键,表示比较常用的vi指令,请读者您一定要学会、记住。
(1)I、a、o切换进入Insert mode。[超级常用]

(2)移动光标
vi可以直接用键盘上的光标键来上下左右移动,但正规的vi是用小写英文字母
h、j、k、l,分别控制光标左、下、上、右移一格。
按Ctrl+B:屏幕往后移动一页。[常用]
按Ctrl+F:屏幕往前移动一页。[常用]
按Ctrl+U:屏幕往后移动半页。
按Ctrl+D:屏幕往前移动半页。
按 0 (数字零):移动文章的开头。[常用]
按 G:移动到文章的最后一行开头。[常用]
按 w:光标跳到下个word的开头。[常用]
按 e:光标跳到下个word的字尾。
按 b:光标回到上个word的开头。
按 $:移到光标所在行的行尾。[常用]
按 ^:移到该行第一个非空白的字符。
按 0:移到该行的开头位置。[常用]
按 #:移到该行的第#个位置,例:51、121。[常用] 有待测试?

(3)删除文字
x:每按一次删除光标所在位置的后面一个字符。[超常用] Soraris 是所在位置字符。
#x:例如,6x 表删除光标所在位置的后面6个字符。[常用]
X:大字的X,每按一次删除光标所在位置的前面一个字符。
#X:例如,20X 表删除光标所在位置的前面20个字符。
dd:删除光标所在行。[超常用] => D
#dd:例如,6dd表删除从光标所在的该行往下数6行之文字。[常用]

(4)复制
yw:将光标所在处到字尾的字符复制到缓冲区中。
(想在和#x、#X的功能相反)
p:将缓冲区内的字符粘贴到光标所在位置(指令‘yw’与‘p必须搭配使用)。
yy:复制光标所在行。[超常用]
p:复制单行到您想粘贴之处。(指令‘yy’与‘p’必须搭配使用)
#yy:如:6yy表示拷贝从光标所在的该行往下数6行之文字。[常用]
p:复制多行到您想粘贴之处。(指令‘#yy’与‘p’必须搭配使用)
“ayy:将复制行放入buffer a, vi提供buffer功能,可将常用的数据存在buffer
“ap:将放在buffer a的数据粘贴。
“b3yy:将三行数据存入buffer b。
“b3p:将存在buffer b的资料粘贴

(5)取代
r: 取代光标所在处的字符:[常用]
R:取代字符直到按Esc为止。

(6)复原(undo)上一个指令
u:假如您误操作一个指令,可以马上按u,回复到上一个操作。[超常用]
可以重复执行上一次的指令。

(7)更改
cw:更改光标所在处的字到字尾$处。
c#w:例如,c3w代表更改3个字。

(8)跳至指定行
Ctrl+G:列出光标所在行的行号。
#G:例如,15G,表示移动光标至文章的第15行行首。[常用]

Last line mode下指令简介
读者您要使用Last line mode之前,请记得先按Esc键确定您已经处于Command mode下后,再按冒号“:”或“/”或“?”三键的其中一键进入Last line mode。
1.列出行号 :set nu
提示符号“:”前 输入“set nu”后,会在文章的每一行前面列出行号。

2.跳到文章的某一行 :15[Enter]
#:井号代表一个数字,在Last line mode提示符号“:”前输入数字,再按Enter就会跳到该行了,如:15[Enter]就会跳到文章的第15行。[常用]

3.寻找字符串 ? + n 往下寻找 :? + n 往前寻找
/关键字:先按/,再输入您想寻找的字,如果第一次找的关键字不是您相尽可能的,可以一直按n会往下寻找到您要的关键字为止。
?关键字:先按?,再输入您想寻找的字,如果第一次找的关键字不是您想要的,可以按n会往前寻找到您要的关键字为止。

4.取代字符串
1, s / s t r i n g / r e p l a e / g : 在 l a s t l i n e m o d e 输 入 “ 1 , s/string/replae/g:在last line mode输入“1, s/string/replae/glastlinemode1s/string/replace/g”会将全文的string字符串取代为replace字符串,其中1, s 就 是 指 搜 寻 区 间 为 文 章 从 头 至 尾 的 意 思 , g 则 是 表 示 全 部 取 代 不 必 确 认 。 s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认。 %s/string/replace/c:同样会将全文的string字符串取代为replace字符串,和上面指令不同的地方是,%s和1, sgs是相同的功能,c则是表示要替代之前必须再次确认是否取代。
1,20s/string/replace/g:将1至20行间的string替代为relpace字符串。

5.存文件
w:在last line mode提示符号“:”前按w即可将文件存起来。[超常用]
#,# w filename:如果您想摘取文章的某一段,存成另一个文件,可用这个指令#代表行号,例如30,50 w nice,将您正在编辑文章的第30~50行存成nice这个文件。

6.离开
q:按q就离开,有时如果无法离开vi,可搭配“!:强置离开vi,如“q!”
qw:一般建议离开时,搭配w一起使用,如此离开时还可存文件。[常用]

linux shell vi常操作
1.查找
/xxx(?xxx) 向下/向上查找字符串,n查找下一个,N查找上一个,如要忽略大小写::set ignorecase
gd 查找光标所在单词相同的单词,并将光标移至匹配的第一个单词处
*(#) 查找光标所在单词的下(上)一个单词, n(下一个),N(上一个)

2.快速移动光标
w(e) 移动光标到下一个单词
b 移动光标到上一个单词
0移动光标到本行最开头
^移动光标到本行字符的最开头处 同上
$移动光标到本行结尾处

H移动光标到屏幕的行首
M移动光标到屏幕的中间
L移动光标到屏幕的尾行

gg移动光标到文档行首
G移动光标题以文档行尾

` 返回上次修改的点
’ 返回上次修改的行
" 返回上次光标所在位置

3.拷贝、删除、粘贴
在vi中y是复制,d是删除,p是粘贴,其中复制与删除是与光标移动命令结合使用的。
yw 复制光标所在的单词
dw 删除光标所在的单词
y0 复制光标所在到行首的内容
d0 删除光标所在到行首的内容
y$ 复制光标所在到行尾的内容 =yw
d$ 删除光标所在到行尾的内容 =dw

dd 删除光标所在的行
yy 复制光标所在的行
D 删除从当前光标到光标所在行尾的内容

4.数字与命令
vi中数字与命令结合,一般表示重复此命令
5w(e) 光标向后移动5个单词
5yy 复制5行
5dd 删除5行
:12,24y 复制12-24行内容
:12,y 复制12行到光标所在行
:,24y 复制光标所在行到24行,(删除类似

更多连接:http://hi.baidu.com/netgreenspider/blog/item/ee9fe5f16a382803b17ec57e.html 【shell】常用命令linux下vi编辑器命令大全

Shell
http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&biw=985&bih=823&q=linux+shell+vi&aq=f&aqi=g1&aql=&oq=
Linux Shell 脚本编程专题 http://www.netemu.cn/bbs/thread-13903-1-1.html
Bash 实例,第 2 部分 http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html 注:很实用
接收自变量
$0 调用脚本名称, 1 … n 传 递 给 脚 本 的 变 量 或 参 数 , 1…n 传递给脚本的变量或参数, 1n#传递给脚本的变量数总数。
Bash编程结构
方便的条件语句 -* 运算符
$myvar 引用定义的变量 运算符总数
文件比较运算符:-e,-d,-f,-L,-r,-w,-x, -nt,-ot 后跟文件名 9
字符串比较运算符:-z,-n,=,!= 后跟字符串 4
算术比较运算符:-eq,-ne, -lt,-gt,le,ge 6

	字符串比较说明, 请一定使用双引号" " , not 引号 ' '														
		myvar = foo bar oni													
		因为如果变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常工作。													
		因为变量没放在双引号中,所以 bash 认为方括号中的自变量过多。可以用双引号将字符串自变量括起来消除该问题。请记住,如果养成将所有字符串自变量用双引号括起的习惯,将除去很多类似的编程错误。"foo bar oni" 比较 应该写成:													
															
															
															
															
															
							[ "foo bar oni" = "foo bar oni" ]								
															
	循环结构:"for"														
		注意"[" 后, "]"前,必须要有空格。 													
															
															
															
															
															
															
															
															
															
															
															
															
									    如果只引用当前工作目录中的文件(例如,如果输入 "for x in *"),则产生的文件列表将没有路径信息的前缀。						
		扩展:													
			run bash												
			./b.sh												
			. b.sh			"basename" 去除文件前面的路径信息,"dirname“文件的路径,如果是当前文件,则执行后结果为“.” 									
			. /tmp/jeanne/b.sh												
															
															
															
															
															
											$ vi b.sh a.txt				
															
															
															
															
															
															
															
											$ .  b.sh /tmp/jeanne/a.txt				
															
															
															
															
															
															
			有时需要一次引用 所有 命令行自变量。针对这种用途,bash 实现了变量 "$@",												
			它扩展成所有用空格分开的命令行参数,在"for" 循环部分中使用该变量。												
															
			$ ./a.sh hello there you silly												
															
															
															
															
															
															
															
	Shell 算术														
		使用 shell 结构来执行简单的整数运算。只需将特定的算术表达式用 "$((" 和 "))" 括起,bash 就可以计算表达式。这里有一些例子:													
		$ echo $(( 100 / 3 ))													
		$ echo $((100/3))													
		$ myvar="56"													
		$ echo $(( $myvar + 12 ))													
		68													
		$ echo $(( $myvar - $myvar ))													
		$ myvar=$(( $myvar + 1 ))													
		$ echo $myvar													
		57													
	更多的循环结构:"while" 和 "until"														
		myvar=0				myvar=0									
		while [ "$myvar" -ne 10 ]				 until [ $myvar -eq 10 ]									
		do 				 do									
		     echo $myvar				     echo $myvar									
		     myvar=$(( $myvar + 1 ))				     myvar=$(( $myvar + 1 ))									
		done				 done									
						"Until" 语句提供了与 "while" 语句相反的功能:只要特定条件为 假 ,它们就重复。									
	Case 语句														
		case "${1}" in		匹配,则执行紧接 ")" 之后的行,直到 ";;" 为止,然后 bash 继续执行结束符 "esac" 之后的行											
		   a)													
		      echo "a"													
		     ;;													
		   b)													
		      echo "b"													
		    exit													
		     ;;													
		    *)													
		     echo "other"													
		      exit													
		      ;;													
		esac													
	函数与名称空间														
															
	名称空间														
		在 bash 中,每当在函数内部创建环境变量,就将其添加到 全局名称空间。这意味着,该变量将重写函数之外的全局变量,并在函数退出之后继续存在:													
		 myvar="hello"			输出:				 myvar="hello" 				输出:		
		 myfunc() {				one			 myfunc() {					one	
		     myvar="one two three"				two			     local x					two	
		     for x in $myvar				three			     local myvar="one two three"					three	
		     do				one two three three			     for x in $myvar					hello three	?????x's value
		         echo $x			局部变量x在函数退出之后继续有效。				     do						
		     done							         echo $x				解决此问题的最好方法是通过使用 "local" 命令,在一开始就预防影响全局变量的可能性。		
		 }							     done				当使用 "local" 在函数内部创建变量时,将把它们放在局部名称空间中,并且不会影响任何全局变量。		
		 myfunc							 } 				这里演示了如何实现上述代码,以便不重写全局变量:		
		 echo $myvar $x							 myfunc 				此函数不影响任何全局变量,鼓励您用这种方式设计所有的函数。只有在明确希望要修改全局变量时,才 不应该使用 "local"。		
									 echo $myvar $x						

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值