我想用 Vim 写一个 .erb 文件
我多年来第一次(使用 nvim)编写 eRuby,因为我想尝试 Rails7 的 Hotwire,但我几乎哭了,因为我找不到用于 eRuby 的语言服务器。
如果我至少可以检查语法错误...1
因此,我决定使用efm-langserver,它可以将任何命令转换为语言服务器。
efm-langserver 的自述文件说
lint-command: 'erb -x -T - | ruby -c'
什么时候书面但是,这不能处理包含以下块的 eRuby 代码。
<%= simple_form_for(quote, html: { class: "quote form" }) do |f| %>
<%= f.input :name, input_html: { autofocus: true } %>
<%= f.submit class: "btn btn--secondary" %>
<% end %>
任何块都将始终导致 SyntaxError。
$ (erb -x -T - | ruby -c) <<'EOF'
> <%= simple_form_for(quote, html: { class: "quote form" }) do |f| %>
<%= f.input :name, input_html: { autofocus: true } %>
<%= f.submit class: "btn btn--secondary" %>
<% end %>
> EOF
-:2: syntax error, unexpected ')'
...class: "quote form" }) do |f| ).to_s); _erbout.<< "\n".freeze
-:5: syntax error, unexpected `end', expecting ')'
; end ; _erbout.<< "\n".freeze
-:6: syntax error, unexpected end-of-input, expecting ')'
; _erbout
这是 Ruby 标准库再培训局不处理包含块的 eRuby。
Rails 中使用的 eRuby 库埃尔日是一样的。
我搜索了一些我可以使用的东西,并找到了baby_erubis。
很久没有维护了
(实验性)支持块参数表达式
什么时候书面.
当我这样尝试时,我能够按预期处理包含块的 eRuby 标签。
gem install baby_erubis cat ./app/views/quotes/index.html.erb | ruby -r baby_erubis -e 'puts BabyErubis::Html.new.from_str(STDIN.read).src'所以我决定尝试它而不是
erb -x -T - | ruby -c。设置
coc.nvim是预装的前提。
包括 efm-langserver 和 baby_erubis。
brew install efm-langserver gem install baby_erubis当文件类型为
eruby时调用efm-langserver。
(顺便说一句,当FileType为eruby时也使用coc-html).config/nvim/coc-settings.json{ "html.filetypes": ["html", "eruby"], "html.format.templating": true, "languageserver": { "efm": { "command": "efm-langserver", "args": [], "filetypes": ["eruby"] } } }将以下 Ruby 脚本放在一个路径中,并赋予它执行权限。
这将替换erb -x -T - | ruby -c。erb 支票#!/usr/bin/env ruby # https://github.com/kwatch/baby_erubis require "baby_erubis" begin BabyErubis::Html.new.from_str(STDIN.read, '-').src puts "Syntax OK" rescue SyntaxError => se STDERR.puts se.message exit 1 end使用以下内容创建
.config/efm-langserver/config.yaml。
(几乎和 efm-langserver 的 README 中写的一样).config/efm-langserver/config.yamlversion: 2 tools: eruby-erb: &eruby-erb lint-debounce: 2s lint-command: 'erbcheck' lint-stdin: true lint-offset: 0 format-stdin: true format-command: htmlbeautifier languages: eruby: - <<: *eruby-erb之后,如果你用 vim 打开一个正确的
.erb文件,它会执行语法检查。
一案结案。
未来的任务
我已经能够检查语法,但是如果我很贪心,我希望你做一些类似自动完成 eRuby 的 Ruby 部分的事情,所以我想尝试将它与 solargraph 结合起来看看我是否可以做点什么。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308623936.html