说到 VIM,网路上的教程真的是多如牛毛,大部分的教程作者都狂热的 VIM 爱好者,在他们眼里 VIM 是一切,他们用 VIM 上网,收发邮件,听音乐,发博客,刷微博……

但对于新手来说,这些教程非但不客观,还非常不容易上手,跟着它们做会遇到各种各样的问题。

最近花了将近一个星期的时间才配置了一个 VIM 的 Java 的开发环境, 相对于 Eclipse 来说功能确实差了一点,但比起一般的文本编辑器来说,功能是相当的强大。这里感谢那些为 VIM 开发插件的大神们。

网路上把 VIM 打造成 IDE 的教程很多,但如果说要把 VIM 打造成 Java IDE,网路上那些也仅仅是简单介绍安装两个插件就草草了事,真拿来做开发,有相当多的不足。

下面就来讲讲如何将 VIM 打造成 Java IDE,不能说这个教程是最好,也最起码在细节方面符合一个 Java 开发者的要求了。

写在前面

在接触了 Ubuntu 之后,就决定了要在 VIM 和 Emacs 之间选择一个。VIM 和 Emacs 两个本来就都用过,快捷键都知道,只是不熟悉。

在打算熟练其中一个的时候,开始选择是 Emacs。选择 Emacs 是由于 Dvorak 键盘,使用了四年了 Dvorak ,考虑到 VIM 在 Dvorak 下快捷键凌乱,所以选择了 Emacs 。

但 Emacs 所有快捷键都是两个按键,通过 Ctrl / Alt / Shift 组合完成各种操作,在使用了一段时间之后,实在是适应不了,也就不了了之。

后来工作中开始频繁使用 SSH / Telnet 登录 AIX / Unix,VI 接触多了开始渐渐习惯,也渐渐喜欢上了 VI 的各种操作。于是开始从 Emacs 转向 VIM。

就目前的使用情况来看,Dvorak下 VIM 基本没有不习惯,所有的快捷键都还算比较合理,由于本人是先使用 Dvorak 后使用的 VIM ,对于QWERTY下的 VIM 有多舒服,也就没有发言权了。

现在唯一的问题是:在 QWERTY 下,可以使用 替代 Esc 的方案在 Dvorak 下略有不顺手。

现在的电脑是这样的局面:Ubuntu系统 + Dvorak键盘布局 + VIM 编辑器,当然 Eclipse 也是必备 IDE 。

VIM 常用命令

人们说 VIM 的魅力在于 VIM 的插件,表示赞同。但是如果你对 VIM 常用的命令不熟悉,请不要考虑使用 VIM 打造 Java IDE。请先把 VIM 作为平常的默认文本编辑器使用,熟悉一两个月 VIM 常用命令。

VIM 命令很多,在这里列出一些本人工作中常用到的,也是非常常见的命令。

移动命令

h    光标向左移动

l     光标向右移动

j     光标向下移动

k    光标向上移动

插入命令

a      光标移动至所在位置的后方,并进入插入模式

A     光标移动至当前行的最后,并进入插入模式

i       光标所在位置,进入插入模式

o      光标移动至所在行的下一行,进入插入模式

O     光标移动至所在行的上一行,进入插入模式

删除命令

x       删除一个光标所在处的字符

3x     删除从当前光标开始,向后3个字符,以此类推:10x,20x……

dd    删除光标所在的行

3dd  删除光标所在行开始,向下3行,以此类推:10dd,20dd

dw    删除光标所在处开始,到第一个空格之间的所有字符

daw  删除光标所在处整个单词,往前数第一个空格(或 点 "." 或 括号 "(" ),往后数第一个空格(或 点 "." 或 括号 "(" )之间的所有字符.

替换命令

r    用输入的字符,替换光标所在位置的字符

跳转命令

3g    跳转到整个文本文件的第三行,以此类推:10g,20g,256g…… 需要配合显示文本行号功能一起使用。

G     跳转到整个文件的末尾一行。

查找命令

/         然后输入字符,回车,会高亮查找到的内容。命令模式下输入 n 向下查找下一个需要查找的内容,N 向上查找上一个需要查找的内容。

#         查找光标所在处的单词

:nohl     取消查找当前关键字的高亮显示(不会永久关闭,只是当此查找高亮去除)

撤销

u     撤销刚才的操作,可多次撤销(后退)

Ctrl + R    撤销刚才的撤销(前进)

合并

J     合并当前行和下一行(去除当前行和下一行之间的空格)

文本选择

v     进入块模式,配合 j k h l,可以选中单个字符(以字符为单位进行选中)

V     进入块模式,配合 j k ,可以选中多行(以行为单位进行选中)

y    复制当前选中的字符或行进入 VIM 剪贴板

p    粘帖 VIM 剪贴板中的内容

注意:VIM 下所有删除操作包括 x ,dd, dw,都会将字符复制进入剪贴板

