Linux基础篇学习——vi,vim交互式文本编辑工具
Linux文本编辑工具
vi,vim 交互式的文本编辑工具
Vi(Visual interface可视化接口)
Vim是Vi的增强版(Visual interface Improved)
系统自带教程:vimtutor
sed 非交互式的流处理文本编辑工具
sed -i ‘s/b/a/g’ filname 将文本中的b改为a忽略大小写
linux文本处理工具vi,vim,Emacs很多,为什么使用vi,vim?
1.类UNXI系统内建vi文本编辑器
2.程序调用(crontab, visudo, edquota)
3.具有程序编辑的能力,以颜色辨别语法的正确性
4.程序简单,速度快
vim模式及模式之间的切换
命令模式,输入模式,末行模式
命令模式----->输入模式 i,I,O,o,A,a
命令模式----->末行模式 :
输入/末行模式----->命令模式 Esc
命令模式
操作 | 操作键 | 功能 |
---|---|---|
光标方向移动 | k 或 ↑ | 上 |
j 或 ↓ | 下 | |
h 或 ← | 左 | |
l 或 → | 右 | |
翻页 | Page Down 或 Ctrl+F | 上翻一页 |
Page Up 或 Ctrl+B | 下翻一页 | |
行内快速跳转 | Home 或 0 | 跳转至绝对行首 |
^ | 跳转至行首第一个非空白字符 | |
End 或 $ | 跳转至绝对行尾 | |
行间快速跳转 | 1G 或 gg | 跳转至文件的行首 |
G | 跳转至文件的末行尾 | |
#G | 跳转至文件中的第#行 | |
删除 | x 或 Delete | 删除光标处的单个字符 |
dd | 删除当前光标所在行 | |
#dd | 删除从光标处开始的#行 | |
d^ | 删除当前光标处到行首的所有字符 | |
d$ | 删除当前光标处到行尾的所有字符 | |
复制 | yy | 复制当前行整行的内容到粘贴板 |
#yy | 复制从光标处开始的#行内容 | |
粘贴 | p | 粘贴到光标处之后 |
P | 粘贴到光标处之前 | |
查询 | /word | 自上而下查找字符串word |
?word | 自下而上查找字符串word | |
n | 与查询的方向一致 | |
N | 与查询的方向相反 | |
保存退出 | zz |
输入模式
功能 | 命令 | 备注 |
---|---|---|
插入 (insert) | i | 在光标所在位置的前面插入 |
I | 在光标所在行的行首插入(如果行首有空格则在空格之后插入) | |
新增 (append) | a | 在光标所在位置之后新增 |
A | 在光标所在行的行尾新增(如果行尾有空格则在空格之后插入) | |
开始 (open) | o | 在光标所在行的下面重新开始一行 |
O | 在光标所在行的上面重新开始一行 |
末行模式
功能 | 命令 | 备注 |
---|---|---|
保存文件 | :w | |
:w! | 强制保存 | |
:w /tmp/newfile | 另存为其他文件 | |
退出 | :q | |
:q! | 放弃对文件内容的修改强制退出 | |
保存并退出 | :wq | |
:wq! | 强制写入并退出 | |
行号显示 | :set nu | 显示行号 |
:set nonu | 取消显示行号 | |
打开其他文件 | :e /tmp/filename | 打开文件进行编辑 |
:r /etc/passwd | 在当前文件中读入其他文件 | |
替换 | : s /old/new | 将当前行中查找到第一个old替换为new |
: s /old/new/g | 将当前行中查找到所有old替换为new | |
:2,5 s /old/new | 将第2-5行的第一个old替换为new | |
:2,5 s /old/new/g | 将第2-5行的所有old替换为new | |
:% s /old/new/ | 将全文的old替换为new | |
: s /old/new/c | 对每个替换动作提示用户确认 |
1.打开文件
vim打开后光标所在位置为上一次退出时光标所在位置
打开文件并定位于第#行 vim +# filename
打开文件并定位于最后一行 vim + filename
打开文件,定位至第一次被PATTERN匹配到的行的行首 vim +/PATTERN filename
从上一次光标所在位置开始匹配
2.关闭文件
模式 | 命令 | 备注 |
---|---|---|
末行模式 | :q | 退出 |
:wq | 保存退出 | |
q! | 强制退出 | |
w | 保存 | |
:w! | 强制保存 | |
:wq! | 强制保存退出 | |
命令模式 | ZZ | 保存退出 |
3.移动光标
命令模式
操作 | 命令 | 备注 |
---|---|---|
逐字符移动 | k 或 ↑ | 上 |
j 或 ↓ | 下 | |
h 或 ← | 左 | |
l 或 → | 右 | |
以单词为单位移动 | w | 移到下一个单词的词首 |
#w | 移动#个单词 | |
e | 跳至当前或下一个单词的词尾 | |
b | 跳至当前或上一个单词的词首 | |
行内跳转 | 0 | 绝对行首 |
^ | 行首第一个非空白字符 | |
$ | 绝对行尾 | |
行间跳转 | #G | 跳转到第#行 |
G | 最后一行 |
末行模式
操作 | 命令 |
---|---|
行间跳转 | 直接输入行号,Enter |
4.翻屏
模式 | 命令 | 备注 |
---|---|---|
命令模式 | Page Down 或 Ctrl+F | 上翻一屏 |
Page Up 或 Ctrl+B | 下翻一屏 |
5.删除
命令模式
操作 | 命令 | 备注 |
---|---|---|
删除单个字符 | x 或 Delete | 删除光标所在处的单个字符 |
#x | 删除光标所在处及向后共#个字符 | |
删除命令 | dd | 删除当前光标所在行 |
#dd | 删除从光标处开始的#行 | |
d^ | 删除当前光标处到行首的所有字符 | |
d$ | 删除当前光标处到行尾的所有字符 | |
删除d和跳转w组合 | dw | 删除光标所在位置到下一个单词词首所有字符 |
#dw | 删除当前光标所在处及向后第#个单词词首所有字符 | |
删除d和跳转e组合 | de | 删除光标所在位置到下一个单词词尾所有字符 |
#de | 删除当前光标所在处及向后第#个单词词尾所有字符 | |
删除d和跳转b组合 | db | 删除光标所在位置到当前单词或上一个单词词首所有字符 |
#db | 删除当前光标所在处及向前第#个单词词首所有字符 |
6.粘贴
p 粘贴到光标所在行的下方
P 粘贴到光标所在行的上方
如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面p或前面P
7.复制
命令模式
yy 复制当前行
yw (y#w,ye,y#e,yb,y#b) 复制光标当前位置到下个单词词首内容
y#G 复制当前位置当#行处的所有内容
末行模式
StartADD,EndADDy 复制StartADD到EndADDd位置的所有行
:10,15d
复制10到15行所有内容:+#y
复制当前位置向下#行的行内容
8.修改
先删除再输入
9.替换
r 单字符替换,会替换光标选中字符
R 替换模式,可以做字符替换
10.撤销操作
u 撤销前一次编辑操作
#u 直接撤销#次操作
Ctrl+r 撤销最近一次撤销操作
11.重复前一次编辑操作
. 重复前一次编辑操作
比如上一次dd删除了一行,现在输入.就可以重复dd删除行的操作
12.可视化操作
命令模式
v 按字符选取,键盘控制光标划过的字符被选取
V 按行选取,键盘控制光标划过的行被选取
Ctrl+v 按块选取,键盘控制光标划过的块被选取(结合Backspace使用)
13.查找
末行模式
/PATTERN 从当前位置向后查找
?PATTERN 从当前位置向前查找
n 向下查找
N 向上查找
14.查找并替换
在末行模式下使用s命令
% 全文 1,$也表示全文
g 表示全局替换
i 表示忽略大小写
功能 | 命令 | 备注 |
---|---|---|
替换 | : s /old/new | 将当前行中查找到第一个old替换为new |
: s /old/new/g | 将当前行中查找到所有old替换为new | |
:2,5 s /old/new | 将第2-5行的第一个old替换为new | |
:2,5 s /old/new/g | 将第2-5行的所有old替换为new | |
:% s /old/new/ | 将全文的old替换为new | |
: s /old/new/c | 对每个替换动作提示用户确认 |
15.与shell交互
末行模式
!command
! ls /etc/
会列出/ect目录下所有文件及目录,按enter后回到vim编辑状态
16.高级操作
末行模式
功能 | 命令 | 备注 |
---|---|---|
显示或取消行号 | :set nu | 显示行号 |
:set nonu | 取消显示行号 | |
显示忽略或区分字符大小写 | set ic | 忽略大小写 |
set noic | 区分大小写 | |
设定自动缩进 | set ai | 自动缩进 |
set noai | 取消自动缩进 | |
查找到的文本高亮或取消高亮显示 | set hlsearch | 高亮显示搜索到的文本 |
set nohlsearch | 取消高亮显示搜索到的文本 | |
语法高亮 | syntax on | 打开语法高亮显示 |
syntax off | 关闭语法高亮显示 |
17.vim配置文件
全局vim配置文件 /etc/vimrc
个人vim配置文件 /root/.vimrc
vim末行模式使用过的命令保存位置 /root/.viminfo
[[email protected] ~]# echo "set nu" >> /root/.vimrc ;root用户用vim打开文件时,显示行号
练习
1.向后搜索字符串stream /stream
2.向前搜索字符串uplook ?uplook
3.复制10行然后粘贴 10yy --->p
4.将光标移到第55行 55G
5.将光标移到最末行 G
6.删除共20行 20dd
7.恢复前一步的操作 u
8.将光标移到行首 Home 或 0 或 ^
9.将光标移到行尾 End 或 $
10.将从第10行到第50行的内容写入/back/file1 :10,50w /back/file1
11.将从当前行开始,总共20行的内容存入/back/file2 :.,+19w /back/file2
12.读取/etc/conf/hello.txt文件的内容插入当前行后面 :r /etc/conf/hello.txt
13.替换第20行到第80行中的所有httpd为bind :20,80 s/httpd/bind/g
14.替换文中全部的root为admin :% s/root/admin/
15.在每一行的行首插入字符串new :% s/^/new/
16.在第10行到第50行的行尾插入字符串new :10,50 s/$/new/
17.让vi显示每一行的行号 :set nu