热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux之vim打造javaIDE

VIMJavaIDE插件Pathogen:该插件用来管理Vim的插件,可以让插件的安装与卸载更加方便。配合Github和Submodule效果更佳。NerdTree
VIM Java IDE 插件

    Pathogen:该插件用来管理Vim的插件,可以让插件的安装与卸载更加方便。配合Github和Submodule效果更佳。

    NerdTree:该插件会生成工程目录树。

    TagBar:该插件生成函数、变量列表。

    UltiSnips:类似TextMate的snippets,是一个块补全的插件。除了 Java 还内置了市面上几乎所有流行语言的补全。也可以自定义。

    vim-commentary:注释代码的插件。

    syntastic:保存文件时检查语法的插件。每次保存时,编译当前 Java 文件,检查是否有语法错误。

    delimitMate:成对生成(),{},[]。

    buferexplorer:方便浏览buffer的插件。

    TagHightlight:根据生成的Tag文件,高亮类、变量、函数和关键字。

    vim-powerline:超有爱的状态栏

    javacomplete: Java 补全插件,可以像 Eclipse 一样提示对象的函数,不过有些时候会提示不出来,不知道为什么。

 

    这些就是这一周折腾的插件,其实也还有很多的插件,大家可以参考子龙山人的博客《打造属于自己的Vim神器》。

    作为 Java 开发,个人觉得这些是相当足够,如果各位还有关于 Java 的插件提供,希望可以在网站下方留言。

 

    插件简介

   Pathogen,这个插件属于 VIM 的基础插件。安装它之后,在安装上面推荐的插件是相当的方便。(这里默认是Linux 系统,如果是 windows 请查看插件 GitHub 相关介绍)

                        1. 将 pathogen.vim 复制到下面的文件夹下,

[plain] view plain copy
  1. ~/.vim/autoload/pathogen.vim  

                        2.  控制台运行一下的命令:

[plain] view plain copy
  1. mkdir -p ~/.vim/autoload ~/.vim/bundle; \  
  2. curl -Sso ~/.vim/autoload/pathogen.vim \  
  3. https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim  

                        3. 在 ~/.vimrc 中添加如下代码:

[plain] view plain copy
  1. execute pathogen#infect()  

   

    重启 VIM 后便完成了 Pathogen 的安装,之后我们就可以方便安装以上推荐的所有插件了。这是

    首先  cd ~/.vim/autoload/bundle 进到 bundle 目录中。记住,每次安装插件都需要 cd 到此目录。

   

NerdTree:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/scrooloose/nerdtree.git  

TagBar:


