Vim技能修炼教程(4) - 基本功

基本功

前面我们学会了插件管理器和如何实现语法高亮,相信大家已经从中体会到了vim插件的强大功能。现在,是时候回来补一补基本功了。
Vi有三种主要模式,正常模式,插入模式和可视化模式。正常我们推荐的方式是所有的移动命令只在正常模式下进行,只有在修改的时候再进入插入模式。
这个切换是如此频繁,所以Vi提供了很多快速切换模式的命令。Vim的难学之处之一就是命令太多。

模式切换的好处

如《Practical Vim》中第8条所说,正常模式和插入模式的切换,可以为撤销编辑带来方便。在没有模式切换的文本编辑器中,编辑器是很难确实您撤销一次是打算撤销一个字符,或者是一个单词还是更大的粒度。而在Vi中,这不是问题,在输入时进入插入状态,输入结束了就Esc退回正常模式。这一过程就构成了一次可撤销的动作。

基本移动命令

行内移动

  • h: 向左一个字符
  • l: 向右一个字符
  • 0: 移动到行首
  • ^: 移动到行首第一个非空的字符
  • $: 移动到行尾
  • g_: 移动到行尾第一个非空的字符
  • 列号|: 精确移动到列号

跨行移动

  • j: 向下一行
  • k: 向上一行
    也可以用emacs的C-n和C-p来上下翻。
  • G: 跳到第n行,默认跳到行尾。
  • gg: 跳到第1行
  • +: 到下一行的第一个字符
  • -: 到上一行的第一个字符
  • ``:G跳转之后,跳回原来的行
  • '': 功能同``,但是停在行首

vi还支持跳转的书签功能,使用m[a-z]命令,可以定义26个书签。

  • m{书签名}: 定义书签
  • `{书签名}:跳转到书签定义时的光标位置
  • '{书签名}: 跳转到书签定义位置的行首

按单词移动

  • w: 按单词移动,标点符号也算一个单词
  • W: 按单词移动,标点符号算在单词内
  • e/E: 移动到单词结尾(大写忽略标点符号)
  • b/B: 按单词向前移动(大写忽略标点符号)

滚动一整屏

  • C-f 向前一屏
  • C-b 向后一屏
  • C-d : 向前半屏
  • C-u: 向后半屏
  • C-e: 屏幕上滚一行
  • C-y: 屏幕下滚一行

重新调整屏幕位置

  • z: 光标移至屏幕顶
  • z.: 光标移至屏幕中心并滚屏
  • z-: 光标移至屏幕底并滚屏

重绘屏幕

  • C-l: 重绘屏幕

在当前屏幕中移动

  • H: 移至屏幕第一行
  • M: 移至屏幕中间
  • L: 移至屏幕底部

切换进插入模式的命令

  • i: 在光标前插入字符
  • a:在光标后插入字符
  • A: 在一行的结尾处插入字符,相当于$a组合。
  • I: 在一行的开头插入字符,相当于^i组合。
  • o: 在光标的下一行新开一行进行插入,相当于A<CR>
  • O: 在光标的上一行新开一行进行插入,相当于ko
  • s: 删除光标处的字符再进行插入
  • S: 删除光标所在行再进行插入
  • r: 替换当前字符
  • R: 替换当前行的字符,可以提前Esc退出,相当于^c
  • c: 更新文本,就是先删除部分文本再插入
  • cw: 更新当前单词
  • c2b: 更新光标之前的两个单词
  • c$: 更新光标处到行尾
  • C: c$的简写
  • c0: 更新光标处到行首
  • cc: 更新行,跟S效果一样

Vi命令的一般形式

在继续学习更多命令之前,我们先看一下vi命令之所以强大的原因,因为vi的命令并不仅仅是简单的单独命令,而是可以进行组合。

vi命令的一般格式是:{操作符}{次数}{文本移动命令} 或者 {操作符}{命令}{文本移动命令}

上面学习的c命令就是很好的例子,比如c2b,c是命令,2是两次,b是后退

同样,对于用于删除的d命令,删除当前单词,就把cw换成dw就可以了。d$是删除从光标到行尾。与C是c$的别名一样,D是d$的别名。

复制命令y,也是同样的用法。

在vim中,文本移动命令被扩展成文本对象。
最常用的文本对象命令有:

  • aw: a word,单词不计空格
  • iw: inner word, 单词,计空格
  • as: a sentence,一句
  • is: inner sentence
  • ap: a paragraph,一段
  • ip: inner paragraph
  • a" a' a`: 一个字符串

