本文目录
- vi和vim简介
- 使用vim初步
- 扩展命令模式
- 命令模式
- 可视化模式
- 多文件模式
- 多窗口模式
- vim的寄存器
- 标记和宏(macro)
- 编辑二进制文件
- 帮助
- vim总结图
vi和vim简介
在Linux中我们经常编辑修改文本文件,即由ASCII,Unicode或其它编码的纯文字的文件。之前介绍过nano,实际工作中我们会使用更为专业,功能强大的工具
文本编辑种类:
- 全屏编辑器:nano(字符工具),gedit(图形化工具),vi,vim
- 行编辑器:sed
vi
Visualeditor,文本编辑器,是Linux必备工具之一,功能强大,学习曲线较陡峭,学习难度大
vim
VIsualeditoriMproved,和vi使用方法一致,但功能更为强大,不是必备软件
官网:www.vim.org
其他相关编辑器:gvim一个Vim编辑器的图形版本
vim小抄
使用vim初步
2.1vim命令格式
vim[OPTION]...FILE...
- #打开文件后,让光标处于第#行的行首,默认行尾
- /PATTERN让光标处于第一个被PATTERN匹配到的行行首
- -bfile二进制方式打开文件
- -dfile1file2…比较多个文件,相当于vimdiff
- -mfile只读打开文件
- -efile直接进入ex模式,相当于执行exfile
说明:
- 如果该文件存在,文件被打开并显示内容
- 如果该文件不存在,当编辑后第一次存盘时创建它
2.2三种主要模式和转换
vim是一个模式编辑器,击键行为是依赖于vim的的“模式”
三种常见模式:
- 命令或普通(Normal)模式:默认模式,可以实现移动光标,剪切/粘贴文本
- 插入(Insert)或编辑模式:用于修改文本
- 扩展命令(extendedcommand)或命令(末)行模式:保存,退出等
模式转换
iinsert,在光标所在处输入
I在当前光标所在行的行首输入
aappend,在光标所在处后面输入
A在当前光标所在行的行尾输入
o在当前光标所在行的下方打开一个新行
O在当前光标所在行的上方打开一个新行
- 插入模式---ESC----->命令模式
- 命令模式----:---->扩展命令模式
- 扩展命令模式----ESC,enter---->命令模式
扩展命令模式
按“:”进入Ex模式,创建一个命令提示符:处于底部的屏幕左侧
3.1扩展命令模式基本命令
w写(存)磁盘文件wq写入并退出x写入并退出X加密q退出q!不存盘退出,即使更改都将丢失rfilename读文件内容到当前文件中wfilename将当前文件内容写入另一个文件!command执行命令r!command读入命令的输出
3.2地址定界
格式:
:start_pos,end_poscmd#具体第#行,例如2表示第2行#,#从左侧#表示起始行,到右侧#表示结尾行#,#从左侧#表示的起始行,加上右侧#表示的行数,范例:2,3表示2到5行.当前行$最后一行.,$-1当前行到倒数第二行%全文,相当于1,$/pattern/从当前行向下查找,直到匹配pattern的第一行,即:正则表达式/pat1/,/pat2/从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束#,/pat/从指定行开始,一直找到第一个匹配patttern的行结束/pat/,$向下找到第一个匹配patttern的行到整个文件的结尾的所有行
地址定界后跟一个编辑命令
d删除y复制wfile:将范围内的行另存至指定文件中rfile:在指定位置插入指定文件中的所有内容
3.3查找并替换
格式
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用正则表达式模式
替换为的内容:不能使用模式,但可以使用\1,\2,...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
修饰符:
- i忽略大小写
- g全局替换,默认情况下,每一行只替换第一次出现
- gc全局替换,每次替换前询问
说明:查找替换中的分隔符/可替换为其它字符,如:#,@
范例:
s@/etc@/var@gs#/boot#/#i
3.4定制vim的工作特性
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
扩展命令模式:当前vim进程有效
3.4.1行号
显示:setnumber,简写setnu
取消显示:setnonumber,简写setnonu
3.4.2忽略字符的大小写
启用:setignorecase,简写setic
不忽略:setnoic
3.4.3自动缩进
启用:setautoindent,简写setai
禁用:setnoai
3.4.4复制保留格式
启用:setpaste
禁用:setnopaste
3.4.5显示Tab和换行符^I和$显示
启用:setlist
禁用:setnolist
3.4.6高亮搜索
启用:sethlsearch
禁用:setnohlsearch
3.4.7语法高亮
启用:syntaxon
禁用:syntaxoff
3.4.8文件格式
启用windows格式:setfileformat=dos
启用unix格式:setfileformat=unix
简写setff=dos|unix
3.4.9设置文本宽度
settext width=65(vimonly)
setwrapmargin=15
3.4.10设置光标所在行的标识线
启用:setcursorline,简写setcul
禁用:setnocursorline
3.4.11加密
启用:setkey=password
禁用:setkey=
3.4.12了解更多
set帮助
:helpoption-list
:setor:setall
命令模式
命令模式功能强大,只是按键时,看不到输入,所以需要大量的记忆才能更好的使用。
4.1退出VIM
4.2光标跳转
字符间跳转:
- h:左L:右j:下k:上
- #COMMAND:跳转由#指定的个数的字符
单词间跳转:
- w:下一个单词的词首
- e:当前或下一单词的词尾
- b:当前或前一个单词的词首
- #COMMAND:由#指定一次跳转的单词数
当前页跳转:
- H:页首
- M:页中间行
- L:页底
- zt:将光标所在当前行移到屏幕顶端
- zz:将光标所在当前行移到屏幕中间
- zb:将光标所在当前行移到屏幕底端
行首行尾跳转:
- ^跳转至行首的第一个非空白字符
- 0跳转至行首
- $跳转至行尾
行间移动:
- #G或者扩展命令模式下:#跳转至由第#行
- G最后一行
- 1G,gg第一行
句间移动:
)下一句(上一句
段落间移动:
}下一段{上一段
命令模式翻屏操作
- Ctrlf向文件尾部翻一屏
- Ctrlb向文件首部翻一屏
- Ctrld向文件尾部翻半屏
- Ctrlu向文件首部翻半屏
4.3字符编辑
- x删除光标处的字符
- #x删除光标处起始的#个字符
- xp交换光标所在处的字符及其后面字符的位置
- ~转换大小写
- J删除当前行后的换行符
4.4替换命令(replace)
r替换光标所在处的字符
R切换成REPLACE模式,按ESC回到命令模式
4.5删除命令(delete)
- d删除命令,可结合光标跳转字符,实现范围删除
- d$删除到行尾
- d^删除到非空行首
- d0删除到行首
- dw
- de
- db
- #COMMAND
- dd:删除光标所在的行
- #dd多行删除
- D:从当前光标位置一直删除到行尾,等同于d$
4.6复制命令(yank)
- y复制,行为相似于d命令
- y$
- y0
- y^
- ye
- yw
- yb
- #COMMAND
- yy:复制行
- #yy复制多行
- Y:复制整行
4.7粘贴命令(paste)
p缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
4.8改变命令(change)
- c:删除后切换成插入模式
- c$
- c^
- c0
- cb
- ce
- cw
- #COMMAND
- cc:删除当前行并输入新内容,相当于S
- #cc
- C:删除当前光标到行尾,并切换成插入模式,相当于c$
4.9查找
- /PATTERN:从当前光标所在处向文件尾部查找
- ?PATTERN:从当前光标所在处向文件首部查找
- n:与命令同方向
- N:与命令反方向
4.10撤消更改
- u撤销最近的更改
- #u撤销之前多次更改
- U撤消光标落在这行后所有此行的更改
- Ctrl-r重做最后的“撤消”更改
- .重复前一个操作
- #.重复前一个操作#次
4.11高级用法
<startposition><command><endposition>
常见Command:y复制、d删除、gU变大写、gu变小写
范例:
0y$命令0→先到行头y→从这里开始拷贝$→拷贝到本行最后一个字符
范例:粘贴“wang”100次
100iwang[ESC]
- di"光标在”“之间,则删除”“之间的内容
- yi(光标在()之间,则复制()之间的内容
- vi[光标在[]之间,则选中[]之间的内容
- dtx删除字符直到遇见光标之后的第一个x字符
- ytx复制字符直到遇见光标之后的第一个x字符
可视化模式
允许选择的文本块
可视化键可用于与移动键结合使用
w)}箭头等
突出显示的文字可被删除,复制,变更,过滤,搜索,替换等
范例:在文件行首插入#
输入ctrlv进入可视化模式输入G跳到最后1行,选中第一行输入I切换至插入模式输入#按ESC键
多文件模式
- vimFILE1FILE2FILE3...
- :next下一个
- :prev前一个
- :first第一个
- :last最后一个
- :wall保存所有
- :qall不保存退出所有
- :wqall保存退出所有
多窗口模式
7.1多文件分割
- vim-o|-OFILE1FILE2...
- -o:水平或上下分割
- -O:垂直或左右分割(vimonly)
- 在窗口间切换:Ctrlw,Arrow
7.2单文件窗口分割
- Ctrlw,s:split,水平分割
- Ctrlw,v:vertical,垂直分割
- ctrlw,q:取消相邻窗口
- ctrlw,o:取消全部窗口
- :wqall退出
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
- @@重新执行上次执行的宏
编辑二进制文件
w写(存)磁盘文件wq写入并退出x写入并退出X加密q退出q!不存盘退出,即使更改都将丢失rfilename读文件内容到当前文件中wfilename将当前文件内容写入另一个文件!command执行命令r!command读入命令的输出0
帮助
:help
:helptopic
Use:qtoexithelp
vimtutor
vim总结图