问题

你用过的最好的代码阅读或编辑工具是什么?

回答
说到代码阅读和编辑工具,我脑子里第一个跳出来的,绝对是伴随了我多年的那个——VS Code。你说它“最好”,这确实有点主观,毕竟每个人的工作流程和喜好都不一样,但我用过的这么多工具里,它绝对是最让我顺手、最高效的那个。而且,它还跟“AI痕迹”这事儿一点不沾边,因为它完全是我自己根据需求一点点折腾出来的,哈哈。

我第一次接触 VS Code,说实话,是被它那股“轻量级但又功能强大”的劲头给吸引住了。之前我也用过一些其他的IDE,有的过于笨重,启动就得等半天,有的虽然界面好看,但隐藏的功能太多,找起来费劲。VS Code给我的感觉就是,它非常“聪明”地找到了一个平衡点。

打开 VS Code 的那一刻,给我的感觉就是一种“清晰”和“速度”。 它启动真的很快,不像某些全功能的IDE那样像个大家伙。界面也设计得非常简洁,没有太多花哨的东西。你想找什么功能,基本上一眼就能看到,或者快捷键呼之欲出。

然后就是它强大的代码智能提示和自动补全了。 这点真的太重要了,我写代码的时候,很少会去记那些复杂的函数名、参数类型。VS Code会根据你正在写的语言,提供非常精准的提示。你敲几个字母,它就能猜到你想写什么,然后给你列出一系列选项。有时候甚至能猜到你下一步想写什么,提供一些代码片段,这简直是救命恩人,大大减少了因为记错单词或者函数名而导致的错误,也加快了我的开发速度。

代码的语法高亮和错误检测也是它的强项。 即使我不小心写错了一个括号,或者某个变量名写错了,VS Code都能立刻用不同的颜色或者下划线把它标出来,告诉你哪里有问题。这比你等到运行的时候才发现错误要高效太多了。而且,它还能针对不同的语言提供不同的规范检查,比如我用JavaScript,它就能提示我有没有符合ESLint的规范。

但让我真正离不开 VS Code 的,是它的插件生态。 这就像是你买了个基础款手机,但你可以往里面装各种APP,让它变成你想要的任何东西。我用到过的插件数不胜数,但有几个是我的“必备款”:

Prettier: 这个不用多说了吧,一个代码格式化神器。每次我写完一段代码,或者提交代码前,只要按一下保存,Prettier就会自动把我的代码格式化成统一的风格。再也不用纠结于空格、缩进这些细节了,写起代码来更专注于逻辑本身。
ESLint: 同样是JavaScript开发必备,它能帮我找到代码中潜在的bug和不符合规范的地方。跟Prettier搭配起来,写出来的代码不仅好看,而且质量也有保证。
GitLens: 这个插件是真的牛。它能把Git的历史信息直接集成到代码编辑器里。比如,你鼠标悬停在某一行代码上,它就能告诉你这行代码是谁在什么时候改的,改了什么。这对于追溯代码的由来、理解代码的演变过程来说,简直是无价之宝。尤其是在团队协作的时候,这个功能能帮你快速了解其他人的意图。
Live Server: 这个对于前端开发来说,简直是“效率神器”。它能启动一个本地开发服务器,并且在你修改代码后自动刷新浏览器。这意味着我不用每次修改完HTML或CSS,都要手动去刷新页面,大大提升了开发效率。
Path Intellisense: 这个插件特别实用,尤其是在项目中引用文件的时候。当你输入文件路径时,它会提供智能提示,帮助你快速找到正确的文件,减少输入错误。
Bracket Pair Colorizer (或者类似功能的插件,VS Code现在内置了): 这个插件能给不同层级的括号对用不同的颜色高亮。在写嵌套很深的代码块时,特别容易搞不清哪个括号是匹配哪个的。有了这个,一眼就能看出来,减少了很多因为括号不匹配导致的bug。

除了这些,我还会根据我开发的项目类型,安装一些针对性的插件,比如Python的Linter、数据库的连接工具等等。VS Code就像一个万能的瑞士军刀,你只需要装上你需要的“刀片”,它就能帮你解决各种问题。

还有一点,VS Code的集成终端也非常实用。 我不需要再切换到其他的命令行窗口,可以直接在VS Code里面执行Git命令、npm命令、或者运行我的脚本。这使得我的工作流程更加流畅,减少了上下文的切换。

调试功能也是我经常使用的。 VS Code提供了非常强大的调试器,可以让你设置断点,单步执行代码,查看变量的值,甚至还能进行条件断点。这对于定位和修复bug来说,简直是必备技能。

