一星期入门Vim

前言

都说使用了Vim后,编程体验倍感丝滑,无奈起步坡度确实有点陡,总让人望而却步。

我之前尝试过Vim两次以上,每次都都因为搞不清其各种模式、各种按键命令,而用起来总磕磕绊绊,每次坚持不超过一个下午就放弃。

但是每次逛一些技术社区,总看到各路大神不经意地说一句Vim,又总觉得如此强大之物,不去一番体验,实在遗憾,心里又痒痒。

结合当前的状况:

  1. 每个IDE的快捷键总是Ctrl、Alt、Shift加其他键组合,按键频率左右手分配不均,使用多了总感觉小拇指有些发通
  2. 无法离开鼠标,无法形成流畅的工作流,每次编码正起劲,但是要做点调整,双手不得不停下来,右手离开键盘,去握住鼠标,看着光标移动,最后点一下,深感到非常不适的割裂感

以下则是我觉得必须体验一番Vim的主要理由:

  1. 听说Vim本身编辑器非常灵活,各种强大功能都可以定制出来。
  2. 另外使用Vim插件+现代编辑器,可以使用Vim键盘流操作无缝切换到各种现在编辑器,不会Vim的,换一个编辑器就得重新记其快捷键,这样看来Vim虽然前期体验可能较为痛苦,但是学会了可能一劳永逸,综合起来,用来记住快捷键的时间应该是比非使用Vim的要少的
  3. Vim的键盘流不仅可以在编辑器上使用,基于其理念开发出的各种插件,还可以在浏览器、命令行等地方使用,大多数情况基本能抛弃鼠标,这对于钟爱键盘操作的我来说实在诱惑巨大

于是,我决定再一次出发,还好这次终于坚持下来了,记录一下本次经历。

首先我改用Google搜索学习资源,然后发现一些很好玩和有用的东西,比如有些网站把学习Vim做成一个游戏,让你在游戏中使用Vim的命令操作,这篇 博客 列举出学习Vim的一些好网站。

最后我选择 Vim Genius 这个网站作为学习阵地,它把Vim常用的几个命令分成几个关卡,让你一个个地去学,每学一个关卡后都让你用键盘按着要求输入所学的命令,每个命令都会重复几次,确保你能够记住,并且不能跳过和不能任意选择后面的关卡。

我的学习方法是这样的:

  1. 先使用Vim Genius学习一个关卡并完成关卡的练习,然后把学到的命令记录下来
  2. 边学边记录命令的一些规律,其实Vim的键位设置是有规律的,找出其中的规律,可以帮助我们快速记住,并且能举一反三。如大写表示对整行或者反方向操作,两个重复小写表示对整行操作等
  3. 不要急于求成,不要一天就刷完Vim Genius,我想如果不扎实地做上面的练习并且做记录,那刷新了估计也马上就忘了,因此我每天只刷两个关卡左右,每天早晚饭之后刷一次,这样总共7个关卡,用三四天就刷完了
  4. 刷完了Vim Genius以后就实战了,我使用 idea+ideavim插件 作为实战阵地,首先,开始用要求不要高,先学会了最基本的操作,能够会增删改查、复制粘贴就可以,不要把Vim看做拯救你的神,而是先把Vim当做一个普通的编辑器来使用
  5. 学会了基本的操作后,遇到还不顺手的地方再查相关的命令即可,慢慢地进步

使用以上方法,先在Vim Genius上刷三四天的基本命令,然后再咬着牙坚持实战三四天,一个星期结束,此时使用Vim,至少能够达到像用Windows记事本的效率了,算是基本入门了,后面再慢慢学高级特性就快多了。

回头再看看Vim已经不再是一座不知从哪开始的高山,而是平滑的坡里隐隐看到有一条小道可从中穿过

最后,奉上我记录的命令和总结的规律,有误的欢迎指出。

  • 注:使用-号作为释义和命令的分隔符

规律

  • 大写表示对整行或者反方向操作
  • 两个重复小写表示对整行操作
  • 数量放在命令单位前面完成批量操作:单独的每个命令可以完成的事,可以称为该命令的命令单位,如w的单位为一个单词,dd的单位为一行,则可以在命令前加数量,使之批量操作,如3w、2dd,d2w,其中d2w,数量2后面为w,则表示操作单位为w(单词),操作为d,因此表示删除2个单词
  • 选择单词:从光标位置选择到单词末尾,并非从单词首字符开始选择
  • ^表示行首字符,$表示行尾字符
  • l表示向后(last),h表示向前(head)
  • w表示保存(write)和单词(word)
  • x表示关闭、剪切
  • w表示保存、单词
  • g表示跳转
  • c表示更改
  • p表示粘贴(paste)
  • d表示剪切、删除(delete)
  • r表示替换(replace)
  • e表示编辑(edit)或末尾(end)

