Vim学习
至今还不理解是怎么发明出Vim这种东西的,首先就是经常使用windows的话就会觉Vim简直就是反人类的操作,但是它到现在还没有被淘汰,甚至于一直被应用在Linux或者Mac系统上,可见还是有它的独到之处,所以写一些随笔来记录Vim的一些常用命令,因为根本就是记不住,太多了,可能等我熟练用用以后会记住。
Vim进入之后就是最基础的normal
模式,在该模式下我们无法进行编辑操作;
然后就是插入模式,该模式下我们可以进行增删改的操作;
再然后就是命令模式,该模式下我们可以进行查询,保存等一系列的命令;
最后就是visual
可视化模式,该模式下我们可以进行块状文字选择等操作。
下面是我在CSDN上看到的一个相关的记录,我直接在上面做添加:传送门
# 快捷切换普通模式与插入模式
CTRL+c/[ 切换到普通模式
gi 快速跳转到最后一次编辑的地方并进入插入模式
# 代码补全
CTRL+n/p 补全单词
CTRL+xf 补全文件名
CTRL+xo 补全代码
# 插入模式
## 增加
i 字符前插入 I 行前插入
a 字符后插入 A 行后插入
o 下一行插入 O 上一行插入
## 删除
CTRL+h 删除上一个字符
CTRL+w 删除上一个单词
CTRL+u 删除当前行
## 复制粘贴
CTRL+R+'+' 粘贴系统剪切板
CTRL+c/v 复制粘贴
# 命令模式
: 进入末行模式
!shell 在末行模式下加!和shell命令可以执行shell命令
[range] s[ubstitute]/{pattern}/{string}/[flags] 范围(10,20) s/要替换的字符(\<\>正则)/替换后的字符/(g/c/n)全局/确认/计次
s/s1/s2/ 替换光标后第一个匹配的s1
s/s1/s2/g 替换该行所有匹配的s1
% s/s1/s2/ 替换每一行第一个匹配的s1
% s/s1/s2/g 替换所有匹配的s1
sp/vs 横着/竖着分屏
q/qall 退出/全部退出
w/wall 保存/全部保存
## 切换buffer
ls 列举缓冲区
b n 跳转到第n个缓冲区
bpre/bnext/bfirst/blast 前一个/下一个/第一个/最后一个缓冲区
b buffer_name tab补全跳转
h window-resize 查看文档
tabnew {filename} 新建标签页 gt/T 切换到下一/上一标签页
# visual可视化模式
v: 字符选择,进入可视模式,然后通过y(复制),p(粘贴),d/x(删除)进行操作
V: 行选择
CTRL+v 文字间块状选择
# 普通模式
## 移动
h/j/k/l 左/下/上/右
w/W 移到下一个word/WORD开头(二者区别为是否以空格作为分隔符)
e/E 移到下一个word/WORD结尾
b/B 回到上一个word/WORD开头
0/^ 移动到行首第一个字符/非空白字符
$/g_ 移动到行尾/行尾非空白字符
()/{} 在句子/段落间移动
gg/G 移动到文件的开头/结尾 CTRL+o 快速返回上一个位置
H/M/L 跳转到屏幕的开头/中间/结尾
CTRL+u/f 上/下翻页 zz 把当前行置为屏幕中间
CTRL+ws/wv 水平/垂直分割
CTRL+w+w/h/j/k/l 窗口间循环切换/左/下/上/右窗口(大写即调换位置)
nG或者ngg代表第n行
## 搜索
f{char} 快速移动到char字符上 ;/, 继续搜该行下一个/上一个
t{char} 移动到char的前一个字符
F{char} 反过来搜前面的字符
'/'/? 进行前向/反向搜索 n/N 跳转到下一个/上一个匹配 */"#" 当前单词的前向/后向匹配
## 删除
x 删除一个字符
nx 删除n个字符
dd 删除当前行
d0 从行首删到光标前
d$ 从光标删到行尾
ndd 删除n行
diw 删除一个单词不包括空格
dw/daw 删除一个单词
dt{char} 删除到char的所有内容
[number]<command>[text object] ciw/s/p 删除单词/句子/段落(具体见图)
## 修改
r/R 替换一个字符/持续替换
(n)s/S 删除(n个字符)并进入插入模式/整行删除并进入插入模式
C 删除到整行第一个非空白字符前
caw 删除当前单词并进入插入模式
ct{char} 删除到char并进入插入模式
## 撤销
u 撤销
CTRL+r 反撤销
## 复制粘贴
yy 复制一行
yiw 复制一个单词
nyy 从光标所在行起复制n行
p 粘贴到光标所在下一行
P 粘贴到光标所在上一行
d 剪切
"{register} 指定寄存器 :red {register} 查看寄存器内容
"0 复制文本的同时拷到复制寄存器0
"+ 复制到系统剪切板
"% 当前文件名
". 上次插入的文本
# 代码格式化
>>/<< 当前行右移/左移一个tab
n>>/n<< 当前光标所在行向下n行右移/左移一个tab
gg=G 一键格式化
# MAN手册
K 查看光标所在函数的man手册(若指定类型,需在K前加数字类型)
Vim的宏(macro):分为录制或者回放,使用q
来进行录制以及回放,q{register}
选择要保存的寄存器,把录制的命令保存其中,@{register}
回放寄存器中保存的一系列命令。