从IDE到Emacs,到底做到什么程度值得?

但是emacs也很多年了,代码跳转和补全这种问题,没有一个稳定的解决方案,确实有点让我惊讶,原来我觉得是自己不懂,但semantic解析c/c++宏确实有问题。company结合clang后端也确实有很多低级失误……tags的实时性差,可还是有这么多tags方案……无法理解。

因为等你的代码再多写一些的时候,会发现这个功能其实没那么重要.

因为有个事情……对于大多数Emacs核心用户来说,tag系统已经足够他们用了……

Emacs从来都不是个真正意义上的写给用户的软件……

对于写底层/驱动之类的人来说,更不重要……

但这也是一个问题,虽然不重要,也要有个好的解决方案。

之前一直没有这些功能,代码也写过来了,就是偶尔觉得别扭一点。我们都知道,与其依赖软件,不如自己对工程了如指掌。最近这不过年,公司没什么活,就想折腾折腾。

tags怎么能做到比较高效的更新?我现在在代码更目录运行一遍ctags -e -R需要很久才能生成一个32MB的文件……这种速度的话也就每天更新一次,或者不得不更新的时候更新一次。

另外,tags只是基于文本给予补全和跳转,不能基于语法。

所以我让你用IDE啊……

CPU  MEM
105. 15.9  4:56.23 code /usr/share/code/resources/app/out/bootstrap --type=watcherService
100.  4.2  1:57.94 Microsoft.VSCode.CPP.Extension.linux

这是我用vscode在curl项目里随便打开了一个文件,这个状态已经持续了几分钟了.而且vscode一直已100%左右的cpu占用率运行.看来大家都没有什么太好的办法.

建议你试试ycmd,或者用sublimetxt,里面有一个EasyClangComplete更新很活跃。其实vscode是很方便的,只是项目一大就容易cpu占用超高。

有VS用干嘛不用 :no_mouth:

用vs+vsx,让生活轻松一点

开源很大程度上就是用户=开发者

说真的搞到现在我是有点服气了,用IDE确实是一种幸福……

Windows对于开发就是不友好。你这些问题都是对这些工具了解太少了……不过我有的时候也想偷懒不多读文档而是直接问#emacs等

觉得Emacs折腾困难或者不愿意投入时间的话,Clion或Eclipse都是不错的替代。 vscode-cpptools不支持查找索引,也许某种商业版本支持。

我花了两天的时间,在论坛里找各种方法,很多emacs插件并没有特别好的使用说明,有些因为时间、平台的差异,已经难以复用……

很多时候就是要RTFSC。他们很多又不是做这些OSS谋生的,怎么能希望他们做更多

你如果能折腾出 ycmd EacyClangComplete rtags irony-mode,cquery 需要的 libclang.dll 和Clang resource directory (lib/clang/5.0.1/)都能在某些地方找到。

elisp C没有dependent name, argument-dependent lookup这些恶心的东西,struct member重名也不多,有个tags-based tool的UI确实够用了。用于 C++真是痛苦

怎么都是劝退的

1年多之前试用过 windows sub for linux, 那时功能还很不健全,后来还是退到 msys2了。 不知道现在如何了? 有谁清楚吗。

@MaskRay cquery 是基于 tags 的?

lsp 的出现不就是要消灭各种不靠谱的 tagging system 吗,难道我用了假的 lsp?

除了 Ray 提到的 argv[0] 的方式以外,也可以用 -target 来指定编译到的目标架构。有一个问题是这种情况下 libclang 很可能找不到 system header,需要一并在参数里面通过 -I 和 -isystem 指定。

对于不太复杂的项目结构(比如整个项目都是要交叉编译到 ARM 下的;或者平台相关的代码和 portable 的代码混合,平台相关代码放到独立的目录下),可以用 .cquery 的方式配置,基本够用。

我有试过在 Windows 上用 cquery 索引一个只能在 Linux 下(交叉)编译到 amd64 / armv7 / aarch64 且还包含 CUDA 代码的东西,在做了一大堆诸如把 header 抠出来的怪事之后,除了CUDA的部分(还没来得及解决)以外基本上可用,但 libclang 时不时崩溃非常令人抓狂。

WSL 现在各种常见程序的兼容性问题基本被解的差不多了(在即将到来的 1803 里甚至能运行 chromium --disable-sandbox ),但IO效率低和难以与原生 Windows 程序交互的问题还是没有解决。

和原生win程序交互的问题,应该影响不到我。 请问io效率低的问题,和msys2以及cygwin来比较,是什么水平呢?应该要比他们好些吧?

我试过使用cquery,不过我是在windows中用cygwin使用emacs,所以我需要自己编一个cquery的language server,但是github上面取到的脚本,在windows下没能按我想的那么工作,configure时候报错无法找到stdio.h,windows平台也没有预编译版本……