修复 SyntasticCheck bootstrap 错误。 Vim 语法插件

Fixing SyntasticCheck bootstrap error. Vim Syntastic plugin

我正在使用 Syntastic VIM 插件

我所有的 bootstrap 东西都已设置好并可以正常工作,只是我一直收到此错误 在 app/assets/stylesheets/application.css.scss

|| File to import not found or unreadable: bootstrap-sprockets. Load path: ... on line 17

第 17 行是@import "bootstrap-sprockets";

我的 Gemfile 有

gem 'rails', '4.2.0'
gem 'sass-rails', '~> 5.0'
gem 'bootstrap-sass', '~> 3.3.3'

我的 app/assets/stylesheets/application.css.scss 刚刚

/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the bottom of the
 * compiled file so the styles you add here take precedence over styles defined in any styles
 * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
 * file per style scope.
 *
 *= require_tree .
 *= require_self
 */

@import "bootstrap-sprockets";
@import "bootstrap";

为什么 Syntastic 仍然给我这个错误?

Why does Syntastic still give me this error?

Syntastic 给你这个错误,因为它不知道 sprockets 设置的额外导入路径。但幸运的是,您可以使用变量 g:syntastic_<filetype>_<checker>_args 来配置它。所以在你的情况下你可能应该设置类似

let g:syntastic_scss_sass_args="--load-path path/to/bootstrap-gem/vendor/assets"

或类似的东西。

额外的糖分:您可以使用https://github.com/embear/vim-localvimrc自动为这个项目自动设置这个变量

@jan 回答是最正确的答案,也是正确的方法!

但是,为当前项目实际创建一个本地 .vimrc,然后在 gem 的文件层次结构中挖掘并找到它的资产可能有点麻烦。

就我个人而言,我认为这只是为了解决 Syntastic 的 scss 检查器的简单加载混乱而付出的努力太多,而且 - 顺便说一句 - 对 Bootstrap 的实际加载没有任何影响。

我想我们大多数人都会同意 scss 具有简单的规则和结构,并且非常容易调试和维护,因此我发现完全禁用 Syntastics 的 scss 检查器更容易。

let g:syntastic_scss_checkers=['']

另一种选择是让 Syntastic 忽略此错误消息。在 ~/.vimrc:

let g:syntastic_scss_sass_quiet_messages = {
    \ "regex": 'File to import not found or unreadable', }

有关详细信息,请参阅:help syntastic-checker-options。

如果您使用的是 RVM,则可以通过执行以下步骤解决此问题

rvm gemdir

这将为您提供应用程序当前使用的 ruby 版本的目录。

然后你需要找到你的 bootstrap gem 版本

括号 { } 不需要。

cd {copy and paste rvm gemdir here}/gems/

转到您的 Gemfile 或 Gemfile.lock 文件,查看您使用的 bootstrap 版本。

cd {copy and paste rvm gemdir here}/gems/{bootstrap version}

现在,根据版本的不同,您将拥有 vendor/assets/assets 目录

在我的例子中,我只有 /assets

所以在我的情况下,我在 .vimrc

中使用了它
  let g:syntastic_scss_sass_args="--load-path ~/.rvm/gems/ruby-2.3.0/gems/bootstrap-sass-3.3.6/assets"

这消除了错误。不要忘记重新加载你的 .vimrc

在之前的解决方案的基础上,我终于找到了解决这个问题的好方法。

第一个问题是获取 Sprokets 所见的 load_path,因为搜索它并保持更新很烦人。

rails r "
  puts Rails.configuration.assets.
    paths.grep(/stylesheets/).join(':')
"

运行 该命令生成更新的加载路径,要让 sass 检查器使用它,唯一的要求是使用该值导出环境变量 SASS_PATH

export SASS_PATH="$(rails r "
  puts Rails.configuration.assets.
    paths.grep(/stylesheets/).join(':')
")

我发现的唯一问题是它不支持链轮索引文件。