VIM
1 文本编辑工具VIM
1.1 vim 格式
vim 选项 文件
- +# 打开文件调转到第#行的行首
- +/PATTERN 让光标处于第一个被PATTERN匹配到的行行首
- -b file 二进制打开文件
- -d file1 file2 比较多个文件
- -m file 只读打开文件、
- -e file 直接竟然ex模式
- -y file
说明:
- 如果该文件存在,文件打开
- 如果文件不存在,但编辑后第一次存盘时创建
1.2 三种主要模式和转换
三种常见模式:
- 命令或普通模式:默认模式,可实现移动光标,剪切/粘贴文本
- 插入或编辑模式:修改文本
- 扩展命令或命令(末)行模式:保存,退出等
模式切换 - 命令模式–> 插入模式
i insert,光标所在处输入
I 在当前光标所在行首输入
a append,在光标所在处后面输入
A 在光标说着行的行尾输入
o 在光标所在行下方打开一个新行
O 在光标所在行上方打开一个新行
- 插入模式—ESC---->命令模式
- 命令模式—:---->扩展命令模式
- 扩展命令模式—ESC,enter—>命令模式
范例:
1 切换至插入模式
2 按ctrl+r+[ 三个键,显示^[
3 后续输入颜色信息,如^[32mhello^[[0m
4 切换至扩展命令模式,保存退出
5 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.1 地址定界格式
- # 第#行
- #,# 从左侧#起始行到右侧#结束行
- #,+# 从左侧起始行,加上右侧#行,例:2,+3 表示2到5行
- . 当前行
- $ 当前行
- . ,$-1 当前行到倒数第二行
- % 全文相当于1,$
- /pattern 从当前行往下找,至到匹配的第一行,正则表达式
- /pat1/,/pat2/ 第一次被pat1匹配的行到,第一次被pat2匹配的行
- #,/pat/ 从指定行开始到第一次被pat匹配的行
- /pat/,$ 向下第一个pat匹配的行到结尾
1.3.2.2 地址定界后跟一个命令
- d 删除
- y 复制
- w file 将范围内的行另存到文件
- r file 在指定位置插入文件的内容
1.3.3 查找并替换
格式
s/查找的内容/替换为的内容/修饰符
说明:
要查找的内容:可使用正则表达式
替换的内容:不能使用模式,但可以使用\1,\2…等后向引用符号;还可以使用&引用前面查找找到的内容
修饰符
- i 忽略大小写
- g 全局替换,默认每行只替换第一个
- gc 全局替换,每次替换前询问
查找替换的分割符可使用其他字符,如:#,@
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 简写 set nohl
1.3.4.7 语法高亮
启用:syntax on
禁用:syntax off
1.3.4.8 文件格式
启用windows格式:set fileformat=dos
启用unix格式:set fielformat=unix
简写:set ff=dos|unix
1.3.4.9 Tab 用空格代替
启用:set expandtab 默认8个空格代替
禁用:set noexpandtab
简写:set et
1.3.4.10 Tab用指定空格个数代替
启用:set tabstop=# 指定#个空格代替
简写: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.4 命令模式
命令模式又称Normal模式,需要大量快捷键才能更好的使用
1.4.1 退出VIM
ZZ 保存退出
ZQ 不保存退出
1.4.2 光标跳转
1.4.2.1 字符间跳转
- k:上
- j:下
- h:左
- l:有
- #CMD :跳转指定#个数
1.4.2.2 单词间跳转
- w:下个单词的词首
- e:当前或下个单词的词尾
- b:当前或上个单词的词首
- #CMD:指定#次数的跳转
1.4.2.3 当前页的跳转
- H:页首
- M:页中间行
- L:页底
- zt:将光标所在行移动到屏幕顶端
- zz:将光标所在行移动到屏幕中间
- zb:将光标所在行移动到屏幕低端
1.4.2.4 行首行尾跳转
- ^:跳转至行首的第一个非空字符
- 0:跳转至行首
- $:跳转至行尾
1.4.2.5 行间移动
- #G 或扩展命令模式下(:#)表示跳转至第#行
- G 最后一行
- 1G,gg 第一行
1.4.2.6 句间移动
- ) 下一句
- ( 上一句
1.4.2.7 段落间移动
- } 下一段
- { 上一段
1.4.2.8 命令模式翻页
Ctrl+f 向文件尾部翻一屏
Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
1.4.3 字符编辑
- x 删除光标处的字符
- #x 删除光标处起始的#个字符
- xp 交换光标处和后面的字符位置
- ~ 转换大小写
- J 删除当前行后的换行符
1.4.4 替换命令(replace)
- r 只替换光标处的字符
- R 切换成REPLACE模式,按ESC回到命令模式
1.4.5 删除命令(delete)
- d 删除,结合光标跳转制字符,可实现范围删除
- d$ 删除到行尾,向后删
- d^ 删除到非空行首,向前删
- d0 删除到行首,向前删
- dw 删除到下个词的词首
- de 删除到当前或下个词的词尾
- db 删除到当前或下个词的词首
- dd 删除光标所在行
- #dd 删除多行
- D 从光标处删到行尾,等同于d$
1.4.6 复制命令(yank)
- y 复制
- y$ 复制到行尾
- y0 复制到行首
- y^ 复制到非空行首
- yy 复制行
- #yy 复制多行
- Y 复制整行
1.4.7 粘贴命令(paste)
- p 如果为整行,粘贴在下方,否则粘贴在光标后面
- P 如果为整行,粘贴在上方,否则粘贴在光标前面
1.4.8 改变命令(change)
- c 删除后切换到插入模式
- c$ 删除到行尾后切换到插入模式
- c^ 删除到非空行首后切换到插入模式
- c0 删除到行首后切换到插入模式
- cc 删除整行后切换到插入模式
- #cc 删除多行后切换到插入模式
- C 删除光标到行尾后切换到插入模式
1.4.9 查找
- /PATTERN 向文件尾部查找
- ?PATTERN 向文件首部查找
- n 与命令同方向
- N 与命令反方向
1.4.10 撤销更改
- u 撤销最近的更改
- #u 撤销之前的#次更改
- U 撤销光标落在此行后所有此行的更改
- Ctrl -r 重做最后的撤销更改
- . 重复前一个操作
- #. 重复前一个操作#次
1.4.11 高级用法
<start position> <command> <end position>
常见的CMD:y复制,d删除,gU变大写,gu变小写
范例:
0y$
0 --> 先到行首
y --> 从这里开始拷贝
$ --> 拷贝到行尾
范例:粘贴‘wang’100次
100iwang[ESC]
- di" 光标在" “之间,则删除” "之间的内容
- yi( 光标在()之间,则复制()之间的内容
- vi[ 光标在[]之间,则选中[]之间的内容
- dtx 删除字符至到遇见光标之后的第一个x字符
- ytx 复制字符至到遇见光标之后的第一个x字符
1.5 可视化模式
在末行有"–VISUAL–" 指示,表示在可视化模式
允许选择的文本
- v面向字符,–VISUAL–
- V面向整行,–VISUAL LINE–
- ctrl-v 面向块,–VISUAL BLOCK–
可视化键可用于与移动键结合:w )}等突出显示的文字可被删除,复制,变更,过滤,搜索,替换等
范例:在文件,每一行的行首插入#
1 先将光标移动到第一行的行首
2 输入ctrl+v 进入可视化模式
3 输入G 跳到最后一行,选中每行的第一个字符
4 输入I 切换至插入模式
5 输入#
6 按ESC键
范例:在指定的块位置插入相同的内容
1 先将光标移动到要操作的地方
2 输入ctrl+v 进入可视化模式,选取这一列操作多少行
3 SHIFT+i(I)
4 输入要插入的内容
5 按ESC键
1.6 多文件模式
vim FILE1 FILE2 FILE4 …
- :next 下一个
- :prev 前一个
- : first 第一个
- : last 最后一个
- : wall 保存所有
- : qall 不保存退出所有
- : wqall 保存退出所有
1.7 多窗口模式
1.7.1 多文件分割
vim -o|O FILE1 FILE2…
- -o 水平或上下分割
- -O 垂直或左右分割
在窗口之间切换:Ctrl+w,Arrow
1.7.2 单文件窗口分割
- Ctrl+w,s:split,水平分割,上下分屏
- Ctrl+w,v:vertical,垂直分割,左右分屏
- Ctrl+w,q:取消相邻的窗口
- Ctrl+w,o:取消全部窗口
- :wqall 退出
1.8 vim的寄存器
有26个命名的寄存器和1个无名的寄存器,常放在不同的剪贴板,可以在同一主机的不同会话(终端窗口)间共享
寄存器名称a,b,…,z,格式’'寄存器 放在数字和命令之间
范例:
- 3’'tty 表示复制3行到t的寄存器中
- ''tp 表示将t寄存器内容粘贴
未指定,将使用无名寄存器
有10个数字寄存器,用0,1,…,9表示,0存放最近复制的内容,1存放最近删除的内容。当行的文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能再不同的会话间共享
1.9 标记和宏(macro)
- ma 将当前位置标记为a,26个字母均可做标记,mb,mc等等
- 'a 跳转到a标记的位置
- qa 录制宏a,a为宏的名称,末行提示:recording @a
- q 停止录制宏
- @a 执行宏a
- @@ 重新执行上次执行的宏
1.10 编辑二进制文件
#以二进制方式打开文件
vim -b binaryfile
#扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
#切换至插入模式,编辑二进制文件
#切换至扩展命令模式下,利用命令转换会二进制
:%!xxd -r
#保存退出