08|基本编程支持:规避、解决编程时的常见问题
该思维导图由 AI 生成,仅供参考
文件类型和关联设定
- 深入了解
- 翻译
- 解释
- 总结
Vim 编程特别支持 Vim 是一款强大的文本编辑器,提供了丰富的编程特别支持。本文首先介绍了 Vim 在文件类型和关联设定方面的特性,包括文件高亮、制表符宽度、扩展空格字符等选项的设置。文章详细讨论了 Vim 如何判断文件类型以及根据文件类型设置选项的方法,包括通过后缀和自定义规则进行文件类型判断。此外,还介绍了定制 Vim 行为的方法和在用户 Vim 配置目录里进行文件类型定制的技巧。 另外,文章还介绍了使用 tags 文件进行符号跳转的方法,以及 Tagbar 插件的使用,可以利用 Ctags 来提取符号,生成源代码的结构图。还介绍了 Quickfix 窗口的使用,可以展示外部命令的结果,并可以通过这个窗口中的内容直接跳转到特定文件的特定位置。最后,文章介绍了 `:make` 命令和 `:grep` 命令的使用,分别用于编译和搜索源代码。 此外,文章还介绍了 Vim 8 支持的异步任务,以及如何利用 asyncrun.vim 插件实现在构建过程中仍然可以继续进行其他操作的体验。还介绍了使用 `K` 命令来查看关键字相关文档的方法,以及如何配置 `keywordprg` 选项来优化文档查看体验。 总的来说,本文详细介绍了 Vim 在编程方面的特别支持,包括文件类型设置、tags 文件的使用、Tagbar 插件、Quickfix 窗口、编译和搜索命令的使用,以及异步任务和文档查看的优化配置,为读者提供了全面的 Vim 编程特别支持的概览。
《Vim 实用技巧必知必会》,新⼈⾸单¥59
全部留言(15)
- 最新
- 精选
- 吴咏炜置顶根据 YouCompleteMe 同学给出的提醒,我文中对 tags 的的写法不是最好。更好的写法是: set tags=./tags;,tags,/usr/local/etc/systags 感谢 YouCompleteMe 同学。语法帮助详见 :help file-searching。2020-08-119
- YouCompleteMe我用的 set ctags=./.tags;,.tags 其中的;表示递归向上,这样就不用写..和../..表示多层级了
作者回复: 这个语法我在资料里没查到过。我也学习了……
2020-08-1045 - __@948CSheLL老师您好,我想请问一下,下好的Universal Ctags应该放到那个目录下合适?
作者回复: 如果Windows,没有约定俗成位置,我一般用 C:\bin。 Unix 下如果只给自己安装是 ~/bin,给机器上所有人(一般需要 root 权限)是 /usr/local/bin。
2020-08-191 - 唐龙vim能不能实现,C++类的成员变量一个颜色,函数的形参一个颜色,类似于这样的高亮。感觉就算支持的话也会很麻烦。
作者回复: 对。这需要理解语言。Vim 本身做这些功能都是用正则表达式的。那就不行了。 理论上来说,写插件跟语言服务器交互,可能还是能做到的。确实很麻烦。
2020-08-1321 - shyghosttags建议增加gtags工具,gtags不仅支出跳转,还支持函数引用的查询,而且文件更新时可以针对单个文件更新
作者回复: tags属于传统工具,了解一下就行。真正要语义查询,还是用真正理解语言的工具。后面会讨论。
2020-08-1321 - Geek_b56bf2老师,请教下windows下执行make怎么输出到终端呀,不输出到文件
作者回复: Windows 上 gvim 行为就是这样的。如果终端里运行 vim,则可以看到执行的命令行。 如果你安装了 asyncrun.vim 的话,可以在打开 quickfix 窗口的同时运行 :Make——就可以立即看到 make 的进展了。
2023-08-23归属地:重庆 - 大狗爱吃鱼grep中文支持,怎么做啊?
作者回复: 如果 Unix 下全部用 UTF-8,那就自然支持了。 否则可以考虑用 vimgrep 命令,性能就会低点了。
2020-10-21 - 李公子胜治老师,可以分享一下你的vim配置吗😅还有老师可以详细讲一讲cpp中的不定参模板函数和类吗,我看书感觉好晦涩
作者回复: 我的Vim配置的主体部分都会进入这个专栏的。 C++的东西,可以在我的C++专栏的相应部分留言。我们在那里讨论吧。
2020-08-11 - pyhhou感觉这一篇满满的干货,但很多都是我没有接触过的概念。 对于 tags 感觉有点类似于函数跳转,比如在一些其它的编辑器中,按下 CMD,鼠标点击函数名就可以跳转到函数的定义的位置(日常工作中用的比较多,比较在意的一个功能)。不知道 vim 中函数跳转的实现是不是也和 tags 的实现类似? 另外,quickfix 是不是只能用于 make 指令?其功能能否用于语言的编译或运行中的错误定位,比如 Java,Golang 等等的编译。 谢谢老师的分享,知道很多自己从未接触过的东西,看来想要真正学好 VIM 还得多多尝试自己没接触过的东西
作者回复: 我来也同学已经基本回答了你的问题。再补充一下关于 quickfix。 Quickfix 是 Vim 中的一种“机制”。不同的命令和插件都可以使用它,不只是 make。一般来讲,“全局”的错误或信息定位会使用 quickfix,单文件的错误定位(编辑时发现错误)会使用另一个叫 location-list 的东西。两者概念上非常接近,只是一个是全局的,一个跟随窗口的。
2020-08-114 - 我来也# 题外话 老师的这些内容都很全面,完全可以当手册来用. 可惜目前的订阅人数不多,留言的人数就更少了. 这也跟vim这个工具有关系吧. 毕竟这玩意的学习曲线陡峭也是出了名的. 但愿以后有兴趣的小伙伴能来这里系统的学习,少走弯路吧. # 制表符配置 说实话,我是记不清那么多tab的配置项含义的. 好在这玩意配置后就不需要怎么改了. 即使有疑问,也可以很方便的用老师后面介绍的`K`命令,看具体的配置项含义. # 文件类型判断 我记得有两种判断方式 1. 根据文件后缀名判断 2. 根据文件内容的前多少行的内容来判断 看了老师的专栏,知道还可以借助路径来辅助判断. # Tags支持 Ctags这玩意在大几年前,绝对是文件跳转用的主力. 但也存在着一些弊端. 最明显的就是如果多个地方有同名的函数名,在跳转时是不准确的. 这样就会遇到老师文中`展示在新窗口中选择并打开 printf 的声明`展示的, 需要按一长串快捷键,后面还需要选择编号`2`. 现在不少vim插件都可以提供完整LSP(Language Server protocol) 功能支持, 现在主流的编程语言好像都有了对应lsp的服务端吧. 有了它,就可以实现很精准的函数跳转啦. 即使是接口类型的,它也可以很方便的去查找所有实现了的类. 还可以查看某个类都实现了哪些接口. 是不是很屌? 这次得感谢微软了. # Quickfix location-list 既然谈到了这些列表跳转的快捷键,那我就再带带货. 推荐一款插件[vim-unimpaired](https://github.com/tpope/vim-unimpaired/blob/master/doc/unimpaired.txt) 看它的快捷键,是不是很有规律? 都是`[``]`开头的,很好记. # make 及异步化支持 推荐一个跟老师提到的`skywind3000/asyncrun.vim`类似的插件吧 [vim-dispatch](https://github.com/tpope/vim-dispatch/blob/master/doc/dispatch.txt) # grep 命令 推荐一款<Modern Vim>书中推荐的插件 [vim-grepper](https://github.com/mhinz/vim-grepper) 可以很方便的选择具体搜索的命令. 比如我最近就很喜欢用ripgrep来搜索. 另外可以很方便的配置搜索当前buffer, 当前所有打开的buffer, 当前路径下的所有文件. (由于涉及大量代码,导致评论超出了2000字限制,故放到另外一个评论中.) # vim的indent缩进 提到了tab的缩进,我就顺便推荐一个我最近三周才接触的一个插件. [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) 以前为了配置tab/空格可见,进程会配置vim的`listchars`选项. 就像文中`GNU 风格的 C++ 代码`图片显示的那样,tab用`>---`展示. 但是针对我这种经常需要用鼠标去复制内容的人很不友好.经常会把这东西给复制进去了. 但是这个插件就很巧妙,是用背景色来对齐缩进. 可以很直观的看到缩进是空格还是tab. 也不存在复制时多出莫名其妙的字符. 由于我配置的背景色非常非常淡,所以不太会干扰正常的视线.2020-08-1013