vim
前言
之前在折腾OpenWrt路由器时,最长用到的编辑器就是vim了,前几天在自己低配thinkpad笔记本上安装了ArcLinux,但是跑vscode仍然热的仍然像个大火炉,于是便着使用vim来编写代码,发挥下余热。
知道开始写才发现之前掌握的hjkl之类命令远远不够,于是从酷客网上一遍联系一遍记录笔记,防止年老忘记,哈哈,
另外说一句:vim是世界上最牛的编辑器,逃。。。
快捷命令
在正常模式中的各种编辑快捷键
插入
- a 在光标后插入
- i 在光标前插入
- o在当前行后插入
- O 在当前行前插入
- cw 替换从光标开始位置到一个单词结尾的字符(无论是中文英文,都是替换到空格)
移动光标
0:ghjk :上下左右
- 0: 到行头
- ^: 到本行第一个不是blank字符的位置,(tab 空格 换行 回车等等)
- $: 到行尾
复制粘贴
- p:粘贴
- yy: 拷贝当前行
撤销重做
- u:撤销
- ctrl+r:重做
命令模式下的快捷键
打开
- e <path/to/file>: 打开一个文件
保存
- w:保存
另存为
- saveas <path/to/file>
保存并退出
- wq:保存并退出
- q!:保存不退出
3: qa! :强行退出所有正在编辑的文件,就算别的文件又更改
改变文件
- bn:同时打开多个文件时用来切换
- n:切换到下一个文件
命令重复执行
- . :点可以重复上一步命令
- N <命令>:重复某个命令n次
例子:
2dd //删除两行 就是N,dd是删除命令,2dd就是重复执行两次删除命令也就是删除2行
3p //粘贴三次,
100idesu <ESC> //重复插入100次的desu
. //重复上一个命令
3. 重复执行3次上一个命令
光标移动
- N G: 到第几行,N是行数,G是大写
- gg : 到第一行
- G: 到最后一行
- 按单词移动
- w:到下一个单词的开够
- e:到下一个单词的结尾
注意:
当单词是默认(由字母下划线和数字组成)使用e
和w
当单词是以blank符(空格、tab和)要使用大写的W
和E
- %::匹配括号移动,包括
{``(``[
,需要先把光标移动到括号上 - 和# : 匹配光标所在的单词,移动的上一个()或者下一个(#)
移动组合命令
<start position> <command> <end position>
eg:
0y$
执行:jjk
- 0 -> 先到行头
- y -> 从这里开始拷贝
- $ -> 拷贝本行到最后一个字符
ye
拷贝到本单词到最后一个字符。
y2/foo
拷贝两个foo之间的字符串
除了按y
还有一些命令也会拷贝
- d 删除
- v 可视化选择,按v以后再按选择,最后可以按y或者d 复制或者删除
- gU 变成大写
- gu 变成小写
- 等等
超级实用命令
移动
- 0 到行头
- ^ 到本行的第一个非blank字符
- $ 到行尾
- g_到本行最后一个不是blank字符的位置
- fa 到本行下一个为a的字符处,a可以是其他字符,如fs到下一个为s的字母
- t, 到逗号钱的第一个字符,逗号可以变为其他字符
7.3fa 在当前行查找第三个出现的a,其中3和a都是可变的,
删除
- dt" 删除所有内容直到遇到“,其中”可以为任意字符
区域选择
命令格式
<action>a<object>
<action>i<object>
- action 可以使任意命令,如
d
删除,y
拷贝,v
可是模式下的选择 - object 可能是:
w
一个单词,W
一个以空格分隔的单词,s
一个句子,p
一个段落,也可以是特别的字符:“、’、)、}、】、
这里没有理解
块操作
块操作类似vscode下摁下中间滚轮竖向选择并进行操作。
vim典型操作是:0 <CTRL+V> <CTRL+d> I -- [ESC]
- 0 到行头
- CTRL+V 开始块操作,注意在windows下使用CTRL+q
- CTRL+D 向下移动,也可以使用hjkl移动光标
- I – [ESC] I是插入,插入’–‘,按ESC让每一行生效
未实现
自动提示
- CTRL+n //自动补齐,连续按下n向下选择列表项
- CTRL+p //自动补齐,连续按下p向上选择列表项
宏录制
qa
把操作记录存储在寄存器a
,@a
会replay被录制的宏@@
是一个快捷键,用来replay最新录制的宏。
eg:
在一个只有一行且这一行只有个“1”的文本中,依次输入
* qaYp<CTRL+a>q
* qa 开始录制,
* Yp 复制行
* CTRL+a 增加1
* q停止录制
* @a 在1下面写下2
* @@ 在2下面写下3
* 100@@ 会创建新的100行,并把数据增加到103
这种方式很方便,但是除了ctrl+a代表加1应该还有其他的快捷键
可视化选择
使用v选择代码,然后可以做以下几种操作:
- J 把所有行变成一行
<
或者>
左右缩进=
自动缩进
这里的自动缩进没有实现
分屏
待补充
参考文献 https://coolshell.cn/articles/5426.html