vi入门
1.1 三种模式
命令模式,编辑模式,末行模式。
切换方式:
命令模式→ i、a、o →编辑模式(I、A、O)编辑模式→ Esc →命令模式,命令模式→ :→末行模式。
1.2.功能
命令模式(Command Mode):控制光标移动,删除字符,段落复制,等其它功能。
编辑模式(Insert Mode): 新增文字及修改文字。
末行模式(Last Line Mode):保存文件,离开vi,以及其他设置。
1.21 命令模式(1)
基本编辑指令
x :删除光标所在处的字符
X :删除光标前的字符
dd :删除光标所在行,*dd从光标所在行向下删除*行(3dd)
D :删除光标所在处到行尾
s :删除光标所在字符,并进入输入模式.
S :删除光标所在的列,并进入输入模式.
r :取代光标处的一个字符
R :从光标处向后替换,按Esc结束
u :取消上步的操作
U :取消目前的所有操作
yy :复制光标所在行
p :将复制的内容放在光标所在行的下行
v :字符反白选中显示(配合d、y删除与复制操作)
V :行反白选中显示(配合d、y删除与复制操作)
1.22.命令模式(2)
光标移动指令-1
0 :移动到光标所在列的最前面 [Home]
$ :移动到光标所在列的最後面 [End]
gg :将光标移动到文章的首行
G :将光标移动到文章的尾行
w或W :将光标移动到下一单词
h :将光标向左移动一格
l :将光标向右移动一格
j :将光标向下移动一格
k :将光标向上移动一格
H :移动到视窗的第一列
M :移动到视窗的中间列
L :移动到视窗的最後列
b :移动到前一字的第一个字母
w :移动到下一字的第一个字母
e :移动到下个字的最後一个字母
^ :移动到光标所在列的第一个非空白字元
1.23 命令模式(3)
l光标移动指令-2
fx :往右移动到 x 字元上
Fx :往左移动到 x 字元上
tx :往右移动到 x 字元前
Tx :往左移动到 x 字元前
; 配合 fx 使用,正方向重复一次
, :配合 fx 使用,反方向重复一次
/* :往右移动到有*的地方,*为任意字符,可使用转义字符
?* :往左移动到有*的地方,*为任意字符,可为单词数字
n :配合 /* 使用,正方向重复一次
N :配合 /* 使用,反方向重复一次
1.24 命令模式(4)
l光标移动指令-3
n- 减号移动到上一列的第一个非空白字元前面加上数字可以指定移动到以上 n 列.例如:4-
n+ 加号移动到下一列的第一个非空白字元前面加上数字可以指定移动到以下 n 列.例如:4+
nG 直接用数字 n 加上大写 G 移动到第 n 列
n( 左括号移动到句子的最前面句子是以前面加上数字可以指定往前移动 n 个句子 ! . ? 三种符号来界定
n) 右括号移动到下个句子的最前面前面加上数字可以指定往後移动 n 个句子 ! . ? 三种符号来界定
n{ 左括弧移动到段落的最前面 段落是以段落间的空白列界定
n} 前面加上数字可以指定往前移动 n 个段落右括弧移动到下个段落的最前面前面加上数字可以
1.25 命令模式(5)
[CTRL][d] 向下半页[PageDown]
[CTRL][f] 向下一页
1.3 末行模式
e :创建新文件(e file.sh)
n :加载新文件(n file.sh)
w :保存文件
q :结束编辑并退出
wq :保存退出
! :强行操作(空格之后加上Unix命令,可以操作其它系统命令)
w! :强行保存文件
q! :强行退出,不存档而要放弃编辑过的文件
wq! :强行保存并退出(x都有此功能)
set nu :显示行号
set nonu :不显示行号
1.4其他内容
:1,$s/^/*/ 在文件的第一行至最后一行的行首插入*(任意字符)
:3,$s/^/*/ 在文件的第三行至最后一行的行首插入*(任意字符)
:s/$/*/g 在整个文件每一行的行尾添加“some string”。
:s/*/*/g 在整个文件中替换前者*替换后者*
:3,7s/*/*/ 仅替换文件中的第3行到第7行中的*
注意: 其中s为substitute(代替),%表示所有行,g表示global。
/* / :搜索功能,*代表任意字符串。(/<br>/)
正则表达式:1,$s/被替换内容/替换内容/g。(1,$s/<br \/>/\r/g)
1.5搜索及替换命令
/pattern: 从光标开始处向文件尾搜索pattern
?pattern: 从光标开始处向文件首搜索pattern
n: 在同一方向重复上一次搜索命令
N: 在反方向上重复上一次搜索命令
:s/p1/p2/g: 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 将文件中所有p1均用p2替换
选项设置
all: 列出所有选项设置情况
term: 设置终端类型
ignorance: 在搜索中忽略大小写
list: 显示制表位(Ctrl+I)和行尾标志($)
number: 显示行号
report: 显示由面向行的命令修改过的数目
terse: 显示简短的警告信息
warn: 在转到别的文件时若没保存当前文件则显示NO write信息
nomagic: 允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan: 禁止vi在搜索到达文件两端时,又从另一端开始
mesg: 允许vi显示其他用户用write写到自己终端上的信息
最后行方式命令
:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d: 将 n1行到n2行之间的内容删除
:w: 保存当前文件
:e filename: 打开文件filename进行编辑
:x: 保存当前文件并退出
:q: 退出vi
:q!: 不保存文件并退出vi
:!command: 执行shell命令command
:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之,
若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command: 将命令command的输出结果放到当前行