常用的操作符有:

  • c: 改变
  • d: 删除
  • y: 复制
  • g~: 切换大小写
  • gu: 转成小写
  • gU: 转成大写
  • =: 自动缩进
  • gq: 文本格式化
  • : 增加一级缩进

  • < : 减少一级缩进

粘贴

  • p/P: 命令用于粘贴用d命令或y命令剪切或复切的文本

切换大小写

  • ~: 切换大小写

重复和撤销

  • . : 重复上一条命令
  • u: 撤销上一条命令
  • U: 将一整行恢复到原来的状态

不退出插入模式进行编辑

Vi推荐主要工作时间都停留在正常模式,但是如果您非习惯于在编辑模式进行编辑,Vim也是提供在这个模式下工作的命令的。
比如,我们最经常发生的事情就是输错了字符要修改。

这时候我们有三大利器可以使用:

  • C-h: 退格删除前一个字符
  • C-w: 删除前一个单词
  • C-u: 删除到行首

另外,我们还可以通过C-o + 正常模式的命令这种方式来节省切换的动作。

搜索

全文搜索

"/"用来进行向下搜索,"?"则是向上搜索。搜索下一个用n,上一个用N.

vi的强大之处在于,搜索的结果仍然可以跟其他命令结合,比如跟d结合删除。

行内搜索

除了全文搜索,行内搜索也是快速编辑的有效手段。以vi的风格,也是为我们提供了多种行内搜索的方法:

  • f{字符}:向后搜索字符
  • F{字符}:向前搜索字符
  • t{字符}:向后搜索字符,不过定位在该字符之前的字符上
  • T{字符}:向前搜索字符,定位在该字符之前的字符上
  • ;:重复上一次的搜索,方向相同
  • , : 重复上一次的搜索,方向相反

搜索仍然是可以跟操作命令结合,比如df{字符},删除到某字符为止的内容。

缓冲区

当我们使用d命令删除一段文本时,它们会被依次存入0-9号这10个缓冲区中。除了这10个自动缓冲区之外,vi还支持a-z一共26个命名的缓冲区。

我们使用双引号"用来指示对缓冲区的访问。比如:"2p,将2号缓冲区的内容粘贴到当前光标处。

不过,记住自动放到哪个缓冲区位置还是一件反人类的事情,更好的办法是,使用命名的缓冲区。vi提供了26个命令缓冲区,分别用a-z 26个字母表示。

从此我们的剪切、复制和粘贴的功能就更丰富了。比如"add,将当前行剪切放入a缓冲区。粘贴时使用"ap。再如:"b10yy,将当前开始的10行复制到b缓冲区。

vi作为一个功能过剩的编辑器,当然不只这么简单了。它还支持对于缓冲区的内容进行追加,方法很简单,使用缓冲区的大写字母名移,比如"Byy,将当前行追加到b缓冲区内容的末尾。

黑科技

针对文本中的数字进行运算

这个黑科技太好玩了,如果光标处是一个数字的话,可以通过C-a来对其进行+1操作,C-x进行-1.
如果要多加减几次,就先给个数字就好了。

这还不够黑科技,C-a和C-x还有搜索功能,如果当前光标不是一个数字,vim会先搜索到下一个数字,再对其进行操作。对于大量数字文本要操作的情况,实在是太方便了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,087评论 9 467
  • Vim几句话介绍Vim是Unix系统上的文本编辑软件(你该不会不知道什么是文本编辑软件吧!),在windows上也...
    何必遠方阅读 3,116评论 0 3
  • 曾经在思科的工厂测试系统`KlemTest` (`SUSE`命令行模式)中使用`VI`/`VIM`超过2年半,现在...
    戈多在地狱阅读 1,781评论 1 13
  • 第二轮,家庭出行,集体泡温泉。 昨天晚上就开始下雨,果然今早仍然继续下着。躺床上听着雨声,还以为计划就取消了。结果...
    盧sir阅读 179评论 0 0
  • bdsbf
    红昔昔阅读 54评论 0 1