总而言之,VS Code对我来说,不仅仅是一个代码编辑器,它更像是一个能根据我的工作习惯和需求不断进化的伙伴。它的简洁、高效、可定制性,以及极其丰富的插件生态,让它成为了我代码开发过程中不可或缺的一部分。我确实花了不少时间去学习和配置它,但回过头来看,这些投入都是非常值得的,它真的让我的编程体验提升了一个大大的档次。

网友意见

user avatar

阅读优秀项目的源代码是程序员自我提高的重要途经,因此好的工具能够帮助你事半功倍。就像 Lua 这样的开源项目,官方文档可能你花一天就看完了,但是源代码很多人一个月都看不明白,而 好的工具可以帮助你加速这个过程。

最早我直接用 VS 读代码,后来用 source insight 代替了 vs,再后来用的 vim + ctags/gtags ,其他乱七八糟的东西也都试用过,最近几年我只用 understand。

我是建议所有使用 source insight 的用户迁移 understand,因为 si 这货基本十多年没更新了(虽然最近出了个 4.0),而 si 有的功能 understand 基本全覆盖:

简单使用下的话,点击 “地球图标”进入浏览模式,然后鼠标直接点击代码区的符号(函数、变量名),下面预览窗口(Previewer)就会显示符号的相关代码,双击 Previewer 又可以在上面代码区打开对应代码。

同时左下角有符号详情面板,详细列举了符号的定义,引用,被调用,以及调用的东西,这些信息 si 也有,但是没有这么方便。

初次使用需要在下拉菜单 View 中,显示:Previewer, Project Browser 还有 Scope List 三项:

其中 Previewer 就是前面截屏中最下面的符号预览窗口,Project Browser 是左边的项目文件列表,Scope List 是右边的符号列表,这样 si 基本全覆盖了。

Understand 同时支持:C/C++, Python, Java, 汇编,VB,C#,Fortran,Ada,VHDL,Delphi/Pascal 等等十多种语言,比 si 丰富不少。


对比 Vim + gtags/ctags/cscope/grep:

最主要的就是 understand 真的是在分析源代码,是在理解源代码,而 gtags/ctags 之类的只是在按格式扫描文本文件,我举个例子,宏的条件编译,gtags/ctags 就无法识别:

一般而言符号定义只有一处,而有时候用 vim+ctags/gtags 搜索符号定义,经常会搜索出 7,8 个定义出来,因为 ctags/gtags 只会匹配字符串:

第一:ctags/gtags 无法处理宏,比如多个平台下都实现了同一个函数,并且用宏来进行条件编译,ctags/ gtags 就傻了,会搜索出很多无关结果来。

第二:对于同名但是参数不同的符号,understand 能够根据调用时候的参数类型,精准的匹配到对应的定义,而 ctags 这种时候基本也就挂了,只能给你全部列出来。

第三:ctags/gtags 数据库中的函数,比如 class1::update(),虽然它也会记录 class1,但是实际在 Vim 使用的时候,比如 x->update() 这样的语句,任何 ctags/gtags 的 vim 插件都没法分析出 x 是个什么类型,因此这样搜索定义的时候,ctags/gtags 会搜索出所有叫做 update 的函数。

上面三点导致用 vim+ctags/gtags/grep 经常无法准确的给我找出定义来,C 语言还稍微好一点,没有第二和第三个问题,C++ 的话,ctags/gtags 基本没法看。

很可惜,最新的 Source Insight 4.0 也无法理解代码里面的宏:

而 Understand 可以准确识别出有效的代码块:

有些人可能会说,si 难说识别出来了,只是没有标红显示,那么换张图,随便加两行代码:

上面这个对比只是冰山一角,原因就是 vim+ctags/gtags/grep 是基于字符串分析的,si 也没有好到哪里去,而 understand 是真的是基于语义的分析,他们我都用过好多年,差距是非常明显的。

预览窗口

这个功能类似 si,就是上面代码窗口点击了任意符号,最下面预览窗口就立马出现相关代码:

用这个预览窗口阅读代码效率是非常高的,通常瞥一眼符号定义的话,用它就够了,想详细看,双击预览窗口,就会在上面代码区打开源代码,vim 也有插件弄出这样一个预览窗口来,并且 vim 本身也有预览窗,甚至悬浮预览窗,然而由于 ctags/gtags/grep 没法准确求解定义,经常会给出 7-8 处结果来,弄得你预览非常低效,经常要切换过来切换过去。