[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/majutsushi/tagbar  

UltiSnips:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/SirVer/ultisnips  

vim-commentary:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/tpope/vim-commentary  

syntastic:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/scrooloose/syntastic  

delimitMate:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/Raimondi/delimitMate  

bufexplorer:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/vim-scripts/bufexplorer.zip  

TagHighlight:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/magic-dot-files/TagHighlight  

vim-powerline:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/Lokaltog/vim-powerline  

javacomplete:

[plain] view plain copy
  1. cd ~/.vim/bundle  
  2. git clone https://github.com/vim-scripts/javacomplete  

    通过 Pathogen 可以很方便得安装插件。我们还需要到 GitHub 查看相关说明,是否需要在 ~/.vimsrc 中进行相关的插件配置。

    安装完插件,下面来看看这些插件如何使用,和相关的配置。

 

NerdTree 

~/.vimrc 中添加如下代码:

[plain] view plain copy
  1. " About NERDTree  
  2. noremap :NERDTreeToggle  
  3. autocmd vimenter * if !argc() | NERDTree | endif  "open a NERDTree automatically when vim starts up if no files were specified  
  4. autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif  

之后,按 F2 便可呼出 NerdTree ,一般打开 Java 文件后,NerdTree 固定在窗口左侧,可按 F2 关闭。

 

TagBar

~/.vimrc 中添加如下代码:

[plain] view plain copy
  1. " TagBar 自动生成参数和方法  
  2. " Then the F8 key will toggle the Tagbar window.  
  3. nmap :TagbarToggle  

之后,按 F8 便可呼出 TagBar

 

syntastic

syntastic 需要重点说明,刚开始使用 syntastic 时发现只要是第三方 jar 包中的 class ,都无法识别,虽然编译可以通过,但代码检查报错也相当不爽。本来寻思着改 syntastic 源码,后来在官网看了关于 syntastic 的解释,了解到 syntastic 的原理。所谓代码检查,其实就是每次保存文件时,都进行 javac 编译当前文件,javac 会返回相应的错误内容, syntastic 会将错误信息加以分析,反映到 VIM 的文本上。了解了这些,我们就可以方便得使得 syntastic 接受第三方 jar 包了,也就是上篇提到的 javac 参数问题。

~/.vimrc 中添加如下代码:

[plain] view plain copy
  1. "syntastic 保存检查代码时候传入参数  
  2. let g:syntastic_java_javac_args="-cp ../../lib:../../bin -sourcepath ../../bin -Djava.ext.dirs=../../lib -d ../../bin"  


vim-commentary

      块模式:v 命令选中需要注释的内容,gc 注释,取消注释也是同样的步骤。

                      V 命令,选中当前行,gc 注释当前正行内容,这个使用是最方便的,也是最多的。

 

bufexplorer

     命令模式:\be 跳转到缓冲区窗口,然后 选择需要的缓冲区回车

 

javacomplete

~/.vimrc 中添加如下代码:

[plain] view plain copy
  1. " 关于Java自动文件补全插件  
  2. autocmd Filetype java set omnifunc=javacomplete#Complete  
  3. autocmd Filetype java set completefunc=javacomplete#CompleteParamsInf  
  4. inoremap  
  5. inoremap  
  6. " 在VIM编辑java文件时当敲入 . 时会出发  
  7. autocmd Filetype java,Javascript,jsp inoremap   .  .  
  8. autocmd Filetype java,Javascript,jsp inoremap   .  .  


      关于 javacomplete 开始使用时候,也发现对第三方 jar 包不能进行有效的提示,至少 import 时候没有提示会让人很难受。

      经过对源代码的查看,发现提供提示功能的主要是 Relfection.class ,如果想要对第三方 jar 包提供提示支持,就需要自己重新编译 class 。

      下载了 javacomplete 包,发现里面有一 Relfection.java 文件,我们需要修改它,然后重新编译出 Reflection.class 就可以实现对第三方 jar 包的提示支持了。

      我们搜索整个文档,查找到 user classpath 可以定位到大概 155 行的位置如图所示:


      然后我们紧跟这下面,就添加自己的代码,就是在 classpath 中增加 lib 目录。如图所示:


    

[java] view plain copy
  1. // Troy_classpath  
  2. String troyPath = System.getProperty("user.dir") ;  
  3.   
  4. String[] troyLib = troyPath.split("/") ;  
  5. StringBuilder sb = new StringBuilder() ;  
  6. for (int i=0; i         sb.append(troyLib[i] + "/") ;     
  7. }  
  8. troyPath = sb.append("lib").toString() ;  
  9.   
  10.   
  11. File[] troyFile = new File(troyPath).listFiles() ;  
  12. for (int i=0; i         if (!troyFile[i].exists())  
  13.     continue;  
  14.   
  15.     if (troyFile[i].toString().endsWith(".jar") ||troyFile[i].toString().endsWith(".zip"))  
  16.     htClasspath.put(troyFile[i].toString(), "");  
  17.     else {  
  18.     if (troyFile[i].isDirectory())  
  19.         htClasspath.put(troyFile[i].toString(), "");  
  20.     }  
  21. }  


      解释一下,String troyPath = System.getProperty("user.dir") ; 得到的是的当前目录,也就是点( . ) ,也就是我们在终端打开 gvim 时所在的目录。

      举例,我们在 cd ~/workplace_vim/Troy/src/part2 ,然后 gvim 命令打开 gvim ,troypath 得到的就是 ~/workplace_vim/Troy/src/part2 .

      紧跟着随后的代码,都是 java 的基础部分内容,不做过多解释,还得再重复一下我们所约定的目录结构:(lib 在 ~/workplace_vim/Troy/lib )

Troy
|-------bin
|         |-------part1
|         |-------part2
|                   |-------HelloWorld.class
|-------lib
|-------src
          |-------part1
          |-------part2
                    |-------HelloWorld.java

     修改完 Relfection.java ,我们编译一下 javac Reflection.java 得到 Reflection.class 替换官方的 .class 文件。
发现,已经可以提供对第三方 jar 包的提示支持了,虽然在很多时候方法还是提示不出来,但是至少 import 包可以提示没有问题。

     最近也会再想办法实现对第三方 jar 包里面方法的提示,如完成,会立刻更新上来。

     至此为止,已经把 VIM 的所有插件都已经讲完了,其实想要配置开发环境,也就是插件的问题,只要插件都 OK ,剩下的就是熟练就行。

 

    插件配置完成后,还有关于 ~/.vimrc 需要配置一下。

[plain] view plain copy
  1. " 一键编译java文件  
  2. map :!cd %:p:h && java -cp ../../bin -Djava.ext.dirs=../../lib %:p:h:t.%:p:t:r  
  3. map :!cd %:p:h && javac -cp ../../lib:../../bin -sourcepath ../../bin -Djava.ext.dirs=../../lib -d ../../bin *.java  

   

    添加以上配置后,F5 是运行当前文件。F4 是编译当前目录下的所有 java 文件。

    这里说明一下为什么有了 syntastic 插件,我们还需要 F4 编译。我们知道syntastic插件安装完成后,每次 :w 就会自动编译当前编辑的 java 文件,如果没有错误爆出,则 class 文件其实已经编译好了,那为什么还需要添加 F4 编译 *.java 呢。

    原因是这样的,在同一个包下我们新建一个 class B ,又新建一个 class A,然后 class A 中引用了 class B ,class B 中引用了 class A,这个时候,我们编译 A 会提示找不到 class B,编译 B 会提示找不到 class A 。相当于死循环。遇到这种情况,我们不能分开编译 A 和 B ,我们需要一起编译他们俩。也就是 javac *.java 就可以了,这个问题,网络上找了很久没有找到答案,有人说,代码写得有问题,通过改代码来解决,最后也是自己尝试解决。 使用 Eclipse 来做开发久了,编译这方面的知识会产生一个盲区。

    也并不是说 Eclipse 不好,只是非常推荐新人在刚开始时候,不要使用 Eclipse 或者其它的任何 IDE , GVIM / Emacs / Notepad++ / UG / EverEdit / EditPlus 都可以是很好的选择,至于 windows 自带的记事本还是算了,至少找一个支持颜色高亮的编辑器。然后在控制台使用 javac 编译,java 运行。新手还是以学习为主,不需要赶进度。Eclipse 确实效率高,但学习的时候,还是任何事都亲历亲为一下。Eclipse 为我们做了大部分工作,以至于很多年之后,如果不去刻意学习,我们会对于 java 编译等等的一些问题一片空白。

 

     现在已经完全的把工作环境从 Eclipse 移植到 GVIM ,只要进度能更得上,其实用什么编码都无所谓。

     使用 VIM ,还是强烈推荐 linux 系统,做 Java 开发,也强烈建议尽早的接触 linux 。推荐一下Ubuntu 吧,在 linux 里面,Ubuntu 占有非常重要的一席地位,作为桌面版本的 linux ,界面美观,使用起来也很方便,主要上手相对比较容易。对于还没有接触过 linux 又有意愿尝试的朋友,建议安装。


推荐阅读
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • 如何在Spark数据排序过程中有效避免内存溢出(OOM)问题
    本文深入探讨了在使用Spark进行数据排序时如何有效预防内存溢出(OOM)问题。通过具体的代码示例,详细阐述了优化策略和技术手段,为读者在实际工作中遇到类似问题提供了宝贵的参考和指导。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 在Ubuntu 20.04 Linux系统中部署Git的详细步骤与最佳实践
    在Ubuntu 20.04 Linux系统中部署Git时,首先确保您的操作系统版本正确,并已以具备sudo权限的用户身份登录。推荐使用APT软件包管理器进行安装,这是最简便且可靠的方法。此外,遵循最佳实践,如定期更新Git版本和配置全局设置,可以进一步提升使用体验和安全性。 ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • 在Java编程中,为了提高代码的可读性和执行效率,建议优先使用局部变量来存储方法的返回值,而不是多次调用同一个方法。这样不仅可以减少方法调用的开销,还能避免潜在的性能问题。此外,使用局部变量还可以增强代码的可维护性和调试便利性。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 在Unity中进行3D建模的全面指南,详细介绍了市场上三种主要的3D建模工具:Blender 3D、Maya和3ds Max。每种工具的特点、优势及其在Unity开发中的应用将被深入探讨,帮助开发者选择最适合自己的建模软件。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 浅析Java泛型及其应用
    Java泛型是自JDK 5引入的一项重要特性,旨在增强代码的类型安全性和复用性。通过泛型,开发人员可以在编译阶段进行类型检查,有效避免运行时的类型转换错误。本文将探讨Java泛型的基本概念、实现机制及其在实际开发中的应用场景,帮助读者深入理解并灵活运用这一强大工具。 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 本文深入探讨了 Android DrawingView 的优化技巧与实现方法,重点介绍了如何实现平滑绘制效果。通过支持常见的绘图工具和形状,以及图层变换功能,提升了用户体验。文章详细解析了绘制过程中的性能优化策略,包括减少重绘次数、使用硬件加速和优化内存管理等技术,为开发者提供了实用的参考。 ... [详细]
author-avatar
芝麻开门影视广告
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有