Spacemacs Java Dev记录

各位Emacs亲们, 开这个贴记录下自己使用Spacemacs配置(折腾)Java开发环境的过程。

先说下, 我使用Emacs和Spacemacs的情况。基本上是一个小白, 借用Java开发的比例的话, 就是还处于Emacs和Spacemacs的HelloWorld入门级别。 具体来没说,没有定义过函数、累积使用Emacs时间不超过20小时…

为什么要死磕Spacemacs或emacs呢?原因比较复杂,表面上看起来,摆脱不了耍酷的一丝成分。不过,往深的挖的话,我还是想使用固化潜意识这样的描述。emacs这样的编辑器,几乎没有图形界面,而支撑整个系统运转的是背后庞大概念体系。使用emacs的过程,是倒逼自己熟练理解背后概念体系的过程,当背后的概念融化贯通地消化后,才有可能在电光火石之间快速按出恰当的Shortcut。

再稍微往下看,概念体系是咱种软件的命脉。反面来看,绝大多数的软件工程问题都是跟概念意识差相关。

另一方面,我朴素地相信, Emacs里的高手,大都也是各行业的高手。他们深藏功与名,不为名利所动,静下心来做事,并在做事过程中自得其乐。现在咱开帖记录,也有向这些高手看齐含义。

最后一个考虑是, 借助开帖有效地督促自己养成积累、练习、交流的习惯。平时的工作生活中,默认情况下, 咱的精力容易分散开。这里,借助开帖,把自己的零散心得、体会、问题、经验、教训记录下来,晒出来,借助文正公的竹子夹持理论,提升学习效率。

好了,开场白完事了,后续将陆续记录Hack的过程。

3 个赞

先来一个小白的问题, 使用Emacs能不能方便地打开一个Maven管理的Java工程,如Spring-boot的源码?

Spring-boot的源码下载下来后, cd进来,pwd的结果是:

怎么使用Emacs打开这个目录后, 再开启Neotree插件?

尝试在spring-boot的目录下,直接执行命令"emacs ./"后, 看到下面的效果。

相当不错,超出想像。 开门红~

上面的效果图中, 如果右屏不显示ls结果就好了, 毕竟左屏的Neotree已显示同样的内容。

