寄存器
:reg
查看当前各个寄存器中的内容
vim中没有所谓删除,实际上都是剪切,黑洞寄存器除外
无名寄存器(”“)
x、s、d{motion}、c{motion}和y{motion}指令都会覆盖无名寄存器中的内容
复制专用寄存器(”0)
使用y{motion}指令时,复制的数据不仅会保存到无名寄存器中,还会在复制专用寄存器值保留一份。
使用:普通模式下
"0p
,插入模式下
<C-r>0
有名寄存器(”a-“z)
vim提供了一组一26个英文字母命名的有名寄存器
content,当前光标在t位置上,使用
"ayiw
可以复制到a寄存器中
如果换成大写字母引用的有名寄存器的话,表示对与之对应的小写有名寄存器的内容上的追加
例如:insurance,执行
"Ayiw
,再执行
:reg
查看寄存器中的内容,可以看到a寄存器中的内容变成了content insurance
黑洞寄存器(“_)
执行
"_d{motion}
表示vim将删除该文本
系统剪贴板(“+)与选择专用寄存器(“*)
在外部程序中用剪切或复制获取的文本可以通过
"+p
(插入模式下用
<C-r>+
)粘贴到vim内部中。相反地,如果再vim中复制或剪切指令想在外部程序使用,可以在之前加入
"+
。
鉴于Windows与Mac OS X操作系统没有主剪贴板的概念,所以
"+
和
"*
可以混合使用,更推荐使用
"+
寄存器。
文件
分割窗口
| 普通命令 | Ex命令 | 用途 |
---|
<C-w>s | :split 、:sp | 水平切割 |
<C-w>v | :vsplit 、:vsp 、:vs | 垂直切割 |
窗口切换
| 命令 | 用途 |
---|
<C-w>w | 在窗口键循环切换 |
<C-w>h | 切换到左边的窗口 |
<C-w>j | 切换到下边的窗口 |
<C-w>k | 切换到上面的窗口 |
<C-w>l | 切换到右边的窗口 |
关闭窗口
| 普通命令 | Ex命令 | 用途 |
---|
<C-w>c | :clo[se] | 关闭活动窗口 |
<C-w>o | :on[ly] | 只保留活动窗口,关闭其他所有窗口 |
标签打开及移动
| 普通命令 | Ex命令 | 用途 |
---|
| :tabe[dit]{filename} | 在新标签页中打开{filename} |
<C-w>T | | 把当前窗口移到一个新标签页 |
| :tabc[lose] | 关闭当前标签页及其他的所有窗口 |
| :tabo[nly] | 只保留活动标签页,关闭所有其他标签页 |
gt | :tabn[ext] | 切换到下一标签页 |
gT | :tabp[revious] | 切换到上一标签页 |
{N}gt | :tabn[ext]{N} | 切换到编号为{N}的标签页 |
动作命令
实际行和屏幕行间的移动
| 命令 | 用途 |
---|
gj | 向下移动一个屏幕行 |
gk | 向上移动一个屏幕行 |
g0 | 移动到屏幕行的行首 |
g^ | 移动到屏幕行的行首 |
g$ | 移动到屏幕行的行尾 |
//下面实际上只有三行,但是因为屏幕宽度不够所以变成了9行,所以9就是屏幕行
1 This is where the devil goes walking, looking with interest in at
the window of Dr. Guillotin, who works night and day to perfect
his humane killing machine, sharpening his angled blade on the
innocent necks of sheep.
2 Little does the earnest doctor know that his new design will be
center stage, a bloody altarpiece in the drama that is about to
unfold.
3 But wait, not so fast. King Louis XVI and his queen, Marie
Antoinette, are still outside Paris, at Versailles.
单词移动
| 命令 | 用途 |
---|
ge | 反向移动到上一单词的结尾 |
W | 正向移动到下一字符串的开头 |
E | 正向移动到当前字符串/下一字符串的结尾 |
B | 反向移动到当前字符串/上一字符串的开头 |
字符查找
| 命令 | 用途 |
---|
f{char} | 正向移动到下一{char}所在之处 |
F{char} | 反向移动到下一{char}所在之处 |
t{char} | 正向移动到下一{char}所在之处的前一个字符串(不包含{char}) |
T{char} | 反向移动到下一{char}所在之处的后一个字符串(不包含{char}) |
1.分隔符文本对象
以a开头的文本对象可以想象成around或者all
| 文本对象 | 选择区域 |
---|
a)或ab | 一对圆括号(parentheses) |
a}或aB | 一对花括号{braces} |
a] | 一对方括号[brackets] |
a> | 一对尖括号<angle brackets> |
a’ | 一对单引号’single quotes’ |
a” | 一对双引号”double quotes” |
a` | 一对反引号 `backticks` |
at | 一对XML标签<xml\> tags</xml\> |
例子:
<div>
click here
</div>
,执行
citContent
变成如下
<div>
Content
</div>
以i开头的文本对象可以想象成inside,表示只处理文本中里面的
内容,不包括分隔符
| 文本对象 | 选择区域 |
---|
i)或ib | 一对圆括号(parentheses) |
i}或iB | 一对花括号{braces} |
i] | 一对方括号[brackets] |
i> | 一对尖括号<angle brackets> |
i’ | 一对单引号’single quotes’ |
i” | 一对双引号”double quotes” |
i` | 一对反引号 `backticks` |
it | 一对XML标签<xml\> tags</xml\> |
2.文本块对象
| 文本对象 | 选择范围 |
---|
iw | 当前单词 |
aw | 当前单词及一个空格 |
iW | 当前字符串 |
aW | 当前字符串及一个空格 |
is | 当前句子 |
as | 当前句子及一个空格 |
ip | 当前段落 |
ap | 当前段落及一个空行 |
设置标记
m{a-zA-Z}
命令会用选定的字母标记当前光标所在的位置,小写字母只在每个缓存区局部可见,大写则是全局可见,其中跳转标记只是跳转到某一行的某个一位置上,与该位置在哪一个file上无关。
{a-zA-Z}
可以跳转到指定的标记处。
| 普通命令 | 用途 |
---|
“ | 当前文件中上次跳转动作之前的位置 |
`. | 上次修改的地方 |
`^ | 上次插入的地方 |
`[ | 上次修改或复制的起始位置 |
`] | 上次修改或复制的结束位置 |
`< | 上次高亮选区的起始位置 |
`> | 上次高亮选区的结束位置 |
gi | 用`^ 标记回复光标位置,并切换到插入模式(适合用于退出插入模式,接着在文档中四处游走,又想快速回到推出的地方继续编辑) |
跳转指令
| 命令 | 用途 |
---|
% | 跳转到匹配括号所在之处 |
(/) | 跳转到上一句/下一句的开头 |
{/} | 跳转到上一段/下一段的开头 |
gf | 跳转到光标下的文件名 |
<C-]> | 跳转到匹配当前光标所在的关键字的第一处标签(还可以跳入类内部) |
<C-t> | 读取上面命令的跳转历史记录(可以理解成后退查找) |
<C-i> | 单文件中前进一步 |
g<C-]> | 和<C-]> 类似,不过可以跳转到指定位置(关键字存多处匹配)IDE中无法使用 |
Z指令
| 命令 | 用途 |
---|
zz | 将当前行居中 |
zt | 将当前行置顶(top) |
zb | 将当前行置底(bottom) |
ZZ | 关闭活动窗口 |
zo | 打开折叠 |
zc | 关闭折叠 |
插入模式快捷键
| 命令 | 用途 |
---|
<C-h> | 删除左边的字符(容易和idea 的查看类继承热键冲突) |
<C-y> | 复制上方一个字符(打开智能提示的话也容易失效发生奇异的现象) |
<C-e> | 复制下方一个字符(同上) |
<C-w> | 删除光标左边的单词 |
<C-a> | 插入上一次插入模式所键入的内容 |
范围操作
| 命令 | 用途 |
---|
={范围} | 将范围内的代码自动缩进 |
gU{范围} | 将范围内的字符转换成大写 |
gu{范围} | 将范围内的字符转化成小写 |
用次数做简单的算术运算
普通模式下执行简单的算术运算。但是如果光标不在数字上的时候,执行
<C-a>
或
<C-x>
的命令,将在当前行正想查找一个数字,如果找到了,光标就直接跳转到那里。
注:Idea中也能使用 | 命令 | 用途 |
---|
<C-a> | 对数字执行加操作 |
<C-x> | 对数字执行减操作 |