VIM 的剪贴板与系统剪贴板是相互独立的,想要直接使用系统剪贴板,可以这样:v 进入块模式,选中字符,然后  (”+y)(不包括括号,但是包括 + 号) 其中 “+ 是系统剪贴板的名称,y表示复制内容到系统剪贴板,当然,在系统中复制的内容如果想要粘帖到 VIM ,可以在命令模式下输入(”+p) ,“+ 表示系统剪贴板,p 表示粘帖。

窗口命令

Ctrl + w + h 表示光标移动到左边的分割窗口

Ctrl + w + l  表示光标移动到右边的分割窗口

Ctrl + w + j  表示光标移动到下面的分割窗口

Ctrl + w + k  表示光标移动到上边的分割窗口

此命令在使用某些插件的时候会经常使用

关闭保存

ZZ 关闭当前分割窗口,如果当前窗口没有分割,则退出 VIM

:q   退出 VIM

:w   保存当前文件

:wq  保存并退出

以上是工作学习中使用 VIM 不可避免的常用命令。

记事本 Java 开发目录结构

使用记事本做 Java 开发,没有了 IDE 为我们合理的管理 Java 文件,我们就需要自己安排好文件的目录结构。

我们当然也可以所有的文件都堆到一个文件夹里面,java / class / jar 都在一个文件夹里面,如果用到了内部类,那整个文件夹是相当的混乱。

于是就参考了 Eclipse 的目录结构,将 .java文件 .class文件 .jar 文件分别分开放置。

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

可以看到上面的目录结构:

Troy工程名

bin 存放编译的 class 文件

src 存放所有的 java 文件

lib  存放所有的第三方 jar 包

如图:

开发的时候,首先建立 Troy(工程名文件夹),在 Troy 下建立 bin / lib / src 三个文件夹, Java 就是第三方 jar 包多,统统都放到 lib 目录下。

然后在 src 目录下 自己建立包名,这里演示是 part2, 进入到 part2 目录建立一个 HelloWorld.java 文件

如图:

相对来说,这样的目录结构对于 Java 开发是很清晰的,class文件 / Java文件 / jar文件都归类存放。

这里需要注意的是,有主方法,也就是 main 方法的 java 文件的 package 必须和我们文件夹的名字一样。即,这里的 HelloWorld,有主方法,所在文件夹是 part2 ,第一行必须是 package part2,不能更改其它名字。如果是没有主方法的类,则 package 其它的名字也可以。这个也是为了配合 VIM 的特性和 Java 命令,需要注意的地方。

   关于 Javac 和 Java

抛开 IDE 做 Java 开发并不是第一次,大三到大四两年时间,所有的开发都是在 Notepad++ 上完成的,包括毕业设计。当时只有颜色高亮,没有任何提示,完全依靠 JavaAPI 和 原生的 Notepad++。

回头想想这是一件痛苦的事情,但是作为初学,所带来的好出也是不言而喻,对 Java 基础类的结构变得非常的清晰。

这里会遇到一个很大的问题(尤其是一开始就使用 Eclipse 或者 MyEclipse 或者其它 IDE 开发的同学),那就是 javac 命令编译 java 命令的问题。

如果说把所有文件都堆到一个文件夹里去做 Java 开发,那也就完全没有问题。

javac *.java 搞定!

问题就出在,我们需要一个良好的目录结构,即上一部分讲到的目录结构。

请问,如何编译 java 文件,才能即引入 lib 中的第三方 jar 包,又让 编译产生的所有 class 都在 bin 目录下?

答案涉及 javac 的参数问题。

先看编译命令:

 javac -cp ../../lib:../../bin -Djava.ext.dirs=../../lib -d ../../bin HelloWorld.java

这里由于使用的系统是 Ubuntu ,所以目录之间使用的是 冒号隔开,如果是 windows ,请自行替为 ; 分号

-cp ../../lib:../../bin  编译过程中需要引入 class 所在的文件夹的路径,linux用 冒号 分隔,windows 用 分号 分隔

-Djava.ext.dirs=../../bin 告诉系统,引入的第三方 jar 包存放的目录,如有引用第三方 jar 包编译时会通过此参数到相应的路径下查找 

  -d ../../bin 编译后的 class 文件都存放到 ../../bin 目录,也就是 bin 目录下

  当通过编译后,bin 目录下,会出现一个 part2 文件夹,里面是 HelloWorld.class

然后是运行命令:

java -cp ../../bin -Djava.ext.dirs=../../lib part2.HelloWorld

这里也需要指定 class 的目录,jar 包的目录。特别需要注意的是 包名 part2.HelloWorld ,单单写 HelloWorld 则运行出错。

还有一个注意点就是,上面的 ../../bin 写的是相对路径,相当于写死了。相对的是 HelloWorld 所在的目录,我们工作的目录一定要转移到 part2 目录中。把 part2 作为当前目录。当然,如果也可以选择 part3 ,也可以是你所建立的任何名字的文件夹。

使用 Gvim 开发时也需要注意这一点。