在dired buffer按(可以隐藏文件名以外的内容

2 个赞

上图基础上, 开始了在Emacs里读Spring-boot。 打开一个文件, 没有显示行号,这个必须有。

尝试解决:

  1. 找到一个方法,使用(setq-default dotspacemacs-line-numbers t), 按帖子的内容(Issues · syl20bnr/spacemacs · GitHub 放到dotspacemacs/user-config下后,执行SPC f e R后,没有效果。

再怎么往下排查?

  1. 执行SPC f e R后,看到spacemacs有一个报错,是不是跟这个相关?

多谢回复,我试下。

像下图这样注释掉neotree后,

执行SPA f e R或重启Emacs后, 行号还是没有显示出来。

同时,有了新的疑问, 把neotree注释掉后, 再“emacs ./”地启动Emacs, 还是能看到neotree的效果, 是不是还有别的隐形设置么?

使用https://stackoverflow.com/questions/34860397/spacemacs-hybrid-line-numbers里的方法解决行号显示的问题了。

看到下面这样的行号显示效果,还是小激动了下。

嗯, 跟设置的 relative相关。

这样的行号显示,还是第一次见。 方便,灵动,赞,这也是使用Emacs的一个典型亮点。

现在是晚上是10点40,开帖也两个小时了, 现在简单总结下开帖两个小时的收获:

  1. 使用帖子记录Hack过程中的问题, 可以帮自己梳理问题背后的逻辑, 更大程度上激活潜意识,方便问题的快速解决。当然,记录问题本身,也是对问题及后续解决方案记忆的进一步加强。
  2. 记录Hack问题过程中的细节、分支, 方便后续再整理汇总,闹不好还真可以把自己整理、学习的过程出一本书。
  3. 注意力更为集中。 以前也想着怎么使用Emacs打开一个目录,不过,因为没有开帖情况下,注意力被别的事情分散了,最终也就没能动手去试去执行起来。 现在有了帖子记录后,很容易集中注意力把一闪而过的念头转化成尝试解决问题的行动。

最后感谢咱的emacs-china,可以方便地直接把截图Paste到输入框里,省了手动单独上传的操作。

唉,忍不住回你下吧。你找到了正确的帖子,但别人问的就是怎么设置放在 dotspacemacs/user-config 下没用了?人第一个回答也说了,这东西现在有了自己的单独设置 dotspacemacs-line-numbers,不要再在 user-config 下搞了,你怎么还按着错的来啊!还有,spacemacs 中侧边的行号条也不是必须的,大部分时候都没什么用,实在要用 SPC-t-(n or r) 随时开关不就行了!

呵呵,这个行号显示真还算不上 emacs 的典型亮点,我记忆中 relative line numbers 最开始应该是在 vim 中出现的,因为 vim 的命令模式中这东西很有用,一眼就能知道各行与当前光标的相对位置,数字 + j/k 在行中跳转真是行云流水,流畅无比。拷贝、删除时,选择多行也极其方便快捷。

但这东东在 emacs 中却没什么可爽的,命令的数字前缀要按 C-u + 数字,加上后面的 C-n/p, 虽说也能用,但总好像隔靴搔痒,差点意思。而且从 numbers.vim 在命令模式下是 relative line numbers,而进入和 emacs 类似的插入模式就自动变回了 absolute line numbers 来看,这种行号最适合的就是 vim 这种多个模式分离的方案,而原生的 emacs 是不分模式的。

当然,这不是说 emacs 就不如 vim,而是 emacs 就应该按 emacs 的方法来,就行间跳转来说,emacs 有 M-g g 之外更强的 avy(vim 自然也有对应的 easymotion),spacemacs 中 M-m j-l 就能激发 avy-goto-line,也是跳得很欢的,但是,有了 avy-goto-char-timer,除了空白行,也没什么机会用 avy-goto-line 了。

所以,在 spacemacs 中跳转,如果你用 emacs 风格,那 relative line numbers 不算很必要,甚至 absolute line numbers 也是如此,如果用 vim 风格呢?那还是很可以用的,但是你现在是在用 spacemacs 啊!在这里,无论你是 vim 或 emacs 风格,你都有 avy 可用,so…:sleeping:

多谢回复。 关于搞错的事,我现在还属于盲人骑瞎马的试错阶段。后来回想,当时搞错的原因,可能是没有注意到自带“line-number”的关键字。真正的学艺不精,自汗一下。

关于“SPC-t-(n or r)”的随时打开功能,多谢提醒,我待会试下。跟这个问题,深层次的原因,我可能是更想让行号默认显示出来,没有行号就像没了坐标一样的找不到北。

再次感谢您的回复

多谢回复。

  1. 在Spacemacs中, “各行与当前光标的相对位置,数字+j/k在行中跳转真是行云流水,流畅无比”的效果, 是不是也可以达到。 这一点我在VIM中也还没有用过,待会我在Spacemacs中, 试用下。后续也把这方面的试用结果记录下来,到时,也请帮再指点看看。

  2. 关于avy和spacemacs里的“M-m j-l”使用,多谢提醒,接下来, 我也实验下, 再把结果贴出来。

再次感谢。

刚才试了下, 关于"Spacemacs中, 数字+j/k在行中跳转", Spacemacs中,也可以使用数字+j/k的方式往前或后跳转。 具体来看, 执行3j,从当前光标往下跳,跳到下面的第3行。 执行8k,从当前光标往上跳,跳到上面的第8行。 这样, relative line numbers的设置貌似还算管事。

关于spacemacs里的“M-m j-l”使用, 刚才也试了下。 执行SPC j后看到下面的提示:

再按下l后, 看到下面的标识。

上图中,按左右两个颜色条里的字母后, 可以方便地跳到对应的行。

多谢。

你做这些,和java相关的在哪里。。。

其实我挺佩服你的,本来emacs就不容易上手,你上来就直接hack spacemacs,后者我觉得在emacs上包了很多内容,虽然我在这上面用,但我觉得新手想稍微随心所欲改点什么配置,在spacemacs上并不容易;然后你又是想搞java,本来emacs里用java,大家之前的帖子也都讨论很久,终究还是离IDE有一些距离。

从我浅薄的实践经验看,你直接上手就给自己开了hard模式,相当hard。

如果你是学生党,我觉得没什么。 但从实战上看,java方面,你还是要保留一些IDE使用的空间。在emacs上可以循序渐进,不着急马上就什么都能在emacs 上搞。

spacemacs有点不好的是,我个人看法,它让初学者远离了原来最基本的emacs是什么样子,它本来比较直接的结构和有自己特点的功能快捷键;我最开始入门是用 Purcell的emacs 配置,还是非常直接,现在我们这个论坛,也有大牛挂出了自己的emacs配置,也非常简洁,这些我觉得离emacs上手更近一些。 当然直接用spacemacs没有什么,但你得花点时间,了解它是怎么思考,为什么要这么一个架构的,得读读它的文档,这个花的时间并不主要在emacs上。

emacs 里,比较方便容易可用的package,我觉得如projectile, magit,窗口管理,快捷键使用等,这些倒是可以先用起来。

1 个赞

您好, 多谢回复。 仔细看了您的回复, 下面归纳要点回复下。

  1. 关于跟Java的关系。 现在的写出来的内容, 是刚起步。 这个帖子,我会长期维护下来,现在看来会超过一年,最终目标想着是,在Emacs里,尽最大可能地达到趋向IDE的功能,如写代码、写注释、加写TODO、编译、跳转、搜索、打包、Git管理、(包括Debug地)运行Tomcat、Refactor等,现在还不确定具体哪些功能是可以最终使用的,但想利用这个帖子记录下Hack过程中的点滴收获。这个方法可能有些笨,不过,参照文正公的笨方法,个人觉得会收获更扎实。
  2. 关于“就给自己开了hard模式”,坦率来说, 是有些拔高。 从我这些年搞软件的一些经验看,两种方式结合起来用,效果更好。 这两种方式的一个是快速动手让自己被问题包围,另一个是死磕文档和教程。现在这个帖子的内容是,快速动手让问题裹挟的路子,通过帖子记录下自己的问题,公布出来,请大家帮忙也倒逼自己集中精力想办法,最后把自己的试错过程记录下,请大家再纠正。 这样跟问题的短兵相接,可以记自己借助问题快速上手。 另一方面,自己也在看Emacs方面的文档,现在暂时还没有找到把看文档的经验教训记录下来跟大家交流的方式。
  3. 关于“spacemacs有点不好的是,我个人看法,它让初学者远离了原来最基本的emacs是什么样子”, 我的一个想法: 利用spacemacs快速上手, 再对比Emacs文档描述的基本功能, 反推spacemacs是怎么配置和实现的,最终可以理论联系实际地打通。

再次感谢回复, 后续也请多多指教。

这里先抛开spacemacs,使用纯Emacs配置JDEE地体验了下Java的HelloWorld. 整体体验过程,还算顺畅。 过程要点记录如下:

  1. 在Docker中, 新安装了Emacs, 版本是GNU Emacs 24.5.1.

  2. https://github.com/jdee-emacs/jdee-server里的方式, 下载、编译好jdee-server的jar, 并记录jar的目录/jdee-server/target/。

  3. https://github.com/jdee-emacs/jdee里的方式, 配置Emacs的配置文件,最终内容如下:

  4. 新建一个Java文件, 命名为HelloWorld,内容如下:

  5. 使用命令“c-c c-v c-c”, 编译,这里会提醒

    这里输入yes, 回车后,开始编译。

  6. 使用命令“c-c c-v c-r”, 运行, 看到结果:

小小的起点, 离工作中像IDE那样的管理Project还很远,不过,也算是自己使用Emacs第一次写出Java代码的小经验,还是可以值得记录下。

1 个赞

除了外部命令方式外, Emas应该是有插件来运行Git的吧。