1 | brew install --cask keycastr |
.ideavimrc
1 | let context_aware=0 |
注意: blank字符有空格、换行、tab、回车等等
加强记忆的组合按键(实际开发的时候很有用)
D === d$
C === d$i
S === ddi
{和}回到上一个或者下一个空行
% 切换对应的括号结束和开始
#和*快速切换指针所在的同名单词
d3k和d3j向上和向下删除3行
标记功能
当我们使用G按钮的时候(这里包括了{number}g),vim会记录下原来的跳转位置, ctrl+ i: 前进, ctrl + o: 后退
m{a-z}: 标记光标所在的位置,局部标记,只用于当前文件m{A-Z}: 标记光标所在位置,全局标记,标记之后,退出vim,重新启动,标记仍然有效- `{a-z} : 移动到标记位置
'{a-z}: 移动到标记为止的行首- ``: 来回切换这次和上次光标所在的位置
'': 来回切换这次和上次光标所在的位置,不过光标在行首- `. : 移动到上次更改的光标位置
'.: 移动到上次更改的光标位置的行首。:marks: 查看所有标记.:delmarks a b– 删除标记a和b。:delmarks a-c– 删除标记a、b和c。:delmarks a c-f– 删除标记a、c、d、e、f。:delmarks!– 删除当前缓冲区的所有标记。
基本操作
:wq 退出:e! 不保存,强制重新加载:q! 强制退出
屏幕移动相关操作
h,j,k,l分别用来上下左右移动
注意:如果是一行换行,j,k可能无法移动,使用gj,gk
H,M,L指针跳转到屏幕上方(Head),中间(Middle)和底部(Lower)zt将当前行置于屏幕的最上方zz将当前行置于屏幕的中间zb将当前行置于屏幕的最下方
ctrl + g显示当前位置ctrl + u/d 向上下滚动半屏ctrl + y/e 向上下滚动一行ctrl + b/f 向上下滚动一屏
gg返回文章到开头number + G/gg可以到达指定到行数
由 normal 模式 -> insert 模式:
i在指定单词前面插入,I在指定当行最前面插入a在指定单词后面插入,A在指定当行最后面插入o在指定行下方插入,O在指定行上方插入s删除光标所在字符,并进入插入模式cc删除整行,并进入插入模式(此处等于S)。
C删除光标往后的字符并把输入符号向前移动一个字符,ck,cl,ch,cj,cb,ce,c$等
由 insert 模式 -> normal 模式
ctrl+[退出 insert mode
normal 模式
移动光标
单词: 字母组成到单词、括号等字串: 空格、tab、换行分割的字符
^将光标移动到行首第一个非blank字符到位置g_将光标移动到行末第一个非blank字符的位置0将光标移动到行首,包括blank字符$将光标移动到行末,包括blank字符
+ 移动下一行的第一个字符- 移动到上一行的第一个字符
e移动到单词的结尾(从左往右移动)w移动到单词的开头(从左往右移动)b移动到单词的开头(从右往左移动)ge移动到上个单词的结尾(从右往左移动)
E移动到字串的结尾(从左往右移动)W移动到字串的开头(从左往右移动)B移动到字串的开头(从右往左移动)gE移动到字串的结尾(从右往左移动)
常用组合按键: v,c,d可以与方向移动键做出组合,下面是常用示例cw删除当前单词并进入insert模式,会保留下个单词前的空格dw删除当前单词,不会保留下个单词前的空格ea在当前单词的结尾处添加d^删除到行首,光标所在单词不会删除
其他常用指令
~字母转换大小写J删除换行符,可以使下一行合并上来,nJ连接后面的 n 行.记住上一次修改的动作,并重复
>添加缩进. >>缩进一个tab,>G到末尾的所有行缩进
搜索指令
/向后查找(模糊搜索)?向前查找(模糊搜索)v/c/d可以结合/,?进行选中和删除范围
*移动到下一个光标所在单词,可以使用n或者N记住上一步到操作,然后继续#移动到上一个光标所在单词,可以使用n或者N记住上一步到操作,然后继续
f{motion}移动到 motion 到单词上,从左往右。F{motion}移动到 motion 到单词上,从右往左。同时可以搭配;和,可以快速重复上一个动作t{motion}移动到 motion 到单词之前,从左往右。T{motion}移动到 motion 到单词之后,从右往左。同时可以搭配;和,
可以快速重复上一个动作v/c/d可以结合f选中/删除到范围都是从当前位置到搜索到的位置
复制指令
yy复制当前行,同时还可以推理出yw复制到下一个单词为止,yk,yl,yh,yj,yb,ye,y$等
删除指令
dd删除当前行,同时还可以推理出dw删除到下一个单词为止,dk,dl,dh,dj,db,de,d$等
D删除光标之后的单词
x删除光标所在的字符,X删除光标前的字符
粘贴指令
p在指针后面粘贴,P在指针前面粘贴
替换指令
r替换光标所在的字符,R逐个替换字符,可以依次修改整个语句
撤销指令
u撤销,U撤销当前行的所有操作ctrl + r redo 重做,恢复
可视化模式
v 基于字符的可视化选择V 基于行的可视化选择o 在 v 可视化状态下,可以切换可视区域光标的起始/终止位置O 光标移动到选中文本的另一个角落ctrl + v 基于块的可视化选择,用于处理多行文本gv 回到上一次选中到选择区域gb 快速选中当前单词,再次按gb继续往下选择相同的单词,然后可以统一修改
小技巧
在选中模式下,使用normal A.png就会默认在选中行添加A.png
在选中模式下,可以使用的参数
c删除选中内容,同时进入 insert 模式A和I多行编辑的时候可以使用d删除选中的文本D删除选中部分的文本,和d不同之处在于,既是选中文本中有些字符所在到行没有被选中,删除时也会一并删除y将选中部分复制到剪贴板p将剪贴板内容粘贴到光标之后,P将剪贴板内容粘贴到光标之前u将选中内容全部改成小写,U将选中内容全部改成大写>将选中内容右移一个 tab 键规定的长度<将选中内容左移一个 tab 键规定的长度
多指针模式
ctrl + q 进入多选择模式,可以有多指针
选中整体向上或者向下移动几行
假设光标在你想要移动的那一行上。
上下移动:m移动
:m +1 – 向下移动1行
:m -2 – 向上移动1行
(请注意,您可以用任何数字replace+1,具体取决于您想要向上或向下移动的行数,即+2会将其向下移动2行,-3会将其向上移动2行)
移动到特定的行
:set number – 显示号码行(更容易看到你移动到哪里)
:m 3 – 在第三行之后移动行(将3replace为您想要的行)
移动多行:
V (即Shift – V )并上下移动select器以在VIM中select多行
一旦选中:并运行上面的命令, m +1等
文本对象操作
[number] d,c,y,text object 是要操作的文本对象,比如单词
w,句子 s,段落 p
内/外部:
i: 内部a: 外部
对象
w: 一个单词, 内部: 单词本身, 外部: 单词本身 + 左右空格, 优先空格W: 一个字串, 内部: 字串本身, 外部: 单词本身 + 左右空格, 优先空格(,),b: 一对[],内部: 括号内部, 外部: 括号以及括号内部[,]: 一对[],内部: 括号内部, 外部: 括号以及括号内部{,},B: 一对{},内部: 括号内部, 外部: 括号以及括号内部<,>: 一对<>,内部: 括号内部, 外部: 括号以及括号内部t: html 文本': 一对单引号,内部: 括号内部, 外部: 括号以及括号内部": 一对双引号,内部: 括号内部, 外部: 括号以及括号内部
反引号: 一对反引号,内部: 括号内部, 外部: 括号以及括号内部s: 一个句子,以.!?结尾p: 一个段落,以空行分隔,内部选中该段落,外部还会选中下面的空行
寄存器操作
:reg 查看所有寄存器:[a-z] 重置寄存器到值:[A-Z] 添加值到寄存器
缓冲区操作
:ls 查看所有打开文件:b + n 可以跳转到对应文件:b + pre 跳转到前一个文件:b + next 跳转到后一个文件:b + first 跳转到第一个文件:b + last 跳转到最后一个文件:b + buffer_name 加上 tab 补全跳转
屏幕分割
ctrl + w 窗口循环切换
必须先按下ctrl + w:w window,切换到下一个窗口r reverse,互换窗口c close,关闭当前窗口,不能关闭最后一个窗口q quit 退出当前窗口,如果是最后一个窗口,则关闭 vimo other 关闭其他窗口:sp 横向分屏:vsp 纵向分屏
替换命令:substitute
公式:: [range]s[ubstitute]/{pattern}/{string}/[flags]
公式中[]内是可选的,{}内是必填的
range 表示范围
%:表示替换全文;number1,number2:表示替换number1行到number2行;$表示替换到文件尾部,可以和number配合,比如number,$或$,number;- 也可以使用可视化模式选择范围
s[ubstitute]: 表示替换命令,可以简写为s,全称为substitute
pattern: 表示被替换的字符,可以输入正则表达式
string: 表示替换的字符
flags: 取值有两个:
g表示全局替换,如果不加g,默认只替换每行第一个匹配到的字符。c会弹出对话框,询问是否替换,输入y表示替换当前字符,n表示不替换当前字符,a表示替换所有,q表示退出,l
表示替换当前字符并退出。可以多个flag一起使用,比如gcn统计数量
输入命令按回车后即执行替换命令,如果切换到 normal 模式,不执行替换命令,类似预览,可以先预览看看是不是我们要替换的结果,如果是就按回车,否则按
Esc
小知识:当使用可视化模式选择多行又退出可视化后(选择执行完其他命令后 Esc),’< 会跳转到刚才可视化选择的起始位置,’>
会跳转到刚才可视化选择的结束位置
:s/old/new - 用 new 替换当前行第一个 old。
:s/old/new/g - 用 new 替换当前行所有的 old。
:n1,n2s/old/new/g - 用 new 替换文件 n1 行到 n2 行所有的 old。
:%s/old/new/g - 用 new 替换文件中所有的 old。
:%s/^/xxx/g - 在每一行的行首插入 xxx,^表示行首。
:%s/$/xxx/g - 在每一行的行尾插入xxx,$表示行尾。
有替换命令末尾加上 c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上 i 则忽略大小写(ignore)。
宏操作
q 录制和结束录制宏q[a-z]选择要保存的寄存器,把录制的命令保存到其中@[a-z]回放寄存器到一系列命令
ctrl + v 选中所有, :normal @a所有行执行宏
快速替换一个单词
yiw复制指定单词
viwp粘贴指定单词
小技巧Tips
熟练应用
.,他会记住上一次的动作a+$+esc使用一次之后,可用.代替,不要自我重复减少无关的移动,多使用复合命令
复合命令 等效长命令 C c$ s Cl S ^C I ^i A $a o A O ko f和t可以通过;和,进行重复和回退gv回到上一次选中到选择区域可视化模式下
U可以把选中内容大写