Linux编程
1. vi的工作方式
三种方式:命令方式、插入方式、末行方式
命令方式:用户一进入vi就进入命令方式,在该模式中任何键入的字符都被看成vi的命令,键入后立即执行。
插入方式:当用户需要输入文本时,使用某个命令,进入插入方式,才可开始输入文本。
末行方式:在命令方式中键入:就进入末行方式,在末行方式中输入命令,例如W(写)和回车,就可将编辑的内容存入文件。
三种工作方式之间转换:
1.在操作系统提示符下键入vi ,进入命令方式。
1.命令方式 --> 插入方式,键入编辑命令,如插入命令i、 添加命令a、建立新行命令o等 。
2.命令方式 --> 末行方式,只需键入:, 每次只执行一条,执行完毕立即回到命令方式。
3.不论在什么方式,只要键入esc键,就可回到命令方式。
2.插入方式和末行方式之间不能直接切换,必须通过命令方式。
3.在命令方式,用两个ZZ (大写) 可以退出vi 。
4.在末行方式用q或q !,还可以用wq 。
2. 进入和退出vi
2.1 进入vi
1.vi [filename]
这是编辑一个新文件或编辑一个已存在文件的方法。
如果是新文件,系统会创建一个名为filename的文件。
如果你需要对一个存在的文件进行修改,系统会把文件的内容读入vi使用缓存区供你编辑,完成后用相关命令写入源文件或写入另一个新的文件。
2.vi
这是编辑一一个 新的文件的方法。
在编辑完成后必须用相关命令写入一个新的文件,杏则一切编辑的动作都无效。
进入vi后光标停留在文件的第一行行首,如希望停留在其他行,可以使用如下的命令:
vi +n [filename]: 进入vi后光标位于第n行
vi十[filename] :进入vi后光标位置为文件尾
vi +/string [filename]:进入vi后当前光标位置为字符串string所在行的首行。
2.2 退出vi
1.以原有的文件名保存编辑动作并退出。
在末行方式下退出,用以下命令:
:wq (保存并退出等价于:w 接 :q) :x
在命令方式下退出,用两个大写ZZ
即可。
2.以新文件名保存,必须进入末行方式,使用:
:w newfile (保存到新文件) :q (退出)
3.不保存所做过的一切编辑动作,在末行方式下退出:
:q!
3. vi的编辑命令
3.1 移动光标
1.行号:
vi的工作是在文本缓冲区中实现的,为了帮助用户观看, 可为文本的行设置一个行号, 放在文本的左侧(行首前) 可以用末行命令set来设置和取消:
:set number (:set nu) :set nonumber (:set nonu)
2.按字符移动:
四个带箭头的方向键:各自按方向移动一个字符k、j、h、l
:各自按上下左右移动一个字符。
3.按行移动:
home # 光标移动到本行行首 0 # 行首 ^ # 第一个非空白字符 $或end # 光标移动到本行行尾 - # 光标移动到上一行的行首 [行号]G # 跳转到指定行,不指定具体行号跳到文件的最后一行 gg # 首行
4.按字移动光标:
w和W:将光标移动到下一个字的字首
e和E:将光标移动到下一个字的字尾
b和B:将光标移动到前一个字的字首
5.按句移动光标:
(:将光标移动到上一个句子的开头
):将光标移动到下一个 句子的开头
6.屏幕滚动:
ctrl+u :将屏幕向文件头方向翻滚半屏
ctrl+d: 将屏幕向文件尾方向翻滚半屏
ctrl+b:将屏幕向文件头方向翻滚一整屏
ctrl+f :将屏幕向文件尾方向翻滚一整屏
3.2 文本操作(命令方式下)
1.文本的插入:
i:插入当前字符前。
I:插入当前行头
a:插入当前字符后
A:插入当前行尾
o:插入当前行的下一行
O:插入当前行的上一行
2.文本的删除:
x:删除光标处的字符
nx:删除光标位置起的右n个字符
X:删除光标前的字符
nX:删除光标位置前的左n个字符
dd:删除当前行
ndd:删除当前行起的n行
D或d$:删除光标起到行尾的内容
d0:删除光标起前一个字符到行首的内容
dw:删除一个单词
ndw:删除n个单词
3.恢复删除:
u: 撤销上一次的编辑动作(可多次)
U:撤销在本行所有的编辑动作
.:再次执行刚执行过的命令
4.修改文本:
c 或 c$:改变光标位置起到行尾的内容
nC:改变光标位置起的n行内容。
cc:改变当前行的内容。
ncc:改变当前行起n行的内容。
5.文本替换:
文本替换是用新的文本替换原有的文本。
命令:r和R
rx:用x字符替换光标位置的字符
nrx:用x字符替换光标位置起的n个字符
R:进入替换模式,结束后按esc回到命令模式
6.复制与粘贴:
yy 和 Y:复制当前行。
nyy 和 nY:复制当前行以下n行。
dd:剪切当前行。
ndd:剪切当前行以下n行。
p、P:粘贴在当前光标所在行下或行上。
7.移动多行:
:n1,n2 m k # 从n1行到n2行的文本移动到k行处,其中m是移动命令
8.搜索和替换:
/string:向前搜索指定字符串。
搜索时忽略大小写:set ic
?string:向后搜索指定字符串。
n,N:向前向后搜索该字符串。
:%s/oldstr/newstr/g:全文替换指定字符串
:n1,n2s/oldstr/newstr/g:在n1行到n2行的范围内替换指定字符串。
4. 定义快捷键
:map 快捷键 命令 # 定义快捷键 :unmap 快捷键 # 删除快捷键
[例1]:
# 设置ctrl+O为注释当前行: :map ^O I#<esc> # ^使用ctrl+v # 设置ctrl+D为取消当前行注释: :map ^D 0x :unmap ^O :unmap ^D