Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
立即订阅
2105 人已学习
课程目录
已更新 8 讲 / 共 24 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词|我们为什么要学 Vim?
免费
导读|池建强:Vim 就是四个字“唯快不破”
基础篇 (6讲)
01|各平台下的 Vim 安装方法:上路前准备好你的宝马
02|基本概念和基础命令:应对简单的编辑任务
03|更多常用命令:应对稍复杂的编辑任务
04|初步定制:让你的 Vim 更顺手
05|多文件打开与缓冲区:复制粘贴的正确姿势
06|窗口和标签页:修改、对比多个文件的正确姿势
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

03|更多常用命令:应对稍复杂的编辑任务

吴咏炜 2020-07-29
你好,我是吴咏炜。
上一讲我们通过 Vim 教程学习了 Vim 的基本命令,我还给你讲解了 Vim 的基本配置,现在你就已经可以上手基本的编辑工作了。
今天,我们将学习更多 Vim 的常用命令,以便更高效地进行编辑。我会先带你过一下光标移动命令和文本修改命令,然后重点讲解文本对象,随后快速讨论一下不能搭配文本修改的光标移动命令,最后讨论如何重复命令。

光标移动

我们先来讨论一下可以跟文本修改搭配的光标移动命令。
通过前面的课程,你已经知道,Vim 里的基本光标移动是通过 hjkl 四个键实现的。之所以使用这四个键,是有历史原因的。你看一下 Bill Joy 开发 vi 时使用的键盘就明白了:这个键盘上没有独立的光标键,而四个光标符号直接标注在 H、J、K、L 四个字母按键上。
Lear Siegler ADM-3A 终端键盘的排布(图片源自维基百科)
当然,除了历史原因外,这四个键一直使用至今,还是有其合理性的。它们都处于打字机的本位排(home row)上,这样打字的时候,手指基本不用移动就可以敲击到。因此,即使到了键盘上全都有了光标移动键的今天,很多 Vim 的用户仍然会使用这四个键来移动光标。
不过,标准的光标移动键可以在任何模式下使用,而这四个键并不能在插入模式下使用,因此,它们并不构成完全的替代关系。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Vim 实用技巧必知必会》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(17)

  • qinsi
    c2i{真是神操作,要是我的话就只会通过V模式先选中再修改了。选这门课也是希望能看到更多这样的操作,即在同样的情况下有经验的人是如何做的

    作者回复: 是的。这个是特色功能。

    2020-07-29
    5
  • 我来也
    我的scrolloff好像配置到是1。

    最早一直是0,不知道还可以调这玩意。
    后来看网上别人设置的3,但体验后发现不太好,比较浪费空间。
    但是这个还有那么一点作用,所以就调成了1。

    另外,针对插入模式下,hjkl无法移动光标的问题,我很早就给他们映射了按键。
    Ctrl+hjkl在插入模式下移动光标,还蛮方便的。
    2020-07-29
    4
    4
  • 逗逼师父
    HHKB + VIM == 真香
    2020-07-29
    4
    3
  • Adoy
    "c2i{"那个动图是我买这个专栏的直接导火索哈哈哈,这节课看到"c2i{"就开心地跑去vscode试一下。然后发现vscode的vim插件不能实现。花了4小时帮他们debug出来,提交了pull request。。。。

    作者回复: 牛👍。正确使用开源软件的姿势。

    不过,vim-surround 这样的插件在 vscode 里还是没法装、用吧?

    2020-08-01
    2
    2
  • helloworld
    文本对象操作, 再补充一个常用的复制动作y

    作者回复: 补充得有道理!我比较少这么用。更常见是先用 v 选择,看清选择后,再 y 比较有信心。不过道理上讲,y 确实算。

    2020-07-29
    1
  • YouCompleteMe
    命令模式下的光标基于单词的移动,有什么好方法吗?感觉S-Left/Right比较麻烦。我一般都是^f切到命令历史,^c切回命令,对于输入一部分,发现有输入错误,想要修正比较麻烦

    作者回复: 推荐下面评论里“我来也”的方法。直接在命令历史(可以直接用 q: 打开)里编辑,编辑完直接回车即可执行。

    2020-07-29
    2
    1
  • Gin
    c2i{这个操作的效果在python代码中应该怎么实现呢。试了下cis cip都会删掉一整段代码...

    作者回复: 这个就是看大括号的,Python 里没有对应物。不过,Python 支持提供了 ]]、[[、]m、[m 这样的按键,你可以试试。

    2020-08-04
  • return
    老师 请教一下,
    文章中的 这一段,
    da" 会删除 "sesame open",结果是 if (message ==)
    这里 结果 为什么 不是 if (message ==␣) , 它为什么 多删除了一个 空格。
    而下面
    da( 或 da) 会删除 (message == "sesame open"),结果是 if␣
    它又没有删除空格。
    有点 区别对待的感觉。

    作者回复: 文档里描述就是这样的行为,至于有啥特别的历史原因,可能只能问 Bram 本人了……

    2020-08-02
    1
  • pyhhou
    受益匪浅

    有一个地方不太懂,那个 iTerm2 的功能是什么设置。因为自己用的也是 iTerm2,没配置过,也不知如何配置出老师的那个辅助定位到错误的功能

    作者回复: Preferences > Profiles > Advanced > Triggers

    2020-07-31
  • 青史成灰
    对于收起的代码块,有啥快速跳到收起后的代码块下一行

    作者回复: 不很理解问题。直接 j、<Down> 不就行了?

    2020-07-30
    3
  • helloworld
    "基本光标移动命令(可配合 c、d 和 v)" 结束语的这句话没太明白, 光标移动怎么结合c和d使用啊

    作者回复: 指 dw、dW 这样的正常模式命令。

    2020-07-29
    1
  • 1+x
    太有收获了,支持吴老师😄
    2020-07-29
  • 25ma
    https://github.com/25ma/vim-study-notes/blob/master/README.md 按照老师文档练习了一遍,部分按照自己的语言理解的 如有不正确,还请大家帮我指正 谢谢
    2020-07-29
  • 3.141516
    看到文本对象的操作真的是强大,但同时也有点复杂

    作者回复: 强大和复杂通常是挂钩的。😝

    2020-07-29
  • 绝尘而去
    补充两个上下移动的键,gj和gk,这两个可以在由于屏幕限制而导致的换行中使用。

    作者回复: 我没讲的功能永远有很多。🤣

    这两个按键,我后面倒是会讲到(拓展1)。它们的主要功用是在很长的文本行里,而非一般的代码。

    2020-07-29
  • Captain perison
    老师您好,在插入模式下使用标准的光标移动键似乎不是很方便,或者退出到正常模式然后使用hjkl,频繁切换模式也不方便,这个有什么好的替代方法吗?谢谢!

    作者回复: 没更好的。移动少就光标移动键了。移动多、或后续操作不是插入,就回到正常模式。

    2020-07-29
    8
  • 我来也
    文本对象确实应该是vim中的神器,其他编辑器没有普通模式,估计是不好实现这个了。

    文中的命令算是非常基础和全面的了。
    w/b/e/ge/W/B/E/gE ,0/^/$和f/t/F/T在行内跳转,还是很灵活的。

    另外推荐一个tpope的一个插件
    https://github.com/tpope/vim-surround

    这个和easymotion是vscode中vim内置的两个插件。都是非常强大的。
    https://github.com/easymotion/vim-easymotion

    作者回复: vim-surround 我后面会介绍的。

    2020-07-29
    1
收起评论
17
返回
顶部