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
一起使用,比如gc
n
统计数量
输入命令按回车后即执行替换命令,如果切换到 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
可以把选中内容大写