【问题标题】:How do I auto format Ruby or .erb files in VS Code?如何在 VS Code 中自动格式化 Ruby 或 .erb 文件?
【发布时间】:2017-04-24 09:37:45
【问题描述】:

我在 Visual Studio Code for macOS(Format Document 的快捷方式)中按 + + F 来格式化一个名为foo.rbfoo.html.erb

它打印出这个字母而不是格式化文档:Ï

如何获取它来格式化文档?

【问题讨论】:

    标签: html ruby-on-rails ruby ruby-on-rails-3 visual-studio-code


    【解决方案1】:

    您可以在 VSCode 中设置格式关联,因此 .erb 文件将被视为 .html。

    转到文件->首选项->设置->点击右上角的...->打开settings.json

    然后将这段代码添加到你的settings.json中

    "files.associations": {
       "*.html.erb": "html"
    }
    

    这就是我解决这个问题的方法。它将删除一些代码亮点,但会像 HTML 文档一样自动格式化 HTML 模板。

    【讨论】:

      【解决方案2】:

      您将需要 VS Code 的 settings.json 文件中的所有这些设置:

      "ruby.rubocop.onSave": true,
      "editor.formatOnSaveTimeout": 5000,
      "editor.formatOnSave": true,
      "files.associations": {
          "*.erb": "erb"
      },
      

      保存设置文件。在 VS Code 上安装“ruby-rubocop”和“ERB Formatter/Beautify”扩展。按照这两个扩展的文档安装它们的 gem 依赖项。重启 VS Code。

      仅当文件实际保存时才会触发保存时格式化功能(仅当您更改文件时才会发生这种情况)。保存没有更改的文件不会触发保存时格式化。

      【讨论】:

      • 那应该也有语法高亮吗?如果是这样,它对我不起作用。 ://
      • 我不认为我提到的扩展做语法高亮,不。即使我禁用了所有扩展,我也不知何故有 Ruby 语法突出显示,但您可能想专门寻找一个提到语法突出显示的扩展。
      • 我只是想补充一点,如果您有多个安装,您可能需要在设置中为您的 htmlbeautifier 指定绝对路径(设置称为 Vscode-erb-beautify 和 Ruby > Rubocop 的 rubocop 设置。
      【解决方案3】:

      如果您使用 prettier 来格式化您的 html/css/js 文件,那么值得尝试prettier-erb-plugin。只需添加到您的.prettierrc

        "plugins": ["@prettier/plugin-ruby", "prettier-plugin-erb"]
      

      或者用 yarn 安装:

      yarn add -D prettier @prettier/plugin-ruby prettier-plugin-erb
      

      并确保 VSCode 使用来自 node_modules 的 prettier 的本地版本(或者,您可能也可以全局安装这些插件)。更漂亮的 VSCode 插件通常将自己声明为默认格式化程序,但以防万一,请确保在您的 settings.jsonNOT 编写如下内容:

          "[erb]": {
              "editor.defaultFormatter": "aliariff.vscode-erb-beautify"
          },
      

      【讨论】:

        【解决方案4】:

        您可以使用Rufo 来格式化您的Ruby 代码。它是一个固执己见的格式化程序(如果你熟悉的话,就像 Prettier 用于 JS)。

        您可以使用 vscode-rufo 扩展将其与 VSCode 集成。

        【讨论】:

        • 这在 VS Code 版本 1.25.0-insiders 中不起作用
        • 安装插件后做gem install rufo,就可以了。
        • 即使我安装了 gem,它仍然说没有安装 'erb' 文件的文档格式化程序。有什么建议吗?
        【解决方案5】:

        现在(2019 年 3 月)我认为 prettier-ruby 是最好的选择:它可以处理 Ruby、ERB(作为 HTML)、JS 等等。

        prettier script.rb # will show you the formatted script
        prettier --write script.rb # will overwrite the file with the formatted script
        

        您可以使用 Prettier VS Code 插件自动执行此操作:https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode

        https://github.com/prettier/plugin-ruby

        【讨论】:

        • 我认为 prettier-ruby 不能处理 .erb 文件。
        • Prettier 不处理 .erb 文件。它目前以feature request 提交,您可以订阅通知以了解何时/是否会实施并添加您的贡献。
        【解决方案6】:
        gem install htmlbeautifier
        

        通过使用 Ctrl +Shift+ P(或 Mac 上的 Command + Shift + P)编辑器中提供的搜索功能,然后搜索格式文档

        【讨论】:

          【解决方案7】:

          更新 Visual Studio 代码的settings.json

          File -> Preferences -> Settings -> Extensions -> Scroll down and find "Edit in settings.json"

          或者在您的操作系统中的这些路径中

          • 视窗%APPDATA%\Code\User\settings.json
          • macOS $HOME/Library/Application Support/Code/User/settings.json
          • Linux $HOME/.config/Code/User/settings.json

          来自Visual Studio Code Ruby extension 他们建议用作初始配置的文档:

          "ruby.useBundler": true, //run non-lint commands with bundle exec
          "ruby.useLanguageServer": true, // use the internal language server (see below)
          "ruby.lint": {
            "rubocop": {
              "useBundler": true // enable rubocop via bundler
            },
            "reek": {
              "useBundler": true // enable reek via bundler
            }
          },
          "ruby.format": "rubocop" // use rubocop for formatting
          

          查看linting 文档以获得进一步的改进。另外,如前所述,您可以添加 .erb 应视为 .html:

          "files.associations": {
             "*.html.erb": "html"
          }
          

          【讨论】:

            【解决方案8】:

            我使用rubocop 而不是rufo

            一开始我用的是rufo。但是,我遇到了这个问题

            {
              boo: {
                a: 1,
                b: 2,
                c: 3
              }
            }
            

            它总是为我格式化为

            {
              boo: {
                a: 1,
                b: 2,
                c: 3,
              },
            }
            

            c: 3boo: {} 后面添加两个,。正是这让我的rubocop 总是失败。

            至于,我在项目中使用rubocop。为什么不用它直接格式化我的代码!

            如果你有兴趣,你可以这样做:

            安装插件VSCode ruby然后在settings.json中添加如下sn-ps

              "ruby.format": "rubocop",
              "ruby.intellisense": "rubyLocate",
              "ruby.useBundler": true,
              "ruby.lint": {
                "rubocop": {
                  "useBundler": true
                }
              },
            

            保存。它有效~~(我希望你)

            【讨论】:

              【解决方案9】:

              现在可以:

              1. 在 VS Code 中安装 ruby​​-rubocop
              2. 转到文件 -> 首选项 -> 设置
              3. 搜索 Editor: Default Formatter 并选择“misogi.ruby-rubocop”
              4. 转到文件 -> 首选项 -> 键盘快捷键
              5. 搜索 Ruby:由 rubocop 自动更正。在那里你有运行 rubocop 的快捷方式,以便按照你的 rubocop 设置自动格式化你的 ruby​​ 代码。

              您也可以右键单击您的 ruby​​ 文件,您将找到“格式化文档”选项,一旦安装了 ruby​​-rubocop,就会触发“Ruby: autocorrect by rubocop”。

              【讨论】:

                【解决方案10】:

                要格式化你的 ruby​​ 文件,你不需要任何额外的插件,你可以映射一些键来做“editor.action.reindentLines”

                如果您使用 vscode-vim 插件,您可以将其添加到您的设置中:

                 "vim.normalModeKeyBindingsNonRecursive": [
                        {
                            "before": ["=", "="],
                            "commands": ["editor.action.reindentlines"]
                        }
                    ],
                

                然后在普通 vim 模式下,== 将重新格式化您的文件。

                【讨论】:

                  猜你喜欢
                  • 2021-04-28
                  • 1970-01-01
                  • 2020-12-25
                  • 1970-01-01
                  • 2020-11-02
                  • 2020-11-03
                  • 1970-01-01
                  • 2020-01-14
                  相关资源
                  最近更新 更多