Vim可以直接运行代码吗
最近在尝试使用 Vim,有个问题请教,就
public class test {
public static void main(String args[]) {
System.out.print("shit,Test success!");
}
}
在 Vim 中,我可以直接运行调试吗,像 Sublime 的 cmd+B
一样。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
按题主的意思, 应该是编辑好代码后, 按一个快捷键直接自动编译并运行.
在
vim
中, 可通过:!cmd
来执行外部命令. 对应于题主写的单文件:原理如此, 只是接下来设定键映射. 在
.vimrc
文件中, 添加以下内容意为, 新建或读入
.java
文件前, 自动映射快捷钕<leader>rn
到指定命令.当然你也可以设置成两个快捷键. 这里并不推荐使用
Command
快捷键, 而是使用Leader
. 而事实上, 终端的vim
也不能映射Command
, 只有MacVim
可以.多文件其实也没什么, 只是在
javac
时, 换%
为*.java
, 换%:r
为真正的main
所在文件名.如果你的项目有固定的结构, 本质上是差不多的.
在编译时, 可能添加
-cp
选项指定依赖路径, 添加-d
选项指定输出路径. 如要打包为jar
, 再加快捷键.你可以在项目根目录定义一个
.project
属性文件, 描述项目结构和依赖, 再用VimL
语言或python
语言, 读取属性文件, 分别编译再输出. 至于依赖, 去~/.m2/
目录找, 它们的位置非常有规律.现在, 你可以将键映射到上述操作了, 不就是快捷键吗,
vim
多的是. 除了Ctrl/Alt/Shift
, 还有每个字母和数字, 还有leader
加任意长度字母和数字,leader
不够了, 还是mapleader
前缀. 对了, 你可能更喜欢F1-F12
.OK, 你基本上已经重新发明了
maven
了, 只是差自动下载依赖的功能. 但python
的网络库那么多, 我猜测mvn
的仓库应该是对外开放的, 只要遵循相关协议就能下载. 包与包之前有依赖关系, 你可以用python
再写个依赖处理算法.虽然
VimL
残的跟渣一样, 但我们支持python
啊,Ruby
啊,Lua
啊, 总有一款你喜欢的语言接口. 什么你觉得运行慢, 不要紧, 用C++
写, 做成C/S
架构的, 你看看YCM
人家怎么实现的, 仿照一个呗.好了, 编译运行打包依赖都解决了, 但也撑死算一个项目管理插件. 写
Java
没有补全, 那么多API
, 那么长的方法名, 还有各种样板写法和各种奇怪的异常抛出, 手写Java
代码真是力气活, 还拼脑容量.这怎么行, 必须搞个补全插件.
Vim
界补全的王者YCM
是在Clang
横空出世后, 才搞出来的. 在这之前,GNU
的g++
是不会共享语法分析的数据的. 你得自己写一个语法分析器, 对, 给C++
..., 才能进行智能补全.那么,
Java
这边究竟什么情况, 我还真不知道, 但就Java
95年就搞出来,vim
91年就搞出来了, 它俩共渡的日子少算也有20年了, 在这期间, 各种Java IDE
导出不穷, 但也没见谁搞出个屎来.YCM
对Java
提供的补全, 使用eclim
, 它和YCM
没有关系,YCM
只是提供接口,eclim
没有YCM
也能正常工作.eclim
插件的使用, 需要安装eclipse
,Java
界以缓慢开源著称的IDE
. 也就是说,eclim
在底层使用eclipse
来补全. 如果你不介意超缓慢的启动速度和补全速度, 可以一试.这简直不能忍, 题主横刀立马, 开始着手用
C++
写个Java
的语法分析器, 做成C/S
架构, 在插件中与服务器沟通来补全. 你也可以直接给YCM
写个Java
后端.据说,
Java
语法规范页数已经超过C++
. 但没事, 没有困难也要创造困难上, 更何况是有困难呢.至此, 我已经给题主指明了一条通神之路, 翻过荆棘, 你将一跃成为
vim
和Java
两界永远的大神, 彻底终结Vim
不适合写Java
的诅咒. 两派子弟必将永久膜拜朝奉.如果你写出来时,
Java
还活着的话...,JVM
平台的兄弟语言有点多...为什么不说
vim
啊, 因为vim
教永生!!!特此声明, 本文不包含任何对题主的调侃或戏谑或嘲讽或质疑什么的, 如让题主不爽, 我也不会道歉.
说这些, 只是说, 对于
vim
真没什么不可能的, 只要你有只够的技能时间. 这主要因为vim
只是一个编辑器, 它把该开放的接口都开放了, 你想干什么, 写插件就OK了.Vim
的中文手册, 抛开一些更新日志, 至少有1500
页. 即便你看完了, 也不见得会写插件, 还要看书. 只就Vim
的快捷键和操作, 我粗略了记了一下前300页的用户指南, 笔记就记了1000
多行, 这还是精简到估计只有我自己能看懂.通常, 在这个问题上,
Vim
提供了:make
接口来编译, 和makeprg
来设置编译参数. 但也要承认,Vim
设计之初, 大部分的设计都是为C
这样的编译语言做的, 像文本对象a{
是选择{}
中的代码, 但对于python
来说, 块代码是同缩进的代码, 没有{}
, 对Scala
来说, 块只有一条语句时, 可以省略{}
.Vim
并不完美, 但比绝大多数Vimer
相像的要完美.我相信, 每个初学
Vim
, 并被Vim
的强大折服的人, 都曾试图豪言,Vim在手, 天下我有
. 然后, 在工作中碰到了Java
, 陷入装逼痛苦的泥淖中, 然后, 要么决定找一份别的工作, 要么用上了IDE
. 待再次回头, 便看到了Vim
的局限.看到一个工具的强大并不是了解, 看到它的局限才是真正的了解.
单文件
java
文件编译映射, 只回车一次, 减少干扰这样基本上, 在同目录下, 库文件用
<leader>cs
编译, 执行文件用<leader>rs
来编译运行.这里的
rs
是run single file
的缩写, 同cs
为compile single file
.主要是为也对应
rp
和cp
. 可以使用:!mvn subcmd
来映射编译和运行项目文件.p
为project
.没看到生成了 test.class 吗?
应该是可以的,但,是需要插件来支持。
不可以,vim本身不具备编译器链接功能,是否可配置或者有相关插件支持尚不知道
正常来说不可以,因为vim无法编译生成class文件
在配置文件里加入这两句,F4编译,F5运行(注意<F4><F5>后面的空格),当然前提是你装了jdk并配置好环境变量。调试感觉不行