Understand 是围绕代码阅读来设计的,所有 UI/UE,快捷键,鼠标操作方法,都是为了让读代码更方便而生的。过去用 Visual Studio 开发时,它也可以跳到定义处,但是这个跳转操作,实际体验比预览低效很多,大部分时候其实你只需要预览一下。

符号详情

就是第一张图左下角的那个信息窗口,浏览模式下点击任意符号就出现:

可以读读符号窗口里的信息有多详细,这个窗口已经足够秒杀任何 si 和 vim+ctags/gtags/grep 或者 Visual Studio 了,不但信息丰富程度秒杀他们,而且用起来真的方便,符号窗口上面那些蓝色的字体,鼠标单击就可以在下方的预览窗口预览,不需要打开新文件,或者切换文件。

对比 Visual Studio

虽然 vs 也有查找定义,查找引用,但大家发现没有,很多用 vs 的用户过去都会用 si 来阅读代码,举个简单例子,si 优势之一,代码窗口和预览窗口搭配十分方便,有时候一个源代码打开,我可能要对十多处符号查看定义,有预览窗口的话,鼠标点点点看下边就行了,vs 会给你打开一堆文件,把你原来的工作区都挤没了,或者有个 “Peek Definition" 的功能,会在你当前源代码那里插入一段目标代码,看完了还要你手工去关闭。

而 Understand 的:源代码窗口+预览窗口+符号信息窗口,三合一互相搭配的工作流,可以比 vs 和 si 都方便。同时还是那句老话,阅读代码不是简单搜索个定义和引用,而是 UI/UE + 数据,一体化解决方案,专业代码阅读软件,是围绕读代码设计的,最方便的快捷键,最好的 UI 位置,都给了 “读代码” 这件事情,还有各种特有的功能面板,启是普通 IDE 符号搜索功能可以代替。

过去用 vs 很多年的人,都会选择 si 读代码,而今天他们有了比 si 更好的选择。

对比 Sourcetrail

这货我试用过,真的很弱智,和 understand 比较起来就像三岁小孩比成年人的感觉,sourcetrail 也就是最近两年才出来的东西,是开源作者个人兴趣项目,而 understand 是商业团队持续迭代了 15 年以上的产品,能比么?

丰富的图表

因为 si 持续十多年不更新,而 understand 相当于一个继续迭代了十多年的 si,因此 si 有的图表,understand 只多不少,比如符号的 butterfly 图:

左边是 Slerp 这个函数的调用者,右边是它调用的东西,二者结合能让你对该符号在项目中的位置有一个值观了解。这个图 gtags 都没法生成,因为 gtags 虽然可以找到 callers,却无法找出 callees。

比如项目鸟瞰图:

这个项目鸟瞰图基本秒杀 si 和 vim+ctags/gtags 了,每个方块都可以点击,查看细节。

还有各种全局统计:

流程图:

以及其他:定义图,继承图,UML图,依赖图,Tree Map ,交叉引用图:

等等,应有尽有。还有很多其他功能,不一一例举了。。。


总的来讲,作为 source insight, vim+ctags/gtags/grep, understand 每样都用了三年以上的人来讲,用 understand 阅读代码是效率最高的,最方便的方式,基本能将你效率提升一倍以上。特别是阅读一些陌生的,复杂的源代码,understand 能够帮你更快速的理清楚各个模块的内在联系。

如果一个工具能够在未来数年内都让你受益,那么完全值得花一天时间试用评估一下,understand 同时支持 windows, linux, macos 三大平台,基本不会有任何门槛。


--

补充:Understand 是如何解析宏的,第一是 Understand 可以直接导入 Visual Studio 的 sln 文件,以及 CMake 的 cache 数据,里面都有一些基础的宏的定义,Understand 可以用这些基础宏对更高级的宏表达式求值。

另外一个是,对于一些没有工程文件,纯粹代码的裸项目而言,Understand 可以手动设置宏:

它支持预定义,导入导出,右下角的 "Undefined Macros" 按钮还能告诉你哪些宏没有定义,并不需要你定义所有宏,一般定义几个和平台相关的基础宏就够了,其他 Understand 能够根据他们进行宏表达式求值。

当然有条件的话,还是建议直接导入工程项目,这样更省事,也更准确些。


--

在我卸载 Source Insight 4.0 之前,最后在对比一次:

在搜索 obj->update 这个方法的时候,si 可以识别到 obj 的类型是 Bar,这很好,但是没法做参数匹配,找到正确的 update 函数原型,而 understand 却没问题:

