开发工具 讨论在 Vim 里开发 Ruby 时,Vim 插件的选择

wsdjeg · 2018年09月02日 · 最后由 wsdjeg 回复于 2019年08月05日 · 10057 次阅读

大家好,我是 SpaceVim 的开发者,目前 ruby 语言模块发布已经有一段时间了。开这个帖子主要是想和大家讨论下。在 Vim 里开发 ruby 时,大家都是使用的哪些插件呢?

为什么选择 ruby china 社区?

在国内各大语言社区,ruby china 是相当成功的,几乎绝大多数 ruby 开发者,甚至其他语言的开发者都会来这个社区交流。在这里更能切实了解到大家如何使用 Vim 来开发 ruby 的。

关于 SpaceVim ruby 语言模块

我先简单说下 SpaceVim 的 lang#ruby 模块目前支持的功能。

  1. 语法高亮、对齐,这些不用说,上游语法插件支持的很完美。
  2. 自动补全,在这里 SpaceVim 里主要是利用了 deoplete 配合 ruby 的 omni 补全,此外 lsp 的支持如果具备的话,补全会更加准确。
  3. REPL,SpaceVim 内置一套 REPL 框架,这里后台调用的是 ruby 的 irb 命令,支持将当前行发送到 repl,也支持选中区域发送和全文发送。
  4. RuboCop,这里我在 SpaceVim 里是利用异步实现的一个小功能,调用的也是 RuboCop 相关命令。
  5. 类似于 vscode 的 code runner 插件,使用 SpaceVim 的 job API 调用 ruby 执行当前文件,并将 stdout 展示到 runner buffer,同时展示运行时间和 exit code。

写在最后

欢迎大家也说说,你们使用 Vim 开发 ruby 时,采用了哪些插件呢?

补充一下,我在网上找到的资源:

  1. https://github.com/rsense/rsense
  2. https://github.com/castwide/solargraph
  3. https://github.com/hackhowtofaq/vim-solargraph
  4. https://github.com/uplus/deoplete-solargraph
  5. https://github.com/whitequark/parser
  6. https://github.com/vim-ruby/vim-ruby (SpaceVim 里,目前仅集成了这一插件,其他 repl runner 等功能属于内置功能)

solargraph 配合 lsp 设置,lsp 使用的是: https://github.com/autozimu/LanguageClient-neovim

let g:LanguageClient_serverCommands = {
    \ 'ruby': ['solargraph','stdio']
    \ }

先写到这里,后面再仔细研究一些使用 vim 开发 ruby 的技巧。

相关讨论帖

rubyfan1 回复

感谢,不过我是想在下一个版本之前再了解下关于使用 vim 开发 ruby 有没有什么新的技巧。

wsdjeg 求 Vim 下的 Ruby 代码自动补齐插件 提及了此话题。 09月02日 17:00

利用 ripper-tags 跳转和自动完成

Ctrl-P 文件之间跳转

jjym 回复

对于 fuzzy finder 我倒是 SpaceVim 里做了很大程度的兼容,目前五大主流工具都有对应模块,默认未启用,用户自行选择一个模块启用。包括 denite unite ctrlp fzf leaderf 五大模块。

luikore 回复

这个关键字,我倒是第一次听说,以前写其他语言时都是 ctags 和 gtags。我来看下对应的内容。

我的 Vim 配置:

  • 基础语法配置:vim-ruby + vim-rails
  • lsp 自动补全:deoplete + LanguageClient-neovim + solargraph
  • lint:neomake + rubocop
  • 代码格式化:neoformat + rufo
  • 代码跳转:ripper-tags
numbcoder 回复

感谢,我后面会根据本帖收集到的信息,将 SpaceVim 的 ruby 支持再完善一下。

https://ruby-china.org/topics/19315

我一直用的是拿这个改的。。。。我可能是个“亚飞厨”

a-wing 回复

我看下这个连接,不错的。我可以在正文写点内容。

感谢 @lyfi2003 的分享

我想试试看 Elixir layer,怎么操作呢?没看明白。

chenge 回复

SpaceVim 官网上有安装命令 https://spacevim.org , 你正常安装 SpaceVim 后,启动 vim 会自动下载插件,下载完了之后,重启 vim,按下 空格 f v d,就可以打开 SpaceVim 的配置文件,里面 启用 lang#elixir 模块即可。

wsdjeg 回复

谢谢回复。我在 init.vim 添加两行:

