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/g 将全文的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

[root@libaoliang ~]# 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/g
15.在每一行的行首插入字符串new :% s/^/new/
16.在第10行到第50行的行尾插入字符串new :10,50 s/$/new/
17.让vi显示每一行的行号 :set nu

发布了43 篇原创文章 · 获赞 30 · 访问量 5940

猜你喜欢

转载自blog.csdn.net/qq_42049496/article/details/102754686