Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
21753 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

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

编辑测试代码
宏录制
改造析构函数
编译错误处理
设置错误输出格式
设置编译环境
替换操作
搜索 smart_ptr.h 的使用
修改文件名和包含保护
修改类定义
启动 Vim
进入目录
调整测试用例
添加跟踪语句
编译执行(可选)
修改使用 smart_ptr 的地方
修改类定义
熟练应用Vim命令
思考不同的执行方式
适用性
编辑技巧
类模板 smart_ptr 更名
签出代码
实践操作
下一讲
课后练习
内容小结
开始前的准备工作
Vim 的代码重构实验

该思维导图由 AI 生成,仅供参考

你好,我是吴咏炜。
在前几讲中,我们已经学了很多关于 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/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文以作者吴咏炜在实战中提高编辑熟练度的实验为背景,通过一个假想的代码重构实验来复习、巩固已经学到的编辑技能。文章首先介绍了实验前的准备工作,包括签出示例程序的代码和准备工作环境。接着,作者以重命名示例的`smart_ptr`类模板为例,详细讲解了如何进行类定义和使用的修改操作,同时给出了在Vim中进行这些操作的具体命令和操作步骤。最后,作者提到了编译执行的操作,以及在编译过程中可能遇到的问题和解决方法。 文章通过实际操作的方式,帮助读者巩固Vim编辑技能,特别是在代码重构方面的应用。读者可以通过本文了解到作者的实战经验,以及在实际操作中如何运用Vim进行代码编辑和重构,对于想要提高编辑熟练度的读者具有一定的参考价值。文章还总结了编辑技巧的应用,包括使用 fzf.vim、tagbar、vim-eunuch等插件,以及替换命令、宏的使用等,强调了编辑的自动化和简单化,以及Vim作为程序员编辑器的灵活和强大。 总的来说,本文内容丰富,涵盖了丰富的编辑技巧和实战经验,对于想要提高编辑技能的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Vim 实用技巧必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 我来也
    老师的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
    5
  • Serenity
    学到这一课才发现,在这个网页里使用hjkl和左下上右按键的效果是一样的!

    作者回复: 没发现池老师也用 Vim 么?😝

    2022-03-10
    1
  • 进击的Lancelot
    吴老师,您好!请教一个问题,在重构过程操作中,我在 vim 中使用 :grep -R --include="*.cpp" --include="*.h" "\<smart_ptr\>" . 进行查找,然而什么都查找不到。在 Quickfix 的窗口中什么也没有显示。这是为什么呢?我在网上搜索,很多人都是说通过 :copen 打开 Quickfix 后就可以看到查询结果,然而我这边查询却什么也查询不到

    作者回复: 目录正确吗?什么平台?(Windows下默认似乎是用find。)

    2022-08-29归属地:上海
    2
  • chris
    cmake报错, 好像系统缺很多库, 老师能列一下依赖库吗? cmake .. -- Could NOT find Armadillo (missing: Armadillo_DIR) -- Found the following ICU libraries: -- uc (required) -- io (required) -- Could NOT find Armadillo (missing: Armadillo_DIR)

    作者回复: 这好像应该算是 C++ 那边的问题?;-) 这个问题平台相关。如果你用 Ubuntu 的话,主要需要的是: libarmadillo-dev libboost-all-dev libicu-dev ibspdlog-dev libssl-dev libtbb-dev 不一定全。另外,cpprestsdk 需要自己构建。

    2020-09-28
  • 瀚海星尘
    敲了几个小时,终于敲完了。看到 c++ 本来想逃过的,看到后面有输出,于是老老实实配了环境,编译执行,做起来发现其实也非常简单。。

    作者回复: 对,不复杂,做一遍就清楚了。

    2020-09-06
  • doge
    命令多敲才是王道了,反复敲了一下午,正则表达式也渐渐能看懂了。 另外就是之前按照老师说的配置的F5好像对cmake和make都没有支持,只能用AsyncRun make在build目录下执行才能实施编译。 宏录制确实有意思,想起以前该调试信息输入确实费时间啊。。

    作者回复: 对的,一定要多练习。 我的<F5>会需要使用第8讲里讲到的vimrc配置,你是不是缺了那部分?

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

    作者回复: 我在 Linux 和 Mac 上都测了一下,确实打开文件后,:ls 就只看到那一个缓冲区。 你 :ls 看到的另外两个是啥?Vim 版本多少,有没有可能是某个插件搞的鬼?

    2020-08-14
    3
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部