vim文档特殊按键标记(key-notation)

  • <CR>:确定键
  • <C-大小写字符>:ctrl+对应字符

模式

  • 回正常模式(Normal Mode)-Esc
  • 入命令行模式(Command-Line Mode)-:
  • 入替换模式(Replace Mode)-R,相当于普通编辑下按Insert键
  • 入可视模式(Visual Mode)-v,打开此模式便于选择
  • 入可视模式并选择光标下的单词-vw
  • 入可视模式选择光标下的单词并删除-vwd或vwx

文件

  • 闭文件-:q
  • 闭文件但不保存-:q!
  • 存文件-:w
  • 闭文件并保存-:x或:wq或:ZZ
  • 存文件为play.rb-:w play.rb
  • 入文件hat.rb-:r hat.rb

输入

  • 光标前输入-i
  • 行首输入-I
  • 光标后输入-a
  • 行尾后输入-A
  • 下方添加新行-o
  • 上方添加新行-O

跳转

  • 下左右-kjhl
  • 到下一个单词的首字符-w
  • 后跳到第3个单词前-3w
  • 前跳到单词首字符-b
  • 后跳到单词尾字符-e
  • 后跳到第3个单词后-3e
  • 到上一个单词尾字符-ge
  • 到当前行的最后一个字符-$
  • 到当前行的第一个字符-^
  • 到行首-0
  • 到第50行-50G或:50
  • 到最后一行行首-G
  • 到第一行行首-gg
  • 到匹配的闭合括号-%
  • 到上一次光标位置-ctrl+o
  • 到下一次光标位置-ctrl+i
  • 翻一屏(forward)-ctrl+f
  • 翻一屏(back)-ctrl+b
  • 翻半屏(down)-ctrl+d
  • 翻半屏(up)-ctrl+u
  • 下滚动(extra)-ctrl+e
  • 上滚动-ctrl+y
  • 当前光标位置垂直居中-zs

撤销重做

  • 销-u
  • 行撤销-U
  • 做-ctrl+r

查找

  • 下查找“waldo”-/waldo
  • 上查找“carmen”-?carmen
  • 到下一个查找结果-n
  • 到上一个查找结果-N
  • 置查找忽略大小写-:set ic或者:set ignorecase
  • 置查找区分大小写-:set noic或者:set noignorecase

更改替换

  • 改光标下的字符-r
  • 改单词-cw,即删除从光标处到单词结尾并进入编辑模式
  • 后更改3个单词-c3w
  • 后更改3个字符-c3l或3s
  • 前更改3个字符-c3h
  • 改到行尾-C或c$
  • 当前行用good替换bad-:%s/bad/good
  • 整个文件用bye题号hi-:%s/hi/bye/g
  • 整个文件用y替换x并出现更改提示-:%s/x/y/gc,会高亮所有可被替换的位置,并需要一个个选择是否确认替换

剪切

  • 后剪切3个字符-3x或d3l
  • 前剪切3个字符-3X或d3h
  • 后剪切2个单词-d2w
  • 视模式下剪切选中内容-d
  • 切到行尾-D或d&
  • 切整行-dd
  • 切两行-2dd

复制粘贴

  • 制单词-yw
  • 入可视模式选择单词并复制-vwy
  • 制整行-yy
  • 制到行首-y0
  • 制到行尾-y$
  • 贴到光标后-p
  • 贴到光标前-P

寄存器

  • 用方式:"寄存器名+操作命令
  • 看帮助-:help register
  • 看所有寄存器内容-:reg
  • 名(默认)寄存器-"",存放最近一次内容
  • 字寄存器-"0"9,存放最近29次内容
  • 名寄存器-"a~"z,可以通过名称选择把内容存入指定寄存器
  • 择和拖拽(系统)寄存器-"*、"+、"~,连接系统粘贴板
  • 制单词到a寄存器-"ayw
  • 贴a寄存器的内容-"ap
  • 贴系统粘贴板的内容-"+p
  • 命令行模式粘贴默认寄存器的内容-ctrl+r+"
  • 命令行模式粘贴系统粘贴板的内容-ctrl+r+*

代码

  • 改、剪切、复制包围光标的配对字符之间的内容-ci+配对字符的前字符
  • 改、剪切、复制包围光标的配对字符之间的内容(包括配对字符)-ca+配对字符的前字符
  • 行向左、右缩进-3<<、3>>
  • 图模式下向左、右缩进选中的行-<、>

其他

  • 用shell运行命令ls-:!ls
  • 开新文件sun.rb-:e sun.rb
  • 看命令w帮助-:help w
  • 常模型下反转光标下字符大小写-~
  • 视模式下转换为大写-U,转换为小写-u
  • 置光标上下至少有5行可见-:set scrolloff=5,可用于设置光标一直垂直居中
posted @ 2018-06-24 17:28  woncode  阅读(208)  评论(0编辑  收藏  举报