文本编辑工具介绍
- vi:Visual Interface,文本编辑器
- 文本:ASCII,Unicode
- 文本编辑种类:
- 行编辑器:sed
- 全屏编辑器:nano,vi
- vim -Vi Improved
- 其他编辑器:
- gedit 一个简单的图形编辑器
- gvim 一个Vim编辑器的图形版本
文本编辑工具vim
打开文件
- vim [OPTION]… FILE…
- vim +# :打开文件后,让光标处于第#行,单独+ 默认光标处于行尾
- vim +/PATTERN 让光标处于第一个被PATTERN匹配的行的行首
- vim -b file 二进制方式打开文件
- vim -d file1 file2… 比较多个文件(扩展命令模式:使用qall退出)
- vim -R file 只读的方式打开文件,如要保存(使用扩展命令模式
:wq!
)
vim -e file
或ex file
直接进入ex模式- 如果该文件存在,文件被打开并显示内容,如果该文件不存在,当编辑后第一次存盘时创建它
vim的三种模式
- vim:一个模式编辑器
- 击键行为是依赖于vim的“模式”
- 三种主要模式:
- 命令(Normal)模式:默认模式,移动光标,剪切/粘贴文本
- 插入(Insert)或编辑模式:修改文本
- 扩展命令(etended command)模式:保存,退出等
- Esc键 退出当前模式
- Esc键 Esc键 总是返回到命令模式
命令模式
- 字符间跳转
h
:向左j
:向下k
:向上l
:向右#COMMAND
:数字+命令 由#指定一次跳转的字符数(例3h:向左跳三个字符)
- 单词间跳转:
w
: 下一个单词的词首e
:当前或下一个单词的词尾b
:当前或前一个单词的词首#COMMAND
:数字+命令 由#指定一次跳转的单词数(例3w:下3个单词的词首)
- 当前页跳转:
H
:页首M
:页中间行L
:页底zt
:将光标所在当前行移动到屏幕顶端zz
:将光标所在当前行移动到屏幕中间zb
:将光标所在当前行移动到屏幕底端
- 行首行尾跳转:
^
跳转至行首的第一个非空白字符0
数字0跳转至行首$
跳转至行尾
- 行间移动:
#G
或者扩展命令模式下:#
(跳转至第#行)G
最后一行1G
,gg
第一行
- 句间移动(由.隔开的算句子):
)
下一句(
上一句
- 段落间移动(中间由空行算段落):
}
下一段{
上一段
- 替换命令(r,replace)
r
替换光标所在处的字符(r 需要的字符)R
切换成REPLACE模式(R 连续替换)
- 字符编辑:
x
删除光标处的字符#x
删除光标处起始的#个字符xp
交换光标所在处的字符及其后面字符的位置(x 剪切,p粘贴)~
转换大小写J
删除当前行后的换行符
- 删除命令(d, delet):
d
删除命令,可结合光标跳转字符,实现范围删除d$
删除到行尾d^
删除到非空 行首d0
删除到行首dw
删除到下一个单词的词首de
删除到下一个单词的词尾db
删除到当前或前一个单词的词首dd #COMMAND
删除#个COMMAND(COMMAND是上面的跳转,移动命令)dd
:删除光标所在的行#dd
多行删除(连续删除#行)
D
:从当前光标位置一直删除到行尾,等同于d$
- 复制命令(y,yank)
y
复制,行为相似于d命令y$
从光标位置复制到行尾y0
从光标位置复制到行首y^
从光标位置复制到当前行第一个非空白字符ye
从光标位置复制到下一个单词尾部yw
从光标位置复制到下一个单词首部yb
从光标位置复制到上一个或本单词的首部- #COMMAND
yy
:复制行- #yy 复制多行
Y
:复制整行
- 粘贴命令(p,paste):
p
缓冲区的如果为整行(有换行符),则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面P
缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
- 改变命令(c,change)
c
:修改后切换成插入模式- 命令模式 — > 插入模式
c$
c^
c0
cw
ce
cb
- #COMMAND
cc
:删除当前行并输入新内容,相当于S#cc
C
:删除当前光标到行尾,并切换成插入模式
100iwang
[esc] 粘贴“wang”100次- 常见COMMAD
y
复制,d
删除,gU
变大写,gu
变小写- 例如:
0y$
命令- 0 ->先到行头
- y ->从这里开始拷贝
- $ ->拷贝到本行最后一个字符
di"
光标在“光标”之间,则删除""之间的内容yi(
光标在()之间,则复制()之间的内容vi[
光标在[]之间,则选中[]之间的内容dtx
删除字符直到遇见光标之后的第一个x字符(x是26个字符之间)ytx
复制字符直到遇见光标之后的第一个x字符(x是26个字符之间)ZZ
: 保存退出ZQ
: 不保存退出
命令模式翻屏操作
- Ctrl + f 向文件尾部翻一屏
- Ctrl + b 向文件首部翻一屏
- Ctrl + d 向文件尾部翻半屏
- Ctrl + u 向文件首部翻半屏
插入模式
i
: 当前光标位置开始编辑a
:当前光标的后一个位置开始编辑o
:当前光标行下面新建空行编辑I:
当前光标所在行的行首开始编辑A
:当前光标所在行的行尾开始编辑O
: 当前光标所在行的上边新建一个空行开始编辑
扩展命令模式
- 使用英文的
:
打开 :q
:保存:w
:保存:wq
:保存退出:q!
:强制退出:x
:保存退出:r filename
读文件内容到当前文件中:w filename
: 将当前文件内容写入到另一个文件中:! command
:执行Linux命令,回车返回编辑文件:r! command
: r(read)读取Linux运行结果到光标下边新建一行- 地址定界:
- :start_pos,end_pos
:#
具体第#行,例如:2
表示第2行:#,#
从左侧#表示起始行,到右侧#表示结尾行#,+#
从左侧#表示的起始行,加上右侧#表示的行数- 例如: 2,+3 表示2到5行
.
当前行$
最后一行.,$-1
当前行到倒数第二行
%
全文,相当于1,$/pattern/
匹配pattern的行/par1/,/pat2/
- 从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/
/pat/,%
- 使用方式:后跟一个编辑命令
d
: 删除,例如:.d
删除当前行;:.,10 d
删除当前行到第10行y
:复制,同上类似w file
: 将范围内的行另存到指定文件r file
: 在指定位置插入指定文件的所有内容
- 查找
/pattern
:从当前光标所在处向文件尾部查找?pattern
:从当前光标所在处向文件首部查找n
:与命令同方向搜索N
: 与命令反方向搜索
- 撤销更改
u
: 撤销最近的更改#u
: 撤销之前的多次更改U
: 撤销光标落在这行后所有此行的更改Ctrl -r
:重作最后的“撤销”更改.
:重复前一个操作#.
:重复前一个操作#次
- 替换
- 在扩展命令模式下完成查找替换操作
- 格式:s/要查找的内容/替换为的内容/修饰符
- 要查找的内容:可使用模式
- 替换为的内容:不能使用模式,但可以使用\1,\2,…等后向引用符号;还可以使用"&"引用前面查找时查找到的整个内容
- 修饰符:
i
忽略大小写g
全局替换,默认情况下,每一行只替换第一次出现gc
全局替换,每次替换前询问
- 查找替换中的分隔符/可替换为其他字符
s@/etc@/var@g
s#/boot#/#i
- 在扩展命令模式下完成查找替换操作
vim的寄存器
- 有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴板内容,可以不同会话间共享
- 寄存器名称a,b,…z,格式:
"寄存器
放在数字和命令之间”- 如:
3"tyy
表示复制3行到t寄存器中 "tp
表示将t寄存器内容粘贴
- 如:
- 未指定,将使用无命名寄存器
- 有10个数字寄存器,用0,1,…9表示,0存放最近复内容,1存放最近删除内容。当新的文本变更和删除时,1转存到2,2转存到3,以此类推。数字寄存器不能再不同会话间共享
标记和宏(macro)
ma
:将当前位置标记为a,26个字母均可做标记,mb,mc等等'a
:跳转到a标记的位置,实用的文档内标记方法,文档中跳跃编辑时很有用qa
:录制宏a,a为宏的名称q
:停止录制宏@a
:执行宏a@@
:重新执行上次执行的宏
编辑二进制文件
- 以二进制方式打开文件
vim -b binaryfile
- 扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
- 插入模式下,编辑二进制文件
- 扩展命令模式下,利用xxd命令转换回二进制文件
:%!xxd -r
- 保存退出
可视化模式
- 允许选择文本块
v
面向字符V
面向行- Ctrl -v 面向块
- 可视化键可用于与移动键结合使用
- w ) } 箭头等
- 突出显示的文字可被删除,复制,变更,过滤,收索,替换等
vim -o file1 file2 :打开两个文件
使用多个“窗口”
- 多文件分割
- vim -o|-O file1 file2…
- -o:水平分割
- -O:垂直分割
- 在窗口间切换:Ctrl + w,Arrow
- 单文件窗口分割
Ctrl+w,s
:split,水平分割Ctrl+w,v
:vertical,垂直分割Ctrl+w,q
:取消相邻窗口Ctrl+w,o
:取消全部窗口:wqall
退出
定制vim特性
- 配置文件:永久有效
- 全局:/etc/vimrc
- 个人:~/.vimrc(新建这个文件)
- 扩展命令模式:当前vim进程有效
- (1)行号
- 显示:set number,简写 set nu
- 取消显示:set nonumber,简写 setnonu
- (2)忽略字符的大小写
- 启用:set ignorecase,简写set ic
- 不忽略:set noic
- (3)自动缩进
- 启用:set autoindent,简写set ai
- 禁用:set noai
- (4)复制保留格式
- 启用:set paste
- 禁用:set nopaste
- (5)显示Tab和换行符^I和显示$显示
- 启用:set list
- 禁用:set nolist
- (6)高亮搜索
- 启用:set hlsearch
- 禁用:set nohlsearch
- (7)语法高亮
- 启用:syntax on
- 禁用:syntax off
- (8)文件格式
- 启用windows格式:set fileformat=dos
- 启用unix格式:set fileformat=unix
- 简写 set ff=dos|unix
- (9)设置文本宽度
- set textwidth=65(vim only)
- setwrapmargin=15
- (10)设置光标所在行的标识线
- 启用:set cursorline ,简写set cul
- 禁用:set nocursorline