增加文本:
- a/A(append)
- i/I(insert)
- o/O(open a line)
删除:
- d(delete)
- dw(delete word)
- dd(删除一行)
- x(删除一个字符)
- dty(delete to y)删除到y字母以前
修改:
- c(change)
- ciw(change inner word)
- ct):修改到右括号
- ci":修改引号内的
- gcc(go comment):注释一行
查:
-
fs:本行中搜索's',
;
查找下一个 -
Fs:反向查找's'
-
/name:查找'name'单词
定位:
- 0:回到开头
- $:去到结尾
- w(word):移动到下一个单词开头
- b(back word):移动到上一个单词
- e(end):移动到单词最后一个字母
- :18:移动到18行
- 14G:移动到14行
- gg:文件开头
- G:文件结尾
- ctrl+f(forward):上一页
- ctrl+u(upward):下一页
- ctrl+o(old):光标退回上一个位置
- ctrl+i:光标前进到下一个位置
- zz:将当前行置于页面中间
- %:跳转到与之匹配的另一个括号
- *:锁定变量进行搜索,按
n
下一个,按N
上一个。
EasyMotion 文件内快速跳转
,,j
按下后,会在每一行的行首高亮且有一个字母标在高亮处,这时输入指定字母就可以跳过去了,这个可以说是起飞的关键之一,必须要熟练掌握,,k
上面是向下搜索,这个是向上,其他都一样,,w
同,,j
,只不过是单词级的向后搜索,,b
同,,k
, 只不过是单词级的向前搜索(,,w
,,b
不如行级好用,因为太花了,我们可以用行级 Jump 到指定行,再用 f 过去,或者按几个 w 也可以,如果靠近行尾,可以先按$到行尾再按几个 b,方法很多。
对一个单词进行操作
这里先说两个概念,操作符(operator)和动作命令(motion), 操作符就是 d(delete)
, c(change)
, y(yank)
等等,动作命令是iw(in word)
, aw(a word)
这些,可以通过 操作符 + 动作命令
的方式,组合出千变万化的操作出来,帮助我们快速移动、修改等等。
1 操作符(Operators)
操作符 | 功能 |
---|---|
c | change (先删除再进入插入模式) |
d | delete |
y | yank into register (does not change the text) |
~ | swap case (转换大小写) |
gu | make lowercase (转为小写) |
gU | make uppercase (转为大写) |
> | shift right (右移) |
< | shift left (左移) |
2 动作命令(Motions)
动作命令 | 功能 |
---|---|
f{char} | find, 行内搜索一个字符 |
t{char} | till, 功能类型 f{chat}, 但是是在这个搜索到的字符前停下,意思是到这个字符之前,很常用的motion |
gg | 跳到行首 |
G | 跳到行尾 |
w | 移到下个单词的第一个字符 |
b | 移到上个单词的第一个字符 |
e | 移到单词最后一个字符 |
ge | 上个单词的最后一个字符 |
aw | “a word”, 选择一整个单词,包括它边上的空格 |
iw | in word, 选择一整个单词,不包括空格 |
3 举例:
diw
, delete in word, 删除一个单词,只删除单词本身,不会旁边的空格daw
, delete a word, 删除一个单词,并删除旁边的一个空格(至于是左还是右边空格,Vim 会根据上下文自己判断,非常智能)d
是删除,diw
就是删除一个单词v
是进入 visual 模式的,如果用viw
, 就表示选中一个单词y
是复制(yank),yiw
表示复制一个单词gu
是变成小写,guiw
就是让一个单词变成小写gU
是变成大写,gUiw
就是让一个单词变成大写
把一个单词改成另一个(通过复制)
比如有下面一段代码:
local _hello = true
function test()
print(_world)
end
-- 用复制的方式把 _world 改成 _hello
12345
这个问题看起来很简单,但实际上用起来后就会发现并不简单,我们用鼠标时的操作逻辑是下面这样的:
- 双击 _hello,Ctrl+C 复制
- 双击 _world,Ctrl+V 粘贴
想象中的 Vim 操作逻辑是下面这样的:
- 光标移到
_hello
,yiw
复制 - 光标移到
_world
,diw
删除,再p
粘贴
这时你会发现,咦,贴出来的还是 _world
, 而不是期望中的 _hello
, 这是因为 Vim 里的删除,实际上是剪切,会把删除的东西放到“剪切板”里,所以我们不能这样操作,而应像下面这样操作:
- 光标移到
_hello
,yiw
复制 - 光标移到
_world
,viw
选中,再p
粘贴
这个操作是目前的最优解。
回到上一个编辑点
ctrl+o
, 回到上一个编辑点ctrl+i
, 前进到下一个编辑点,和上面的相反方向gi
, 回到上一个进入插入模式的地方,并进入插入模式,这个在写代码时写到一半想看一下其他地方的代码,看完再按下gi
回去,当然也可以ctrl+o
回去。
分栏
:vs
, 创建一个竖向分栏:sp
, 创建一个横向分栏
在创建多个分栏后,怎样在分栏之间移动?总不能用鼠标吧!当然不需要,下面就是移动分栏的方法:
- 先按
ctrl+w
再按h
, 移到左边一个分栏 - 先按
ctrl+w
再按l
, 移到右边一个分栏 - 先按
ctrl+w
再按j
, 移到下边一个分栏 - 先按
ctrl+w
再按k
, 移到上边一个分栏
插件管理:
-
:source ~/.vimrc:重新加载
-
:PlugStatus:检查状态
-
:PlugInstall:安装
-
:PlugUpdate:更新插件
-
:PlugClean:删除一个插件
-
:PlugUpgrade:升级vim-plug