我想用 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.yaml
version: 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 文件,它会执行语法检查。

coc.nvim + efm-langserver でerbファイルの文法チェックをおこなう
coc.nvim + efm-langserver でerbファイルの文法チェックをおこなう

一案结案。

未来的任务

我已经能够检查语法,但是如果我很贪心,我希望你做一些类似自动完成 eRuby 的 Ruby 部分的事情,所以我想尝试将它与 solargraph 结合起来看看我是否可以做点什么。

  1. Ruby 本身的语言服务器是太阳图有,欺骗欺骗也支持 Rails


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623936.html

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-21
  • 2021-09-05
  • 2021-09-15
  • 2022-02-19
  • 2021-10-22
  • 2021-09-18
猜你喜欢
  • 2022-12-23
  • 2021-12-12
  • 2022-12-23
  • 2022-12-23
  • 2021-10-04
  • 2021-09-06
  • 2022-12-23
相关资源
相似解决方案