阅读目录
-
-
- 打开文件
- vim模式
- 模式之间切换
-
- 命令模式--> 插入模式
- 插入模式 -->命令模式
- 命令模式-->扩展命令模式
- 扩展命令模式-->命令模式
- 关闭文件
-
- 扩展命令行模式下关闭
- 命令模式下关闭
- vim编辑时遇到E325: ATTENTION Found a swap file by the name 错误
- 扩展命令行模式
-
- 进入
- 命令
- 光标的移动
-
- 字符间移动
- 单词间移动(除了下划线都认为是单词的分隔符)
- 当前页跳转
- 行首、行尾跳转
- 行间跳转
- 段落间跳转
- 翻屏
- 命令模式操作
-
- 字符编辑
- vim替换
- vim删除
- vim复制
- vim粘贴
- 改变命令
- vim撤销
- vim查找字符串
- 扩展命令模式进阶
-
- 地址定界
- 查找替换
- 可视化模式
- 多文件操作
- 使用多个窗口
- 定制化vim
- vim帮助信息
-
打开文件
vim [options] file
+数值 【打开文件以后光标在 指定数值 行的行首】
+/string 【直接定位到第一个被匹配到的string的行的行首】
-m 只读模式打开,退出方式 【: q 或者 :q ! 】
-e 直接进入扩展命令行模式
-b 以二进制方式打开文件
vim模式
- 命令模式:直接打开后默认
- 插入模式:编辑文件 --INSERT–
- 扩展命令模式(末行模式):保存w、退出q、保存并退出wq
- 可视化模式:
模式之间切换
命令模式–> 插入模式
- i 在当前光标的所在位置插入
- I 在当前行的行首位置开始插入
- a 在光标的后面开始插入
- A 在当前行的行尾位置开始插入
- o 在当前光标所在行的下方打开一个新行
- O 在当前光标所在行的上方打开一个新行
插入模式 -->命令模式
- esc
命令模式–>扩展命令模式
- :
扩展命令模式–>命令模式
- 按esc 再按enter
- 或者按两下 esc esc
关闭文件
扩展命令行模式下关闭
- :q 退出
- :q! 不保存强制退出(涉及修改时,使用)
- :wq 保存退出
- :wq! 强制保存退出
- :x 保存退出
命令模式下关闭
- ZZ 保存退出
- ZQ 不保存退出
vim编辑时遇到E325: ATTENTION Found a swap file by the name 错误
-
错误原因:通过错误E325的提示可以知道,出现这种情况的原因有两种,其一,是当前有其他的进程正在对相同的文档进行编辑;其二,之前的编辑会话被销毁了(crashed)
(也就是说,你上次编辑的时候,没有保存就强制离开了)。
- 原理:在编辑文件的时候,并不是对原有文件进行修改和覆盖的,而是新建一个副本,名字叫xx.swp,我们对文件的编辑都放在了这个副本里面,这也是为什么我们能进行撤销的原因,我们并没有对原有的文件进行修改。当我们正常退出时,这个文件就正常消失,而当我们异常退出时,这个文件就会作为隐藏文件,当我们下次启动vim时,它就会提示我们上次编辑时,有一个文件异常退出了,是否要进行恢复。也就是弹出E325错误。当我们异常退出时,这个隐藏文件会帮助我们还原到上次编辑的状态。也就相当于是一个自动保存的功能。
-
解决办法:
(1)方法一:选择还原到上次编辑的状态,然后再删除掉.swp文件,做法:vim -r filename(你上次未保存的文件名),会出现以下界面;或者直接按照提示输入:R 即是recovery
左侧会出现一个Recovery completed,告诉你文件已经还原到了上次编辑的状态,而右侧会多出一个swo文件,这个文件类似于swp用来保存你修改文件的副本,而swp文件是我们用来还原的副本。当我们还原之后,可以使用rm -f xx.swp 删除掉这个副本。
(2)方法二:当我们不需要还原的时候,只需要我们直接删除这个副本就可以了(到根目录或者工作目录下找到你修改的文件.swp)。利用rm命令直接删除这个副本,或者按照提示输入:D 即是 delete
扩展命令行模式
进入
- " : "进入扩展命令行模式
- 或者输入:vim -e 文件名
命令
- w 【write 写入磁盘】
- wq 【保存退出】
- x 【保存退出】
- q 【退出】
- r [filename] 【读入一个文件的内容,在光标的下一行插入】
- w [filename] 【将当前的文件另存为另外一个文件】
- ! command 【执行命令,然后回车回到文件中】
- r! command 【直接将命令的执行结果写入到文件中,光标所在行的下一行】
光标的移动
【所有操作,在 命令模式下 进行】
字符间移动
- h 左移动
- l 右移动
- j 往下移动
- k 往上移动
【键盘上 相连的 h j k l 是个键位:← ↑ ↓ →】
- 数值+command 【多个字符之间跳转,如果 3+h 表示左移三个单位】
单词间移动(除了下划线都认为是单词的分隔符)
- w 【words 下一个单词的词首】
- e 【end 当前单词或者下一个单词的词尾】
- b 【before 当前单词或者上一个单词的词首】
- 数值+command 【多个单词之间进行跳转】
当前页跳转
- H 【head 当前页的第一行】
- L 【tail 当前页的最后一行】
- M 【middle 当前页面的中间位置】
- zt 【以光标所在的行,直接移动到屏幕的顶端】
- zb【 以光标所在的行,直接移动到屏幕的底部(显示整页)】
- zz 【以光标所在的行,移动到屏幕的中间位置】
行首、行尾跳转
- 0【数字的零,跳转到行首】
- $ 【跳转到行尾;英文状态下】
- ^ 跳转到行首的第一个非空白字符
行间跳转
-
命令模式下
(1)gg【 回到第一行】
(2)1G 【回到第一行】
(3)G 【跳转到最后一行】
-
扩展命令模式下:
(1)数值G 【跳转到指定的数值行;英文模式下,不要用小键盘的数字】
段落间跳转
- } 下一段
- { 上一段
翻屏
- ctrl+f 【向下翻一屏】
- ctrl+b 【向上翻一屏】
- ctrl+d 【向下翻半屏】
- ctrl+u 【向上翻半屏】
命令模式操作
字符编辑
【以下操作都在:命令模式下】
- x 【删除光标所在的位置】
- 数值x 【删除指定 数值 个字符】
- xp 【交换位置】
- p 【粘贴到光标所在的位置】
- ~【大小写转换;也是在前面 加上数值,可以作用数值个大小写转换】
- J 【删除当前行后的换行符】
vim替换
- r 【replace 替换光标所在位置;先按r 然后加要替换的内容;也可以先指定数值,代表要替换的位数,然后加上输入内容】
- R 【切换到替换模式;esc 退出】
vim删除
【在命令模式下】
-
d 【删除,需要结合光标跳转字符;按下d 然后移动光标,删除内容】如下:
d0 【删除到行首】
d$ 【删除到行尾】
d^ 【删除到非空行首】
dw 【删除一个单词】
de 【删除当前单词到词尾的位置或者下一个单词】
db 【删除光标前的内容,以空格为一个单元】
dd 【删除光标所在的行】
- 数值dd 【删除 指定 数值 行数;从光标位置行开始(包括)以下的行】
- dG 【删除到文件的行尾】
- dgg 【删除到文件的行首】
- D 【相当于d$】
vim复制
-
y 复制,需要结合光标跳转字符,比如↓↓↓
y$
y0
y^
yw
ye
yb
yG
ygg
- yy 【复制整行】
- 数值yy 【复制 指定数值 行】
vim粘贴
- p 如果是整行,则粘贴到当前所在行的下面,否则,则粘贴到光标所在位置的后面
- P 如果是整行,则粘贴到当前行所在的上面,否则,则粘贴到光标所在位置的前面
- 数值 再通过[i|I|a|A|o|O]进入insert模式 加上要添加的string 再按esc 【粘贴 指定数值 次string】
改变命令
-
c 【修改之后直接切换到插入模式,如果没进入,再按下 tab键】
c$
c0
c^
cb
ce
cw
- cc 【删除当前行并且输入新内容;无论光标在行内的哪里,都是删除一整行】
- 数值cc 【删除 指定数值 行,并切换到插入模式】
- C 【相当于c$;删除光标所在位置,到本行结尾的内容】
vim撤销
- u 【撤销最近的更改】
- 数值u 【撤销之前的 指定数值 次更改】
- U 【撤销光标所在行的关于此行操作】
- ctrl+r 【重做最后的操作,撤销撤销】
- . 【重复前一个操作】
- 数值. 【 重复之前的动作多少次】
vim查找字符串
【在命令模式下】
- /pattern 【从当前光标所在位置向下查找】
- ?pattern 【从光标所在位置向上查找;可以使用正则表达式】
- n 【同 搜索命令 方向 查找下一个匹配】
- N 【同搜索命令 相反 查找下一个匹配】
扩展命令模式进阶
地址定界
-
: start, end
(0): set nu【显示出行号,按enter后,如果还要进行其他操作,直接再按 : 进入即可】
(1)直接指定数值【具体到多少行;如 :10 回车则会定位到第10行】
(2)m,n 【从m开始到n结束;输入后enter则是定位;也可以在区间后加上 d 表示删除该区间的内容】
(3)m,+n 【从m开始,到m+n结束 2, +3 第2行到第5行;直接按enter结束执行可以定位到该区间】
- . 【代表当前行】
- $ 【最后一行】
- $-指定数值 【倒数第 指定数值+1 行】
- % 【全部】
- 指定数值,/pat/ 【从第#开始,到第一次被pat匹配到的行】
- /pat1/,/pat2/ 【从第一个别pat1匹配到的行到 第一个被pat2匹配的行】
-
/pat/,指定数值 【从第一个被pat匹配到的行,到 指定数值 行
】
后面可以添加一下:
(1)d 【删除;比如 :/post/,$ d 】
(2)y 和 p 【复制 ;比如 :/post/,$ y】
执行后,再按下p粘贴
(3)w file :【将范围内的文件另存为一个文件】
(4)r file 【在指定的位置插入文件中的内容;比如执行 :8,9 r a.txt ;注意是在区间结尾处新增】
查找替换
- : 地址定位符s / 要查找的内容 / 要替换的内容 / 装饰器
(1)要查找的内容:可以使用正则表达式
(2)要替换的内容: 不可以使用正则表达式,但是可以使用\1,\2等,也可以使用&来代替前面的内容;使用\1 这种方法需要对其进行分组,即使用括号(记得正则时要使用转义字符),使用& 符号时,不需要先进行分组,就可以代替前面的内容;本质就是要替换的内容和查找的内容有很大的相似性,所以可以采用这两种简写方式!
-
装饰器
(1)i 忽略大小写
(2)g 全部替换
(3)gc 是提前之前要确认:y 确认,n 跳过,a 全部
(4)如果要将 / 替换成别的符号:需要使用 @ 或者 # 对其进行转义,但是这两个符号在使用时,尽量不要重复
可视化模式
- v 【面向字符,需要结合选定区域使用(使用键盘和光标移动来选定字符)】
- V 【面向行;结合键盘和光标移动来选定字符】
- ctrl+v 【面向的是块;结合键盘和光标移动来选定字符】
- 选定的内容可以:删除,复制,变更,过滤,替换等等
多文件操作
vim file1 file2 file3
- :next 下一个
- :prev 上一个
- :first 第一个
- :last 最后一个
- :wqall
- :wall
- :qall
- 对其中一个文件进行了修改,需要保存之后再切换
使用多个窗口
- 多个文件协作
(1)vim -o|-O file1 file2 file3
(2)-o 水平切割
(3)-O 垂直切割
(4)ctrl+w 切换不同窗口
- 单的文件切割
(1)ctrl+w,s 【水平分割;先按ctrl+w,放手后再按 s】
(2)ctrl+w,v 【垂直分割;先按ctrl+w,放手后再按 v】
(3)ctrl+w,方向键 【切割出来的区域间移动】
(4)ctrl+w,q 【取消相邻的屏幕】
(5)ctrl+w,o 【取消所有的屏幕】
- 屏幕尺寸调整
定制化vim
-
vim的配置文件
(1)全局:/etc/vimrc
(2)个人:~/.vimrc
-
扩展命令模式:
(1)添加行号 set nu 取消 set nonu
(2)搜索时忽略大小写 set ic 取消set noic
(3)自动缩进(与上一行对其) set ai 取消 set noai
(4)搜索高亮 set hls 取消 set nohls
(5)语法高亮 syntax on 关闭 syntax off
(6)设置光标所在的行的标识符 set cul 取消 set nocul
(7)获取帮助 :set all(8)文件格式:
转换成windows set fileformat=dos
转换成linux set fileformat=unix
windows和linux可能会应该换行符不同或其他差异导致互传的文件打开不开,所以需要再linux上和windows转换时设置格式
vim帮助信息
- :help
- : help topic
- vimtutor 【vim的指导手册,tutor是“指导”的意思;里面有所有上面学到的内容】
- 大家可以vimtutor进入英文版的指导教程,里面非常详细,而且还有彩蛋哦!
- 再次回来看下之前的键盘图,是不是有重新的收获呢?那么就反复练习直到熟练吧!