2016-11-06 70 views
0

我已經啓動了Vim(v8)併爲css3準備了適當的語法熒光筆。我使用名爲precss的postcss插件爲我的代碼中的語法提供「SASS」。Vim編輯器:最後一個孩子和:第一個孩子嵌套的css錯誤

但是,當我使用「&:last-child」或&:first-child的嵌套選擇器時,語法會引發錯誤。它不會破壞代碼或任何內容,但是「紅色」錯誤對我來說太過分了。檢查下面的屏幕截圖。

任何人都可以弄清楚如何讓這個錯誤發生?我使用名爲vim-css3-syntax的插件,它包含scss語法高亮顯示。

編輯:得到它固定通過下載https://github.com/cakebaker/scss-syntax.vim,然後提前加入au BufRead,BufNewFile *.css set filetype=scss.css

感謝。

+0

該緩衝區的文件類型幾乎肯定是'css',沒有'&'。將其更改爲'sass'或'scss'。 – romainl

+0

好的,但我沒有使用sass或scss。現在我該怎麼做?我正在使用postcss和一個名爲precss的插件。 – TheEarlyMan

+0

不是。你寫的是SASS或SCSS(嵌套+'&'),因此你不能指望它是有效的CSS,因此你會得到CSS錯誤。使用正確的文件類型。 – romainl

回答

0

事實上,您在CSS中使用SCSS語法(嵌套塊,&等)會使CSS無效。

如果你想避免語法錯誤,你有兩條路:

  • 停止使用SCSS語法在CSS文件,
  • 確保您的文件被認爲是它是什麼:SCSS。

我會認爲第一條路是最明智的。畢竟誰寫入*.rb文件中的JavaScript或*.css文件中的SCSS?但是,如果你選擇了第二種,你可以簡單地做:

setf scss 

---編輯---

假設我們有這樣的代碼:

body { 
    background-color: white; 
} 

這既是有效的CSS 有效SCSS,因爲SCSS是CSS的超集。任何有效的CSS都是自動有效的SCSS。無論文件擴展名是什麼(*.css,*.scss)和文件類型(cssscss),Vim都會很高興地顯示它。

現在,假設我們有這樣的代碼:

body { 
    h1 { 
     background-color: $brand-1; 
    } 
} 

它是有效的SCSS但不是有效的CSS。如果您使用css文件類型在*.css文件中編寫該代碼,則會出現錯誤,因爲它不是CSS。如果您使用scss文件類型在*.scss文件中編寫該代碼,則不會因爲SCSS有效而獲得錯誤。

+0

這裏的整點是我不使用SASS實際包含.scss擴展名。我正在使用POSTCSS,它絕對允許在CSS文件中編寫SCSS語法。而且,你給的比較絕對沒有意義。 SCSS不是一種不同的語言。它只是一個預處理器。就像coffeescript對javascript一樣。你被允許在js文件中寫coffeescript不是嗎? – TheEarlyMan

+0

可以放入CSS文件的內容由標準定義,Vim使用該腳本定義CSS文件的語法。由於CSS不允許嵌套,因此不能合理地期望默認語法腳本允許嵌套。 **您使用PostCSS的事實並且您不關心標準對於Vim和CSS的默認語法腳本完全不瞭解。**這就是爲什麼您會遇到錯誤:您在'* .css'中編寫的內容文件不是有效的CSS。如果你不想要錯誤,使用適合你*實際*寫作的文件類型:'scss'。 – romainl

+0

明白了。非常感謝! – TheEarlyMan