[[layers]]
name = "lang#elixir"

没有效果。 fvd 报错 E121,未定义变量 g:_spacevim_global_config_path

补充: 我使用了一下,感觉还不错。我安装的时候插件没完我把它终止了,后来删除掉.vim 重新安装,没出现安装插件过程了。 其他快捷键都可以,也能列出目录。

mac 10.12.

希望能出个简单教程,说明常见的一些操作,方便入门。 插件是用的什么管理,如何列出和安装插件呢?是 vim-plug 么?好像 PluginInstall 不能用。

chenge 回复

我曾经在简书上写过,可以看看 https://www.jianshu.com/p/a21935ca15b3 不过,其实官网的文档已经很全了,你需要改的是 init.toml 而不是 init.vim. 并且,用户配置不是在 ~/.SpaceVim 里 而是在 ~/.SpaceVim.d/ 里

wsdjeg 回复

没有 init.toml,我自己建立一个也没有效果。我先看看你的简书。文档我相信是全的,但一般人没耐心去看大文档。

wsdjeg 回复

好像还是不行,vi 版本有要求么?我是 7.4

chenge 回复

老版需要自己折腾不少东西,如果可以,建议你装 vim8, 或者直接上 neovim 是最保险的。

wsdjeg 回复

谢谢,更新了 8,发现插件能安装了,可是语法彩色没效果,怎么回事呢?

toml 有彩色,elixir 没有,elixir layer 的插件都安装了。

我有空来写个入门介绍,SpaceVim 不错,配合 Vim8,基本是安装好就能用。

chenge 回复

那就非常感谢了,对于你说的 elixir 没有高亮,你可以具体描述下。你是如何载入模块的,你打开的文件是什么名称,主要是后缀是什么。

wsdjeg 回复

可以了,很好。后缀 ex 就可以了,为什么 exs 不行呢?

chenge 回复

我晚点看下 github 的标准语言后缀,确定下 exs 是否可以加。

wsdjeg 回复

好啊,exs 是 elixir 的标准脚本。目前还不能提示函数名字,不知道是否容易实现,这个是最需要的。

chenge 回复

我觉得是安装问题,我这边 exs 文件可以识别,并且可以补全函数。

wsdjeg 回复

是吗,那我再看看问题在哪里。

chenge 回复

可以看下 模块具体定义,如果你熟悉 Vim 脚本的话。

https://github.com/SpaceVim/SpaceVim/blob/master/autoload/SpaceVim/layers/lang/elixir.vim

wsdjeg 回复

我怎么列出插件呢?如何启动安装插件呢? 有红色提示我 indent 插件没安装。

chenge 回复

可以使用 SPC l p 列出插件,不过这仅仅是列出已经添加的插件,不能确认插件是否安装完整。后面我打算添加一个类似于检查插件安装状态的功能。

wsdjeg 回复

l 是Language Specified,不对吧。

chenge 回复

关于这个功能,你可以开个 issue,我是打算重新实现下这个功能,效果做的更加好点。

wsdjeg 回复

你是使用的什么插件管理器呢?

目前可以提示 def 这样的,但是某个模块比如 String 的函数就无法提示出来。

SPCUpdate 更新过了共 49 个插件,没报错。问题依旧。

红字提示我这个插件没安装,输入这个命令也没用。怎么个情况?

:call dein#install(["indentLine"])

还有一个粘贴的时候很慢,在处理什么。 另外,vscode 能识别语法❌,这个 vim 能办到么?

可以做到,我不清楚你是怎么载入模块的,49 个插件的话是默认情况,说明你的 elixir 模块根本没有载入进来。如果有配置相关问题,尤其是跟 ruby 无关的话,建议到 SpaceVim 中文社区交流,避免让这个帖子话题扯的太远。

wsdjeg 回复

好的,我去社区。你的软件真不错。

chenge 回复

感谢支持😊

最近我在更新使用 vim 作为 ruby 开发工具的文章,可以关注下,如果有写的遗漏的地方,欢迎补充:

https://github.com/SpaceVim/SpaceVim/pull/2603

@chenge 你好,请问 ruby 解析器,如何从 stdin 里读取代码并执行,类似于

cat hello.py | python -
wsdjeg 回复

python 差不多吧。

chenge 回复

@chenge 我已经加入这个功能了,目前在入门 ruby:)

https://github.com/wsdjeg/ruby-tutorial-cn

需要 登录 后方可回复, 如果你还没有账号请 注册新账号