vim学习笔记
之前总觉得vim使用起来很麻烦, 但因为其在文本编辑上的先天性优势, 又可以脱离鼠标操作而无形装逼. 另外, VS Code或者Sublime等轻量级编辑器配合着vim插件使用很是酸爽, 在无聊的时候还是很值得学习一下vim这个古老的文本编辑器的.
vim共分为三种模式, 分别是命令模式(Command mode), 输入模式(Insert mode) 和底线命令模式(Last line mode).
命令模式
用户刚刚启动vim, 便进入了命令模式.
此状态下敲击键盘动作会被vim识别为命令, 而非输入字符. 比如我们按下 i
, 并不会输入一个字符, i
被当作了一个命令. 以下是常用的几个命令:
i
切换到输入模式, 以输入字符x
删除当前光标所在处的字符:
切换到底线命令模式, 以在最底一行输入命令
命令模式只有一些最基本的命令, 因此仍要依靠底线命令模式输入更多命令.
输入模式
在命令模式下按下 i
就进入了输入模式, 按下 a
就进入输入模式且光标后移一个, 按下 o
就进入输入模式且光标跳转到下一行.
在输入模式中, 可以使用以下按键:
字符键以及Shift组合
输入字符ENTER
换行BACK SPACE
删除光标前一个字符DEL
删除光标所在字符 (命令模式下也行)HOME/END
移动光标到行首/行尾 (命令模式下也行,END
有一点差别)Page Up/Page Down
上/下翻页 (命令模式下也行)Insert
切换光标为输入/替换模式ESC
退出输入模式, 切换到命令模式
底线命令模式
在命令模式下按下 :
, 就进入了底线命令模式.
底线命令模式可以输入单个或多个字符的命令, 可用的命令非常多.
在底线命令模式中, 基本的命令有:
q
退出程序w
保存文件wq
保存并退出
按ESC
键可随时退出底线命令模式.
vim test.txt
可以新建一个名为test.txt
的文件.
移动光标
n↓
向下移动n行n<Enter>
光标向下移动n行n<space>
n
表示数字, 例如20. 按下数字后再按空格键, 光标会向右移动这一行的n个字符.0/HOME
移动到这一行最前面字符处$/END
移动到这一行最后面字符处H
光标移动到这个屏幕的最上方那一行的第一个字符M
光标移动到这个屏幕的中央那一行的第一个字符L
光标移动到这个屏幕的最下方那一行的第一个字符G
移动到这个档案的最后一行nG
移动到这个档案的第n行(可配合:set nu
)gg
移动到这个档案的第一行, 相当于1G
搜索替换
/word
向光标之下寻找一个名为word的字符串?word
向光标之上寻找一个名为word的字符串
删除、复制与粘贴
x,X
在一行字当中,x
为向后删除一个字符(相当于Del
),X
为向前删除一个字符(相当于backspace
)nx
在某一行中, 连续向后删除n个字符dd
删除光标所在的那一整行ndd
删除光标所在的向下n行d1G
删除光标所在到第一行的所有数据dG
删除光标所在到最后一行的所有数据d$
删除光标所在处到该行的最后一个字符d0
删除光标所在处到该行的最前面一个字符yy
复制光标所在的那一行nyy
复制光标所在的向下n行y1G
复制光标所在行到第一行的所有数据yG
复制光标所在行到最后一行的所有数据y0
复制光标所在的那个字符到该行行首的所有数据y$
复制光标所在的那个字符到该行行尾的所有数据p,P
p
将已复制的数据在光标下一行粘上,P
则为粘在光标上一行J
将光标所在行与下一行的数据结合成同一行u
复原前一个动作Ctrl+r
重做上一个动作
替换
r,R
r
取代光标所在处的一个字符,R
连续取代:s/from/to/
将当前行第一个from替换成to:s/from/to/g
将当前行所有from替换成to:s/from/to/gc
将当前行所有from替换成to, 且替换之前都会询问请求用户确认此操作:.s/from/to/g
在当前行进行替换操作:33s/from/to/g
在第33行进行替换操作:$s/from/to/g
在最后一行进行替换操作:10,20s/from/to/g
对第十行到第二十行的内容进行替换:1,$s/from/to/g
or:%s/from/to/g
全文替换:1,.s/from/to/g
第一行到当前行进行替换:.,$s/from/to/g
当前行到最后一行进行替换
批量处理(以注释为例)
批量处理
- 块选择模式
- 批量注释
ctrl+v
进入块选择模式, 然后移动光标选中要注释的行, 再按大写的I
进入行首插入模式输入注释符号如 // 或 #, 输入完毕之后, 按两下ESC, Vim 会自动将你选中的所有行首都加上注释, 保存退出完成注释. - 取消注释
ctrl+v
进入块选择模式, 选中你要删除的行首的注释符号, 注意 // 要选中两个, 选好之后按d
即可删除注释, ESC 保存退出.
- 批量注释
- 替换命令
- 批量注释
使用名命令格式:起始行号,结束行号s/^/注释符/g
- 取消注释
使用名命令格式:起始行号,结束行号s/^注释符//g
- 批量注释
例:
:10,20s#^#//#g
在 10-20行添加 // 注释:10,20s#^//##g
在 10-20行删除 // 注释:10,20s/^/#/g
在 10-20行添加 # 注释:10,20s/#//g
在 10-20行删除 # 注释
:w!
若文件属性为只读时, 强制写入该文档:q!
若曾修改过文档, 又不想存储,q!
为强制离开而不存储文档:w !sudo tee %
对于一些只读文件的强制写入
set nu
显示行号
set nonu
与set nu
相反