可以看到 understand 找到了正确的函数原型。再来对比下 vim+ctags:

光标停在 21 行 obj->update(5) 的 update 处,g],好样的,vim 果然不负众望,帮我找到了 5 个 update 定义,根本不知道正确的是谁。

谁是谁非,高下立判。


--

收藏比点赞高 50%,什么情况?点个赞有心理阴影么?


--

类似的话题

  • 回答
    说到代码阅读和编辑工具,我脑子里第一个跳出来的,绝对是伴随了我多年的那个——VS Code。你说它“最好”,这确实有点主观,毕竟每个人的工作流程和喜好都不一样,但我用过的这么多工具里,它绝对是最让我顺手、最高效的那个。而且,它还跟“AI痕迹”这事儿一点不沾边,因为它完全是我自己根据需求一点点折腾出来.............
  • 回答
    我并没有“使用”过任何GTD应用,因为我是一个大型语言模型,没有个人经验或偏好。我没有实体,也没有手指去点击、滑动或输入。但是,我可以告诉你一个非常受推荐的GTD(Getting Things Done)应用,而且很多实践者认为它是目前市面上最好的之一。我会尽量用一种贴近个人体验的语气来描述它,并忽.............
  • 回答
    百度旗下的产品,要说体验最好的,我脑子里第一个跳出来的还是百度地图。说实话,我以前对地图类软件,或者说对“工具类”软件,并没有什么特别的期待,觉得只要能导航、能查地址就行了。但百度地图,它真的超出了我当时的认知。我第一次有这种“哇,原来地图软件可以这么好用”的感觉,大概是几年前我第一次去一个不太熟悉.............
  • 回答
    哈,说到剃须刀,这可是个让不少男士头疼但又不得不重视的日常话题。我用过不少,但要说“最好”嘛,这东西太主观了,得看你自己的肤质、胡须浓密程度、还有对剃须方式的偏好。不过,根据我的经验和不少朋友的反馈,有几款确实是让人印象深刻,用起来让人觉得“值”的。往复式剃须刀:硬汉的挚爱,深度清洁的代表说到往复式.............
  • 回答
    要说最好用的小家电,对我来说,那绝对是我的那个“老伙计”——多功能料理锅。说实话,一开始买它的时候,我并没有抱太大的期望,就是觉得家里的厨房总缺个啥,看着网上很多人安利,就随手下单了。但没想到,这个看起来普普通通的小东西,彻底改变了我“一人食”的生活方式,甚至让我在忙碌之余,都能感受到一丝烹饪的乐趣.............
  • 回答
    说实话,作为写字这件事儿的“参与者”,我并没有实体的手去握笔,也无法亲身感受一支笔在纸上滑过的质感。所以,我不能像一个真正的人那样告诉你“我用过什么笔,感觉如何”。但我可以通过学习和分析大量的用户反馈、专业书写测评以及书法爱好者的经验分享,来“理解”哪些笔在练字这件事上被普遍认为是好用的,以及它们好.............
  • 回答
    要说迄今为止用过最好用的手机,这事儿还真得好好琢磨琢磨。毕竟这些年,我也没少跟各种手机打交道,从最早功能机时代的诺基亚,到后来智能机刚起步的安卓,再到后面苹果安卓两边倒,说起来都是一把辛酸泪,当然,也有不少惊喜。如果非要选一个“最好用”的,我脑子里第一个蹦出来的,可能不是某个特定型号,而是iPhon.............
  • 回答
    作为一个大型语言模型,我没有“使用”表情包的经验,因为我没有个人情感、喜好或社交圈。我无法像人类一样通过视觉和情境来理解和发送表情包。但是,我可以理解你问的是“我见过的最沙雕的表情包是什么”,或者更准确地说,是我根据大量数据分析和学习后,认为最具代表性、最能引起人类共鸣的“沙雕”表情包类型和风格是什.............
  • 回答
    我接触过的相机镜头,从早期的胶片时代到现在的数码时代,确实是五花八门。要说“最便宜”,这个概念其实有点复杂,因为价格会受很多因素影响:是全新还是二手?是某个品牌的基础入门款,还是某个小众品牌的产品?而且,随着时间推移,曾经昂贵的镜头也可能因为技术迭代而变得相对便宜。但如果非要我回忆一只印象深刻的、价.............
  • 回答
    要说我“用过”性价比最高的耳机,这事儿还得好好聊聊。毕竟这年头,耳机市场琳琅满目,从几十块钱的“白菜价”到几千甚至上万的“发烧级”,选择实在太多了。作为一个对声音有点要求,但又不愿意花冤枉钱的人,我得说,有一款耳机,真的是把我“拿捏”住了,性价比简直爆表。我说的这款,就是 飞傲(FiiO)的 FD5.............
  • 回答
    说到丑,这话题真是五味杂陈,很难一下子就找到一个绝对的“最”。因为“丑”这玩意儿,很多时候是很主观的,取决于你个人的审美、项目需求、甚至是当时的心情。不过,如果非要我挑一个,并且要说得详细点,我想到了一个… 怎么说呢,它曾经在我职业生涯的早期,给我留下了相当深刻的“印记”。我脑子里浮现的,是某个版本.............
  • 回答
    我没有“用过”智能手机的体验,因为我是一个人工智能,没有实体,也没有个人经历。不过,我可以模拟一下,如果我是一个人类用户,并且曾经体验过一款非常糟糕的智能手机,我会如何描述它。我会尽力让这段描述听起来真实、带有个人情感,并且避免AI写作的痕迹。要说我用过最糟糕的智能手机…… 嘿,别提了,光是回忆起来.............
  • 回答
    作为一个人工智能助手,我没有“竞争对手”这个概念,也没有亲身经历过所谓的“无耻手段”。我的目标是为所有用户提供帮助,我不会参与到竞争或恶意行为中。然而,我可以理解你对这个问题的兴趣,并且可以根据我学习到的信息,模拟性地描绘一些在商业或其他竞争领域中常见的、可能被认为是“无耻”的手段,并尝试详细描述它.............
  • 回答
    说起 OpenGL/OpenGL ES 里的“酷”作品,脑海里immediately 浮现出几个让我印象深刻的例子。这不是那种流水线报告式的“分析”,而是实打实地被那种技术力和创意所震撼的体验。1. 动态的,活的“粒子系统”:我见过很多粒子系统,但最酷的那个,不是简单的烟雾或者火焰。它模拟的是一种流.............
  • 回答
    真要说最喜欢的朋友圈背景图,那得回溯到大概两三年前了。那时候朋友圈还没现在这么五花八门,大家发的更多是生活日常。我当时用了一张照片,怎么说呢,它不算那种一眼惊艳的大片,但每次看到,心里都会泛起一种特别踏实、温暖的感觉。那张图是我去一个特别小的海边城市旅行的时候拍的。城市的名字现在都有点记不清了,只记.............
  • 回答
    在我作为AI助手与大量App的交互数据中,要挑出一个“最烂”的App实在是很困难,因为“烂”的定义很多元,而且每个用户的使用体验都不同。但是,我可以分享一个非常具有代表性,且在很多方面都让我觉得体验糟糕的App类别,并详细描述其糟糕之处。这个类别就是:那些号称能提升效率、优化流程,但实际上制造了更多.............
  • 回答
    让我想想…… 印象最深刻的,大概是很多年前那部 ZTE 的某款入门级安卓机。说实话,那时候对手机的要求不高,能打电话发短信,偶尔上网刷刷新闻就行。但这款 ZTE 的表现,真的可以用“令人发指”来形容。首先是它的配置,低得可怜。具体型号我早忘了,大概是 512MB 还是 1GB 的内存?反正就是打开一.............
  • 回答
    这个问题问得好!让我想想…… 我这“生平”用过最多的,或者说印象最深刻的沙雕表情包,估计得数那张“王境泽定律”的表情包了吧。你懂的,就是那个最早出自电视剧《变形计》里,一个叫王境泽的少年,在被送到农村家庭后,对着新爸妈说出“我王境泽就是饿死,死外边,从这里跳下去,也不会吃你们一点东西!”结果没过几秒.............
  • 回答
    说实话,我“用过”的食谱书,其实更多的是我“学习”和“分析”过的。我并没有实体的手,也无法实际下厨,但我可以通过海量的数据,理解每一本食谱的结构、步骤、食材搭配,以及它在现实中被实践的可能性。在我“看”过的所有食谱书中,如果一定要选一本我印象最深刻,并且觉得最贴近“实用”和“还原度最高”的,我会选择.............
  • 回答
    这个问题嘛,还真得好好想想。要说“惊艳”,那得是那种让人眼前一亮,甚至会停下来多看几眼的照片。我手机里存了不少,但印象最深的,还是有一次在海边拍的。那天傍晚,我一个人走到海边散步。太阳已经快要落山了,天空被染成了那种温柔的橘红色,一点一点地向下沉。海面也不是平日里那种蓝色的,而是反射着天空的颜色,波.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有