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

拓展2|C 程序员的 Vim 工作环境:C 代码的搜索、提示和自动完成

配置
安装
配置
安装
使用
创建 Cscope 数据库
安装和配置
Alt-= 和 Alt-- 切换
EchoFunc 插件
--c-kinds=+p
--fields=+S
--langmap=c:.c.h
--languages=c
ctags
c_comment_strings
c_no_curly_error
c_no_cformat
c_gnu
c_space_errors
实际操练 Cscope
安装插件
Clang-Format
ClangComplete
Cscope
EchoFunc
Tags
语法加亮精调
课后练习
C 程序员的 Vim 工作环境

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

你好,我是吴咏炜。
从今天开始,我们会用连续 3 讲,深入讨论怎么为编程定制环境。如果你是 C 程序员,那么今天这一讲对你来说毫无疑问是必修课。如果你用的是类 C 语言,也能从这一讲中学到很多有用的内容,尤其是在语法加亮精调、tags 和 Clang-Format 部分。

语法加亮精调

第 4 讲中我们已经学到了,Vim 能根据文件类型对代码进行加亮。在第 12 讲里,我们还进一步讨论了 Vim 实现语法加亮的细节,知道这些是如何通过代码来进行控制的。对于 C(含其他基于 C 的语言如 C++),语法加亮文件有一些精调选项,还挺有意思,能应对一些特殊场景的需求。我一般会设置以下几项:
let g:c_space_errors = 1
let g:c_gnu = 1
let g:c_no_cformat = 1
let g:c_no_curly_error = 1
if exists('g:c_comment_strings')
unlet g:c_comment_strings
endif
第一项 c_space_errors 用来标记空格错误,包括了 tab 字符前的空格和行尾空格,这样设置之后 Vim 会把这样的空格加亮出来。
第二项 c_gnu 激活 GNU 扩展,这在 Unix 下一般是必要的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了C程序员在Vim工作环境下的定制化配置和工具的使用。作者详细讨论了对C代码进行语法加亮的精细调整,包括标记空格错误、激活GNU扩展、不对格式化字符串进行加亮等设置。此外,作者介绍了tags文件的生成和更新方法,以及如何在Vim中自动运行ctags命令。作者还推荐了EchoFunc插件,用于回显函数的原型,并提供了安装和配置方法。另外,Cscope工具用于代码搜索和定位,包括查找符号的定义和引用、函数调用的函数和调用该函数的函数等功能。文章内容涵盖了C程序员在Vim环境下的代码搜索、提示和自动完成等方面的定制化配置和工具使用,对于C程序员和使用类C语言的开发者都具有实用价值。 ClangComplete插件也被介绍,它在Vim中添加了对C/C++代码的自动完成功能。虽然作者更推荐YouCompleteMe插件,但ClangComplete在某些环境里安装起来更加简单,因此也是一个后备方案。总的来说,本文内容涵盖了C程序员在Vim环境下的代码搜索、提示和自动完成等方面的定制化配置和工具使用,为读者提供了丰富的技术内容和实用价值。

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

全部留言(10)

  • 最新
  • 精选
  • 谁家内存泄露了
    吴老师,你好,我有两个问题: 1 cscope有时候找不到一些c++文件的函数(我执行的命令为:cscope -Rbq)? 2 我有一部分的工作场景是需要用yocto去构建整个Linux的镜像,而且大部分的语言会用的是c++,基于问题1,可能cscope不是万能的,再考虑ycm又需要导出cmake的compile_commands.json文件,这个不清楚怎么在yocto下导出来。。。 基于以上描述,吴老师有什么建议吗?

    作者回复: cscope 对 C++ 支持不好,可以先放弃。YCM 需要配置,没办法,只能自己想办法搞出配置,毕竟只是文本文件,花点力气也总是可以的。否则就只能将就使用 Universal Ctags 和 grep。

    2022-09-18归属地:上海
    3
    2
  • 我来也
    如果能早几年看到这系列文章,我正式切换到vim开发的时间也许会提前几年了. 我的vim定制始于这篇文章 [手把手教你把Vim改装成一个IDE编程环境(图文)](https://blog.csdn.net/wooin/article/details/1858917) 虽然这篇文章写于2007年,但我看到时应该也是12年了. 当时即使是照着文章把插件都装好了,也花了不少功夫. 搞完后,我对vim真是有了新的认识.原来还可以这么用. 当时有些配置我并没有调通. 不知是自己配置错误,还是文章中插件的配置发生了变化. 但周边也没有可以交流的人. 导致真正完全用vim做开发并不是很顺手. 我就用vim做c代码的查看器,用它去跳转,搜索,对比, 偶尔用它完成小的bug修复.

    作者回复: 有Vim的中文和英文邮件列表的。不过现在都不活跃了。尤其中文的。

    2020-08-24
    2
  • 大敏
    请教一下大神,如果工程代码是,C/C++ 混合代码,ctags参数该如何选择呢?

    作者回复: .h 应该当 C++ 处理(默认似乎就是),其他没什么变化。 对于现代 C++ 代码,需要上 Universal Ctags。老的 Ctags 问题太多。

    2023-08-15归属地:广东
  • Alex
    学到目前阶段,感觉吴老师真是实打实的布道者,我也是守旧之人,只喜欢Linux、vim、c,其余的真心不想碰

    作者回复: 谢谢。 编辑器环境习惯了不换算正常。语言上还是建议不要拘泥。我主要用 C++(不是 C),但我也很喜欢 Python 的。对于不在乎运行性能的场景,开发效率高得多了。

    2021-09-25
  • Yabo
    插件 ludovicchabant/vim-gutentags,跳转链接不对,应该是 https://github.com/ludovicchabant/vim-gutentags

    作者回复: 谢谢。目前已经纠正。

    2020-11-18
  • chris
    cscope不支持c++的话, 请问如何用vim打造一个c++开发环境呢?

    作者回复: 继续往下阅读啊……

    2020-11-02
  • chris
    老师能否讲解一下ctags的-D和-I参数阿? 另外Cscope好像也能支持c++的是吗?

    作者回复: 前者看文档就可以了,有什么不清楚吗?如果有的话,我可以帮助解答。 Cscope 对C++ 的支持不行,基本认为不适用于 C++ 吧。

    2020-11-01
  • AirY
    感觉对rust需要不友好,没有提示,python的话也得.出来而且还有很小的延迟才出来,

    作者回复: 安装了Rust的引擎了吗? 默认自动完成需要按“.”,但文中我提了可以自己配完成键的(文中用了 Ctrl-Z)。

    2020-08-26
    3
  • Albert
    老师,您好。想买一本关于vim的书。看了一下有精通vim、vim8文本处理实战、vim实用技巧 2版。能推荐一下选哪本吗?或者有其他推荐吗?

    作者回复: 学完这个专栏,我觉得进一步学习主要是拓展技巧,知识体系根据实际的需要查手册就可以。从这个角度,我会推荐《Vim实用技巧》。 当然,每本书都有点独到之处的。三择一的话是这本,有余力的话,其他的也可以看看。

    2020-08-24
  • qinsi
    查了下Vim8的话应该可以通过LSP实现跳转自动完成和格式化等功能 https://microsoft.github.io/language-server-protocol/implementors/tools/

    作者回复: 下一讲的工具内部就会用到的。

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