Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
新⼈⾸单¥19.9
2291 人已学习
课程目录
已更新 15 讲 / 共 24 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词|我们为什么要学 Vim?
免费
导读|池建强:Vim 就是四个字“唯快不破”
基础篇 (10讲)
01|各平台下的 Vim 安装方法:上路前准备好你的宝马
02|基本概念和基础命令:应对简单的编辑任务
03|更多常用命令:应对稍复杂的编辑任务
04|初步定制:让你的 Vim 更顺手
05|多文件打开与缓冲区:复制粘贴的正确姿势
06|窗口和标签页:修改、对比多个文件的正确姿势
07|正则表达式:实现文件内容的搜索和替换
08|基本编程支持:规避、解决编程时的常见问题
09|七大常用技巧:让编辑效率再上一个台阶
10|代码重构实验:在实战中提高编辑熟练度
提高篇 (2讲)
11|文本的细节:关于字符、编码、行你所需要知道的一切
12|语法加亮和配色方案:颜即正义
拓展篇 (1讲)
拓展1|纯文本编辑:使用 Vim 书写中英文文档
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

10|代码重构实验:在实战中提高编辑熟练度

吴咏炜 2020-08-14
你好,我是吴咏炜。
在前几讲中,我们已经学了很多关于 Vim 的知识,现在需要好好消化一下。今天是基础篇的最后一讲,我们就基本上不学新的内容了,而是通过一个假想的代码重构实验,来复习、巩固已经学到的编辑技能。

开始前的准备工作

这是一堂实验课,你需要跟着我一步步地操作。跟只学习文字内容相比,实践操作能让你收获更多。所以,就请你现在把电脑准备好,跟我来吧。
今天我们将要做的是,签出我为极客时间写的 C++ 示例程序,并对其中的代码进行重构。别紧张,你不需要精通 C++,因为我会在必要的时候对代码进行解释。你学习的重点在于,我是如何进行编辑的,而不是我写的代码是什么意思。
首先,你需要先为工作代码找一个合适的父目录,然后用下面的命令签出代码(Windows 下面去掉“\”全部写一行,或者把“\”换成“^”)):
git clone --recurse-submodules \
--shallow-submodules \
https://github.com/adah1972/geek_time_cpp.git
万一我以后更改代码的话,就有可能造成内容或路径发生变化。所以,请把我们今天编辑的 commit id 记下来:632b067。如果你用 git log 看到 HEAD 的 commit id 不是它,可使用 git checkout 632b067 这个命令来签出跟今天完全相同的版本。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Vim 实用技巧必知必会》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(2)

  • 我来也
    老师的git submodule用的溜啊.
    克隆一个仓库,出来了一大溜.
    这个git子模块的功能我只是粗略知道,但还没用起来过.

    另外,建议给commit:`632b067`打一个方便记的标签或分支.

    # 如果是我来做这次的重构,有些地方我会这么做.(仅供参考)

    1. 打开文件的操作我会这么做
    `grep -lr smart_ptr * | xargs -o vim`
    grep的`-l`参数是只显示文件名,`-r`的操作是表示递归的在子目录中查找.
    后面的`|`表示管道,把第一部分的结果当做第二部分的输入.
    `xargs -o vim`表示在vim中打开这些找到的文件.

    其实这套组合命令是非常常用的.
    我甚至给`xargs -o vim`取了个别名:`alias xov="xargs -o vi"`

    2. 如果是已经打开了某个文件,需要在当前目录及子目录中查找相关内容,
    我会用之前创建的映射键`F3`去搜索.
    如果是想批量打开quickfix列表中的所有文件,可以参考这个.(https://gist.github.com/larsthegeek/4063239)

    3. 如果是批量替换`smart_ptr`为`gt::shared_ptr`,以前我也会用`.`命令或者正则替换.
    但是现在,我又多了一个选择,就是用之前介绍的[vim-visual-multi](https://github.com/mg979/vim-visual-multi)
    它不需要写正则(不需要考虑各种特殊字符的转义),也不用频繁的使用`n`去跳转,而且修改的过程还很直观.
    (不像Ctrl+v的列编辑模式,只有退出了编辑模式才能在其他地方看到效果)

    另外,推荐一个以前我会用的骚操作`gn`.
    配合操作符`cgn`去编辑,后面都不需要按`n`,而直接按`.`命令.
    就可以实现跳转到下一处匹配,并执行刚才的修改操作.
    这个方法的缺点,就是无法跳过某些不想修改的匹配处.

    4. cmake我不太熟,但我习惯于写Makefile文件,把常用的编译和运行命令放在其中.
    这样配合`vim-dispatch`插件,可以很方便的异步调用编译命令.

    5. 在命令行的替换模式中,使用上次的搜索模式,可以偷点懒.
    `:help /<CR>`,其实不用输入具体的模式,也是可以直接复用上次的模式.
    但是这个也存在一个问题,不便于后面复用该替换命令.(因为后面的`/`寄存器的内容已经发生了变化)

    6. 在做重构前,我会习惯性的备份之前的内容.重构完成后,核对一遍本次的修改是否正确.

    作者回复: 我们干的事情是在那个项目的外部,在那个项目上打标签不好。

    CMake 很好,推荐。在 Unix 平台上它默认生成 Makefile,后面你仍然可以用 make 命令。

    2020-08-14
    3
  • YouCompleteMe
    老师,怎么启动vim的,我:Files到smart_ptr。buffer number是3

    作者回复: 我在 Linux 和 Mac 上都测了一下,确实打开文件后,:ls 就只看到那一个缓冲区。

    你 :ls 看到的另外两个是啥?Vim 版本多少,有没有可能是某个插件搞的鬼?

    2020-08-14
    2
收起评论
2
返回
顶部