在了解了这些问题之后,来讲如何把 VIM 打造 Java IDE 才有基础也才有意义。

   下一章将重点讲一讲如何配置 VIM 的相关 Java 插件

'

VIM 打造 Java IDE 1相关推荐

  1. VIM 打造 Java IDE 2

    ' 上一篇介绍了 VIM 常用命令和控制台编译 Java 文件相关参数问题.这一篇重点来介绍一下关于 VIM 的插件. VIM 的插件众多,作为打造 Java IDE ,我们需要选择一些常用也是可以被 ...

  2. Neovim 打造 Java IDE

    Neovim 打造 Java IDE 当你习惯了 Vim 文本编辑器,你就习惯了 Vim 文本编辑器(

  3. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)

    从上周开始我就开始折腾 ,搞了一下 Vim IDE for Python & Go,我将整个搭建的过程整理成本篇文章分享出来,本篇是 Python 版本的保姆级教程,实际上我还写了 Go 版本 ...

  4. java vim ide_把VIM配置成IDE开发环境 | 学步园

    VIM常用命令 VIM命令图 VIM键盘布局图 VIM键盘布局英文 VIM键盘布局中文 将VIM配置成IDE(通过 VIM基本插件 和VIM配置文件) Ubuntu14下我的VIM IDE配置的效果图 ...

  5. 把vim打造成牛逼的C++ IDE

    把vim打造成牛逼的C++ IDE 对于windows上做C++开发的用户来说,vs为他们做了大量的工作,语法高亮.自动缩进.智能提示等等,当你happy的使用vs时,请记住一点,这是一个收费软件,虽 ...

  6. vim 打造属于自己的 IDE

    一.ctags 安装和配置 首先要说的是ctags是一个linux上很普遍的源码分析工具, 可以将代码中的函数变量等定义的位置记录在一个名称为tags的文件. 类似于数据库记录功能. tags文件的产 ...

  7. 谁说Vim不是IDE?

    话说操作系统.编程语言和编辑器似乎是程序员永恒的吐槽话题,技术发展了几十年,大家讨论起这几个"之争"还是充满愤怒.津津乐道.有人描述过Emacs和VI程序员,大家沿着不同的道路和目 ...

  8. Vim 中 Java 代码自动完成 - vim-javacomplete2

    用 Java 进行编码基本还是离不开 IntelliJ IDEA 或 Eclipse, 看别人完全用 Vim 进行 Javascript 项目编程很是眼红,估摸着能不能把 Vim 打造成一个更强的 J ...

  9. 图灵社区 : 阅读 : 谁说Vim不是IDE?(三)

    图灵社区 : 阅读 : 谁说Vim不是IDE?(三) Powerline 1.下载地址 https://github.com/Lokaltog/vim-powerline 2.功能说明 Powerli ...

最新文章

  1. Flex 布局详解 - 转自阮一峰老师
  2. 特斯拉AI总监:我复现了LeCun 33年前的神经网络,发现和现在区别不大
  3. 什么样的程序员生涯指南,能在GitHub上获3.6万星
  4. 轮询 长轮询 websocket
  5. 谷歌Chrome 81浏览器更新:新增微软Chromium版Edge现代Web控件
  6. 妙趣横生的算法--二叉树
  7. Python实现一个代码行数统计工具(以C/C++为例)
  8. OSGEarth基于经纬度获取高程数据
  9. cubase手机版android,Cubase中文应用
  10. java验证码实现方式,SpringBoot实现后端验证码,CaptchaUtil美观的后端随机、算术、中文动态验证码
  11. 一名小程序员的2021年度 个人总结
  12. 想做个可以打印的服务,想用printdocument,但是不用winform,有谁知道怎么实现吗?万分感谢!
  13. c 语言字符串查找替换,c ++ - 如何在标准字符串中搜索/查找和替换?
  14. 360qqq的背后是什么?
  15. 网站URL网址末尾是否应该使用反斜杠
  16. [回顾]windows安装mujoco200
  17. 大型生鲜配送企业如何做到快速分拣商品?
  18. 解决Rancher2.5x版本突然无法使用(K3S证书过期大BUG)
  19. 慎重跳槽,我眼中的跳槽黄金时期
  20. ubuntu18.04 nvidia gpu驱动与tensorflow-gpu以 docker方式安装

热门文章

  1. python编程单片机_Python与C51单片机交互
  2. Mysql数据库的监控
  3. android自动打开软件下载,手机后台软件老自动打开怎么办【如何解决】
  4. win7计算机左边增加桌面,技术帖,win7如何在任务栏左下角添加“显示桌面”图标。...
  5. 【BMI指数计算器V3.0】项目实战
  6. 新品发布-T3M系列高性能SDR MIMO mesh自组网主板
  7. 调研套接字server bind 失败的原因?——Address already in use
  8. AttributeError: partially initialized module ‘turtle‘ has no attribute ‘setup‘问题Traceback (most rece
  9. 学习云计算流程,分享学习资源
  10. airtest 获取分辨率 绝对坐标 相对坐标