Loading

VIM 备忘

增加文本:

  • 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 find, 行内搜索一个字符
t 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

posted @ 2020-11-27 16:18  chalan630  阅读(166)  评论(0编辑  收藏  举报