V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lazzyboy
V2EX  ›  Vim

Vim 中 搭建的 Java 开发环境,支持代码补全,语法检测,简单重构等特性

  •  
  •   lazzyboy · 2017-07-29 15:37:48 +08:00 · 5446 次点击
    这是一个创建于 2434 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文主要介绍 SpaceVim 中为 java 开发所提供的各种调试,重构,代码补全以及语法检测的功能。

    代码补全

    在 SpaceVim 中,打开 java 文件后会自动分析项目结构,分析项目的 classpath,目前支持 maven,gradle 以及 eclipse 项目。在 SpaceVim 内你可以补全对象的函数,并且可以补全重载函数,提示函数的参数结构,补全后可以展开参数。以下为一个效果图:

    code completion

    语法检查

    语法检测提供两种模式,一种实在编辑过程中实时监测,另外一种是在保存文件时进行语法检测,效果图如下:

    syntax checking

    代码重构

    • 自动生成 getter setter:快捷键 SPC l a

    getset

    • 自动生成 toString; 快捷键 SPC l ts

    generate toString

    • 自动生存 equals/hashCode 方法:快捷键 SPC l eq

    generate equals hashCode

    • 执行 maven 相关命令

    maven command

    SpaceVim 项目仓库地址: SpaceVim/SpaceVim

    SpaceVim 用户 QQ 群:121056965

    30 条回复    2017-09-06 20:49:04 +08:00
    Guaidaodl
        1
    Guaidaodl  
       2017-07-29 15:51:44 +08:00
    看起来很厉害啊。
    weakish
        2
    weakish  
       2017-07-29 16:12:43 +08:00
    > 代码重构

    这些好像是补全? 重构一般是抽取变量、方法、改名等等。
    lazzyboy
        3
    lazzyboy  
    OP
       2017-07-29 16:20:39 +08:00
    改方法名,我用的是全工程替换,抽取变量做的不多,目前支持:
    局部变量 -> 方法参数
    局部变量 -> 类变量
    抽取方法的逻辑比较复杂,以后有机会再实现。
    sagaxu
        4
    sagaxu  
       2017-07-29 16:29:10 +08:00 via Android
    相比 idea,这个的优势是什么呢?
    Lonely
        5
    Lonely  
       2017-07-29 17:00:16 +08:00 via iPhone
    哪些场景可以用到?
    ldlood
        6
    ldlood  
       2017-07-29 17:32:29 +08:00
    好强悍啊
    hellohello123
        7
    hellohello123  
       2017-07-29 17:38:33 +08:00
    为什么不使用 Intellj + Vim 插件呢?
    lazzyboy
        8
    lazzyboy  
    OP
       2017-07-29 18:12:24 +08:00 via Android
    @hellohello123 因为用不到 gui 呀!
    lazzyboy
        9
    lazzyboy  
    OP
       2017-07-29 18:12:53 +08:00 via Android
    @sagaxu 这个是 tui
    wangdu2012
        10
    wangdu2012  
       2017-07-29 18:23:22 +08:00 via iPhone
    idea 就好了。当然,如你这么多时间,搞一搞也是可以的
    lowzoom
        11
    lowzoom  
       2017-07-29 18:24:49 +08:00
    被 IntelliJ 爆成渣
    initialdp
        12
    initialdp  
       2017-07-29 19:45:03 +08:00   ❤️ 1
    永远无法理解 Vim 用户的自虐心态。
    ivechan
        13
    ivechan  
       2017-07-29 19:47:58 +08:00
    IDEA 的 vim 模式感觉已经做的不错了, 另外 vim 是自虐?
    你把 vim 当成 IDE 你是自虐, 但是 vim 作为 editor 怎么自虐?
    scriptB0y
        14
    scriptB0y  
       2017-07-29 22:37:32 +08:00
    vim 跨文件跳转是怎么解决的
    hyperdak288
        15
    hyperdak288  
       2017-07-29 23:03:46 +08:00
    @ivechan 楼主这种就是把 VIM 强行当 IDE 的自虐心态
    solidsnake
        16
    solidsnake  
       2017-07-29 23:11:38 +08:00 via iPhone
    VIM 熟练掌握的话,效率更高吧?
    VIM 主要不卡顿吧,但是现在电脑性能过剩,IDE 也不怎么卡了吧?
    hujianxin
        17
    hujianxin  
       2017-07-29 23:41:29 +08:00
    把时间都耽误在这些地方了
    linux40
        18
    linux40  
       2017-07-30 07:48:18 +08:00 via Android
    纸张,都说不用图形界面了,你们还想要什么理由?
    lazzyboy
        19
    lazzyboy  
    OP
       2017-07-30 09:25:57 +08:00 via Android
    @linux40 是呀,无法理解这些人,估计公司项目做多了,当我需要随身连多个服务器改代码的时候,我是不是要在每个服务器上装 gui ? 而且我也用不了服务器上 gui 呀,真逗的人!
    chickplilita
        20
    chickplilita  
       2017-07-30 09:53:06 +08:00
    idea 还剩 debug 优势,这个还是很难用 vim 做到的。不过 getter setter 还有模板做出来很厉害了。!!!
    tlpmania
        21
    tlpmania  
       2017-07-30 09:53:37 +08:00 via Android
    为什么要连服务器改代码啊兄弟 正确的流程不是提交 reivew 合并再推上服务器吗
    sagaxu
        22
    sagaxu  
       2017-07-30 12:33:32 +08:00 via Android
    @lazzyboy 你们可以服务器上改代码?我们没有权限直接改,只能提交到 git 走发布系统,而且后端都是集群,最少 3 台机器,一台台改真吃不消。
    liuhuansir
        23
    liuhuansir  
       2017-07-30 16:19:45 +08:00
    大大小小待过 5 家公司,还没见过哪家需要直接连服务器直接修改代码的,最多也就是改下配置文件,所以实在难以理解你们的这个需求
    tracyone
        24
    tracyone  
       2017-07-30 19:38:24 +08:00
    @liuhuansir 只能说你还见不够多。
    DarkAlexWang
        25
    DarkAlexWang  
       2017-07-30 22:27:18 +08:00
    @lazzyboy 兄弟做得不错,看得出来花了非常多的时间制作和维护,继续加油。
    另外我想问下,因为我习惯了一些我自己的 key binding 和配色设置,所以没有直接安装你的这个 spacevim,但是如果我对其中的某些模块感兴趣,不知道有没有什么办法能借鉴一下的?
    lazzyboy
        26
    lazzyboy  
    OP
       2017-07-31 08:08:26 +08:00 via Android
    @DarkAlexWang spacevim 的配置是模块化的,你可以只载入你想要的模块,常用的插件配色都有,你可以看看 spacevim 的文档,了解下如何配置,你也可以添加其他插件和 key bindings
    KentY
        27
    KentY  
       2017-08-29 16:56:39 +08:00
    首先, 肯定楼主下功夫研究这个的精神. 不过, 从实用角度说, 这个写简单的 project 可能可以, 比如教学的例子啊, 依赖不是很多的 prototype 啊, 如果真是实际的 project, 各种 framework, unittest, debug/remote debugging, Java 还得 IDE.

    可能 Java 相关的文本编辑是目前我唯一不用 vim 解决的了, 现在这个回复就是在 vim 里, 呵呵. 自己吃 Java 饭 20 来年了. 因为一切编辑都熟悉了 vim, 很久前就开始尝试 Eclipse, eclim, eclipse+viPlugin 直到公司统一用 jetbrain 的东西, intellij+ideavim, 我觉得我个人满意度已经到 8,9 成了. vim 作为个编辑器, 一个简单的 intellij 的功能, 如果要 vim 自己实现, 要费很大劲, 而且即使做到了, 效果跟 ide 比也有很大差距. 而且还有随口就能说出的常用功能用 vim 几乎很难做到.

    如果目的不是练手儿, 而是真正使用, 纯 vim 的"Java IDE" 可用性真的不怎么大.

    my two cents
    lazzyboy
        28
    lazzyboy  
    OP
       2017-08-31 21:46:22 +08:00
    @KentY 其实理论上大家都是这么想得,并且很多人也说了 vim 仅仅是 text editor, 但是如果我们细细去想一下,IDE 世界也就是一个前台界面,和后台逻辑之间的通信,现在很多语言的后台部分,都支持 cli 模式,而 neovim 和 vim 都加入的 job 等异步机制,我觉得完全可以以此建立一个 IDE,当然,这前提是你是一个爱折腾的人。
    KentY
        29
    KentY  
       2017-09-06 17:33:59 +08:00
    @lazzyboy 你跟我说的不是同一件事. 我没说 vim 做不了, 而是很难做到现在 ide 的 usability, 毕竟"折腾"出来的东西(作品), 是要用来做 java 开发的, 不是能用, 得是好用. 或者, 就举个常用的 intellij, 通过配置 vim 来写 java 项目, 就说个最常见的 Java EE 项目吧, 弄几个 EJB, 数据库来回读写, 再弄几个 WS, 这是最常见的了. 你如果现在必须要写这个 Java 项目, 从 0 开始, 你是用你配置好的 vim 还是 intellij/eclipse?

    就说 intellij 对这个项目所需要的那些 features, 我估计你用 vim 都做到了要比这个 java 项目本身的工作量大出 n 倍去, building, code refactory, wsdl generation, jaxb/json/xml/pojo generation, 各种不同的 code completion, call hierarchy 不同形式现实, unittest 集成, 远程调试... 这些都是很常用的, 还不说那些细小的, 比如 debugger 的绝大部分功能, 比如鼠标参与的很多功能.

    主要意思就是, 通过配置(你说的折腾)来熟悉 /学习 vim 脚本, ok, 但是出来的这个东西在 java 开发上易用性, 生产率角度看, 用处不大. 就好像, 学 java, 写个通讯录练手, 目的是熟悉这个技术, 而不是要通讯录多好用一样.

    说的有点多了. 言多语失, 如有冒犯, 还望担待.
    lazzyboy
        30
    lazzyboy  
    OP
       2017-09-06 20:49:04 +08:00
    @KentY 我能理解,这个也看个人爱好,以及个人时间安排是吧。在国内,程序员都比较辛苦,各种项目敢的不得了,所以很难有时间折腾,不过你看国外的程序员,还是很爱折腾的,包括 neovim 包括以此衍生出来的 oni gonvim 等等。而 wsdjeg 的 spacevim 对我来说还是比较合适的,我不写 vim 脚本,但是我想用 vim,我就需要一个配置好的 自定义程度高的,这种自定义不应该涉及太多的 vim 脚本知识。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2969 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:06 · PVG 23:06 · LAX 08:06 · JFK 11:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.