1 文本编辑工具之VIM
1.1 vi和vim简介
在Linux中我们经常编辑修改文本文件,即由ASCII, Unicode 或其它编码的纯文字的文件。
文本编辑种类:
- 全屏编辑器:nano(字符工具), gedit(图形化工具),vi,vim
- 行编辑器:sed
vi 编辑器:
Visual editor,文本编辑器,是 Linux 必备工具之一,功能强大,学习曲线较陡峭,学习难度大
vim 编辑器:
VIsual editor iMproved ,和 vi 使用方法一致,但功能更为强大,不是必备软件
1.2 使用 vim 初步
1.2.1 vim 命令格式
vim [选项]... 文件...
+# 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN 让光标处于第一个被PATTERN匹配到的行行首
-b file 二进制方式打开文件
-d file1 file2… 比较多个文件,相当于 vimdiff
-m file 只读打开文件
-e file 直接进入ex模式,相当于执行ex file
-y file Easy mode (like "evim", modeless),直接可以操作文件,
:wq|q! 保存和不保存退出
说明:
- 如果该文件存在,文件被打开并显示内容
- 如果该文件不存在,当编辑后第一次存盘时创建它
1.2.2 三种主要模式和转换
vim 是 一个模式编辑器,击键行为是依赖于 vim的 的“模式”
三种常见模式:
- 命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本
- 插入(Insert)或编辑模式:用于修改文本
- 扩展命令(extended command )或命令(末)行模式:保存,退出等
模式转换
命令模式 --> 插入模式
i insert, 在光标所在处输入
I 在当前光标所在行的行首输入
a append, 在光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
- 插入模式 --- ESC-----> 命令模式
- 命令模式 ---- : ----> 扩展命令模式
- 扩展命令模式 ----ESC,enter----> 命令模式
案例: 插入颜色字符
切换至插入模式
按ctrl+v+[ 三个键,显示^[
后续输入颜色信息,如:^[[1;32mhello^[[0m
切换至扩展命令模式,保存退出
cat 文件可以看到下面显示
案例:


1.3 扩展命令模式
按“:”进入Ex模式 ,创建一个命令提示符: 处于底部的屏幕左侧
1.3.1 扩展命令模式基本命令
w:写(存)磁盘文件
wq:写入并退出
x:写入并退出
X:加密
q:退出
q!:不存盘退出,即使更改都将丢失
r:filename 读文件内容到当前文件中
w:filename 将当前文件内容写入另一个文件
!command:执行命令
r!command:读入命令的输出
1.3.2 地址定界
格式:
:start_pos,end_pos CMD

1.3.2.2 地址定界后跟一个编辑命令
- d #删除
- y #复制
- w file #将范围内的行另存至指定文件中
- r file #在指定位置插入指定文件中的所有内容
1.3.3 查找并替换
格式:
s/要查找的内容/替换为的内容/修饰符
说明:
- 要查找的内容:可使用基末正则表达式模式
- 替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前 面查找时查找到的整个内容
修饰符:
- i #忽略大小写
- g #全局替换,默认情况下,每一行只替换第一次出现
- gc #全局替换,每次替换前询问
查找替换中的分隔符/可替换为其它字符,如:#,@
案例:
s@/etc@/var@g
s#/boot#/#i
:15,19 s/^/#/ 将文件中的第15行到第19行的行首添加#符号
:15,19 s/^#// 将文件中的第15行到第19行的行首#符号删除
:15,19 s/$/@/ 将文件中的第15行到第19行的行尾添加@符号
:15,19 s/@$// 将文件中的第15行到第19行的行尾@符号删除
1.3.4 定制vim的工作特性
扩展命令模式的配置只是对当前vim进程有效,可将配置存放在文件中持久保存
配置文件:
/etc/vimrc:全局
~/.vimrc:个人
1.3.4.1 行号
- 显示:set number,简写 set nu
- 取消显示:set nonumber,简写 set nonu
1.3.4.2 忽略字符的大小写
- 启用:set ignorecase,简写 set ic
- 不忽略:set noic
1.3.4.3 自动缩进
- 启用:set autoindent,简写 set ai
- 禁用:set noai
1.3.4.4 复制保留格式
- 启用:set paste
- 禁用:set nopaste
1.3.4.5 显示Tab和换行符 ^I 和$显示
- 启用:set list
- 禁用:set nolist
1.3.4.6 高亮搜索
- 启用:set hlsearch
- 禁用:set nohlsearch 简写:nohl
1.3.4.7 语法高亮
- 启用:syntax on
- 禁用:syntax off
1.3.4.8 文件格式
- 启用windows格式:set fileformat=dos
- 启用unix格式:set fileformat=unix
- 简写 set ff=dos|unix
1.3.4.9 Tab 用空格代替
- 启用:set expandtab 默认为8个空格代替Tab
- 禁用:set noexpandtab
- 简写:set et
1.3.4.10 Tab用指定空格的个数代替
- 启用:set tabstop=# 指定#个空格代替Tab
- 简写:set ts=4
1.3.4.11 设置文本宽度
- set textwidth=65 (vim only)
- set wrapmargin=15
1.3.4.12 设置光标所在行的标识线
- 启用:set cursorline,简写 set cul
- 禁用:set nocursorline
1.3.4.13 加密
- 启用: set key=password
- 禁用: set key=
1.3.4.14 了解更多
set 帮助
- :help option-list
- :set or :set all
1.4 命令模式
命令模式,又称为Normal模式,功能强大,只是此模式输入指令并在屏幕上显示,所以需要记忆大量的快捷按键才能更好的使用
1.4.1 退出VIM
- ZZ 保存退出
- ZQ 不保存退出
1.4.2 光标跳转字符间跳转:
- h: 左 L: 右 j: 下 k: 上
- #COMMAND:跳转由#指定的个数的字符
单词间跳转:
- w:下一个单词的词首
- e:当前或下一单词的词尾
- b:当前或前一个单词的词首
- #COMMAND:由#指定一次跳转的单词数
当前页跳转:
- H:页首 M:页中间行 L:页底
- zt:将光标所在当前行移到屏幕顶端
- zz:将光标所在当前行移到屏幕中间
- zb:将光标所在当前行移到屏幕底端
行首行尾跳转:
- ^ 跳转至行首的第一个非空白字符
- 0 跳转至行首
- $ 跳转至行尾
行间移动:
- #G 或者扩展命令模式下 :# 跳转至由第#行
- G 最后一行
- 1G, gg 第一行
句间移动:
) 下一句 ( 上一句
段落间移动:
} 下一段 { 上一段
命令模式翻屏操作
- Ctrl+f 向文件尾部翻一屏
- Ctrl+b 向文件首部翻一屏
- Ctrl+d 向文件尾部翻半屏
- Ctrl+u 向文件首部翻半屏
1.4.3 字符编辑
- x 删除光标处的字符
- #x 删除光标处起始的#个字符
- xp 交换光标所在处的字符及其后面字符的位置
- ~ 转换大小写
- J 删除当前行后的换行符
1.4.4 替换命令(replace)
- r 只替换光标所在处的一个字符
- R 切换成REPLACE模式(在末行出现-- REPLACE -- 提示),按ESC回到命令模式
1.4.5 删除命令(delete)
- d 删除命令,可结合光标跳转字符,实现范围删除
- d$ 删除到行尾
- d^ 删除到非空行首
- d0 删除到行首
- #COMMANDdd: 剪切光标所在的行
- #dd 多行删除
- D:从当前光标位置一直删除到行尾,等同于d$
1.4.6 复制命令(yank)
- y 复制,行为相似于d命令
- #COMMAND
- yy:复制行
- #yy 复制多行
- Y:复制整行
1.4.7 粘贴命令(paste)
- p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
- P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
1.4.8 改变命令(change)
- c: 删除后切换成插入模式
- cc:删除当前行并输入新内容,相当于S
- C:删除当前光标到行尾,并切换成插入模式,相当于c$
1.4.9 查找
- /PATTERN:从当前光标所在处向文件尾部查找
- ?PATTERN:从当前光标所在处向文件首部查找
- n:与命令同方向
- N:与命令反方向
1.4.10 撤销更改
- u 撤销最近的更改,相当于windows中ctrl+z
- #u 撤销之前多次更改
- U 撤消光标落在这行后所有此行的更改
- Ctrl - r 重做最后的“撤消”更改,相当于windows中crtl+y
- . 重复前一个操作
- #. 重复前一个操作#次
1.5 可视化模式
在末行有”-- VISUAL -- “指示,表示在可视化模式
允许选择的文本块
- v 面向字符,-- VISUAL --
- V 面向整行,-- VISUAL LINE --
- ctrl-v 面向块,-- VISUAL BLOCK --
可视化键可用于与移动键结合使用
w ) } 箭头等
突出显示的文字可被删除,复制,变更,过滤,搜索,替换等
案例:在文件每一行的行首插入#
- 1、先将光标移动到第一行的行首
- 2、输入ctrl+v 进入可视化模式
- 3、输入 G 跳到最后1行,选中每一行的第一个字符
- 4、输入 I 切换至插入模式
- 5、输入 #
- 6、按 ESC 键
一个vim就这么多个知识点。。。。
运维的坑有点深~