《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记
学习笔记,内容基础,适合初学者。
阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)
《Unix & Linux 大学教程》 - 第一、二章 学习笔记 Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记 Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记 GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记 Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记 文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记 shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记 使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记 使用shell:初始化文件
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器 (二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器 (三)
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 附录F 时区与24小时制时间
第二十二章:vi文本编辑器(二)
vi中的句子定义:
以句号、逗号、问号或者感叹号结尾,后面至少跟着两个空格或一个新行字符
移动光标
按字符移动
h或<left>或<backspace>:左
j或<down>:下
k或<up>:上
l或<right>或<space>:右
按行移动
-:光标移动到上一行的开头
+或<return>:光标移动到下一行的开头
0:将光标移动到当前行的开头
$:将光标移动到当前行的末尾
^:将光标移动到当前行的第一个非空格/制表符的字符上
按单词移动
w:将光标移动到下一个单词词首
e:将光标移动到下一个单词词尾
b:将光标移动到上一个单词词首
W:同w,忽略标点
E:同e,忽略标点
B:同b,忽略标点
大范围移动
H:将光标移动到屏幕顶部
M:将光标移动到屏幕中间
L:将光标移动到屏幕的最后一行
数字+命令=重复操作数字次命令
50j (下移50行)
在编辑缓冲区中移动
^F(forward):向下(前)移动一屏
^B(backward):向上(后)移动一屏
^D:向下移动半屏
^U:向上移动半屏
10^B (向上移动十屏)
使用行号
nG 同 :n:跳转到第n行
gg 同 1G 同 :1:跳转到第一行
G 同 :$ :跳转到最后一行
跳转到前一位置
``(两个反引号):返回前一个位置
''(两个单引号):返回前一个位置,跳转到行开头
命名行:m+一个字母
跳转到此和行
`+行名
'+行名
ma (命名当前行为a)
`a (跳转到名为a的行)
搜索模式
(/斜线和?问号命令)
和less一样
/表示向后搜索
?表示向前搜索
n查找下一个结果
N查找上一个结果
插入文本
i:改变到输入模式 - 在当前光标位置前插入数据
a:改变到输入模式 - 在当前光标位置后插入数据
I 同 ^i:改变到输入模式 - 在当前行开头处插入数据
A 同 ^a:改变到输入模式 - 在当前行末尾处插入数据
o:改变到输入模式 - 在当前行下面插入一行
O:改变到输入模式 - 在当前行上面插入一行
修改文本
r:替换一个字符
R:替换(按<ESC>退出替换)
s:删除当前字符并进入编辑模式(按<ESC>退出编辑)
S 同 cc:删除当前行,并进入编辑模式
C:删除从光标当前位置到行尾的所有字符,并进入编辑模式
c+移动光标的命令
cw:删除当前位置到单词末尾的字符,并进入编辑模式
c0:删除当前位置到行开头的所有字符,并进入编辑模式
c^:删除当前位置到行开头的非空白字符所有字符,并进入编辑模式
替换文本
:s/pattern/replace/cg
s(substitute,替换):替换
c(confirm,确认):替换前需要用户确认
g(global,全局):对当前行进行全局替换
替换指定行文本
:s/pattern/replace/ 替换当前行
:lines/pattern/replace/ 替换指定行
:line,lines/pattern/replace/ 替换指定范围行
:%s/pattern/replace/ 替换所有行
.(点号):当前行
$:最后一行
%:编辑缓冲区的所有行
:12s/UNIX/Linux/ 将第12行UNIX替换为Linux
:12,15s/UNIX/Linux/ 将第12行至第15行UNIX替换为Linux
:.,$s/UNIX/Linux/
:1,.s/UNIX/Linux/
:1,$s/UNIX/Linux/ 同 :%s/UNIX/Linux/
删除文本
x:删除当前光标处的字符
X:删除光标左边的字符
D:删除光标到本行末尾的字符
dmove:删除光标到move位置的字符
dd:删除当前行
:lined:删除指定行
:line,lined:删除指定范围的行
dG:删除当前行到编辑缓冲区末尾的所有行
dgg 或 d1G:删除从当前行到编辑缓冲区开头的所有行
(G、gg、1G见上面的使用行号节)
:50,55d:删除第50-55行
撤销或重复改变
u:撤销上一命令对编辑缓冲区的修改
U:恢复当前行,一次将当前行所有改变都恢复(光标离开当前行之前才有效)
.:重复上一命令对编辑缓冲区的修改(可以利用它复制文本)
(点号命令的特殊情况见下节的恢复编号缓冲区内容)
比如现在处于命令模式,然后输入
iTest<ESC>
这时候在当前位置插入了Test这几个字符,然后将光标移动到下一个要插入字符的位置,然后按.,此时就会再次插入Test(重复上次的iTest<ESC>,可以使用u进行撤销)
移动(剪切)文本
无名缓冲区:在此为上一次的删除保存一份副本
p:将无名缓冲区内容保存插入到光标右边
P:将无名缓冲区内容保存插入到光标左边
扩展
xp:调换两个字符
deep:调换两个单词
ddp:调换两行
恢复删除
编号缓冲区:vi将删除的行保存到一个特殊的存储区中,共有9个这样的缓冲区,编号为1-9(删除行的一部分,并不会保存到这里)
使用方法
"数字p:恢复此数字编号缓冲区中内容,插入当前行下面
"数字P:恢复此数字编号缓冲区中内容,插入当前行上面
(p,put)
在此时使用.命令时,数字会自动加一
也就是说
"1p.
相当于
"1p"2p
复制文本
在不删除文本的情况下将文本复制到无名缓冲区时,称接出(yank)了文本
与d和dd工作方式相同
yw:接出一个单词
y10w:接出10个单词
yb:向后接出一个单词
y2):接出两个句子
之后使用p或P插入文本
Y与D工作方式不同
Y接出整行
D删除从当前字符到这行末尾的字符,y$与此类似
改变字母大小写
~:改变光标所在字母的大小写(大写变小写,小写变大写),并且光标右移一个位置
(部分vi的~不会越过行末尾,部分vi可以跨行)
转贴请保留以下链接
本人blog地址