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

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

大家好,我是 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 #0 回复

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

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

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

Ctrl-P 文件之间跳转

jjym #4 回复

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

luikore #3 回复

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

我的 Vim 配置:

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

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

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

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

a-wing #9 回复

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

感谢 @lyfi2003 的分享

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

chenge #12 回复

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

wsdjeg #13 回复

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

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

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

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

mac 10.12.

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

chenge #14 回复

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

wsdjeg #15 回复

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

wsdjeg #15 回复

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

chenge #17 回复

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

wsdjeg #18 回复

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

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

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

chenge #19 回复

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

wsdjeg #20 回复

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

chenge #21 回复

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

wsdjeg #22 回复

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

chenge #23 回复

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

wsdjeg #24 回复

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

chenge #23 回复

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

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

wsdjeg #26 回复

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

chenge #27 回复

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

wsdjeg #28 回复

l 是Language Specified,不对吧。

chenge #29 回复

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

wsdjeg #30 回复

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

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

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

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

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

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

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

wsdjeg #33 回复

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

chenge #34 回复

感谢支持😊

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

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

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

cat hello.py | python -
wsdjeg #37 回复

python 差不多吧。

chenge #38 回复

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

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

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