Jeg bemærkede, at min kode undertiden bliver fremhævet i forskellige farver, når den gengives.
- Hvad er syntaksfremhævning?
- Hvordan fungerer det?
- Hvorfor fremhæves ikke min kode korrekt?
- Hvordan rapporterer jeg en fejl eller anmoder om et nyt sprog?
- Hvordan bruger jeg syntaksfremhævning?
- Hvilke sprog er der i øjeblikket tilgængelige på Stack Exchange?
Kommentarer
Svar
Hvad er syntaksfremhævning?
Syntaksfremhævning gør det muligt at fremhæve kode i indlæg baseret på det sprog, det er skrevet på, for at gøre det lettere at læse.
Hvordan fungerer det?
Stack Exchange har ikke sin egen syntaks-fremhævningsmotor. Den bruger highlight.js og bruger muligvis ikke nødvendigvis den seneste udgivelse af dette bibliotek. Derfor kan eventuelle bugs og funktionsanmodninger vedrørende syntaksfremhævning ikke håndteres af Stack Exchange.
Syntaksfremhævning tildeles, baseret på tags , til eksempelvisningen, når du opretter eller redigerer indlæg, så snart du holder op med at skrive i 5 sekunder.
Hvorfor fremhæves ikke min kode korrekt?
1. Kontroller, at det websted, du bruger, har syntaksfremhævning aktiveret
Den fulde liste er tilgængelig på Meta . Hvis syntaksfremhævning ikke er aktiveret den et websted følger instruktionerne i dette spørgsmål.
2. Kontroller at sproget understøttes af highlight.js
Se på liste over understøttede sprog.js-understøttede sprog . Hvis dit sprog ikke er på listen, skal det oprettes inden for projektet highlight.js, før det kan implementeres af Stack Exchange.
Hvis en sprog er allerede på listen, men ikke brugt på Stack Exchange, vær venlig at hæve en funktionsanmodning her på Meta for at få den implementeret på netværket.
3. Kontroller at sproget bruges af Stack Exchange
Se på filen highlight-loader.js på dev CDN, åbn i din yndlingseditor og søg efter sproghint. For eksempel søger efter " pil " bringer dig til en linje bestående af hljs.registerLanguage("dart", ...
. Dette betyder, at lang-dart
er et tilgængeligt sproghint. Søger efter " psh " eller " powershell " returnerer ikke nogen resultater, hvilket betyder at psh ikke understøttes af Stack Exchange-versionen af highlight.js.
4. Kontroller, at tags på spørgsmålet har syntaksfremhævning aktiveret
Bag kulisserne bruger Stack Exchanges tags på spørgsmålet til at bestemme det sprog, du bruger. Hvert tag har et fremhævningssprog, der er angivet i dets egenskaber, eller intet sprog. Hvis der er mere end et tag, der har angivet et fremhævningssprog, eller hvis ingen af tags har et angivet, bruger det en standard og lader highlight.js udlede, hvad der er det bedste sprog at bruge. Det samme fremhævning af sprog, der bruges på spørgsmålet, bruges også på svarene.
Besøg det mærke “s wiki side. Klik på et tag (f.eks. " javascript "), og klik derefter på " Lær mere … ", og det sproghint (hvis nogen), der i øjeblikket bruges til dette tag, vises på meget nederst , under knapperne til wiki:
Hvis tagget ikke har et fremhævningssprog angivet, når det skal, skal du oprette en funktionsanmodning på metaen per sted for dit websted til at anmode om det (kun moderatorer kan ændre fremhævningssproget for et tag.)
Hvordan rapporterer jeg en fejl eller anmoder om et nyt sprog?
Hvis det virkelig er en fejl i selve syntaksmarkøren, skal du kontrollere, om eksisterende rapporter først for at se, om det allerede er rapporteret, hvis det ikke er tilfældet, skal du fortsætte og rapportere det der. For fejlrettelser og funktioner, der allerede er implementeret af highlight.js men ikke fungerer her, vent venligst, da nye versioner af highlight.js distribueres på webstederne på en planlagt basis, og den nyeste version er endnu ikke implementeret. (Hvis den ikke er blevet implementeret efter lang tid, kan du rejse en funktionsanmodning på Meta for at anmode om, at en ny version af highlight.js distribueres.)
Husk, at Stack Exchange opretholder ikke denne syntaks-highlighter (bortset fra at installere nyere versioner af den), og at sende fejlrapporter eller funktionsanmodninger vedrørende det her på Meta får dem ikke løst eller implementeret.
Før du gør hvad som helst, sørg for at at du har aktiveret den korrekte fremhævning.
Hvordan bruger jeg syntaksfremhævning?
Så længe alle betingelser i Hvorfor bliver min kode ikke fremhævet korrekt? ovenfor er opfyldt, fremhævning vil automatisk sparke på kodeblokke baseret på tags på spørgsmålet. (Se 4. Kontroller, at tags på dit spørgsmål har syntaksfremhævning aktiveret ovenfor for, hvordan dette fungerer.) Inline kode (f.eks. this
) er ikke fremhævet.
Det er muligt at tilsidesætter eksplicit det standardfremhævningssprog, der bruges på indlægget, med dit valgte sprog i en bestemt kodeblok ved at angive et sproghint over kodeblokken. Bemærk, at dette kun understøttes, når du bruger kodehegn (```
) metode til kodeformatering; fra implementeringen af CommonMark understøttes ikke længere dette på kodeblokke ved hjælp af metoden med fire mellemrum *:
```lang-or-tag-here code goes here ```
Du kan enten bruge en sprogkode eller et tag navn i sproghintet for at aktivere syntaksfremhævning. Se nedenfor for den komplette liste over highlight.js-understøttede sprogkoder.
For eksempel:
Here is a code block with language code (with "lang-" prefix) as a hint: ```lang-js function greet(person) { return "Hello " + person; } var user = "John Doe"; alert(greet(user)); ``` Here is a code block with tag name (no "lang-" prefix) as a hint: ```typescript var arr = [0, 1, 2]; // will highlight if typescript tag exists ```
Hvis du ikke vil have for at have en hvilken som helst syntaksfremhævning kan du bruge lang-none
sprog:
```lang-none [code here] ```
Du kan også anvende et sproghint til alle kodeblokke i dit indlæg, så du behøver ikke tilføje et tip før hver enkelt ved at tilføje en HTML-kommentar øverst i dit indlæg. Tipet bliver derefter anvendt på alle kodeblokke i dit indlæg, inklusive dem, der bruger fire mellemrumsindryk eller HTML <pre><code>
:
<!-- language-all: lang-or-tag-here -->
Bemærk, at når det bruges på et spørgsmål ikke tilsidesætter fremhævningssproget på dets svar; disse vil stadig blive fremhævet som standard i henhold til spørgsmålets tags.
Sprogkoder, der i øjeblikket er tilgængelige på Stack Exchange
Dette er en komplet liste over alle identifikatorer, som du kan bruge i sproghintet til syntaksfremhævning. Alle disse sproglige tip i hver gruppe peger på den samme highlighter. Andre sprogaliaser, der er indstillet af highlight.js, fungerer muligvis, men kun de følgende identifikatorer understøttes officielt af Stack Exchange.
- Standard: fortolk koden og gæt
lang-default
- Ingen: brug udtrykkeligt ikke syntaksfremhævning
lang-none
,lang-plaintext
,lang-text
,lang-txt
- Bash
lang-bash
,lang-sh
,lang-zsh
- C, C ++ og andre C-likes
lang-c
,lang-h
,lang-cpp
,lang-hpp
,lang-c++
,lang-h++
,lang-cc
,lang-hh
,lang-cxx
,lang-hxx
,lang-c-like
- C #
lang-cs
,lang-csharp
,lang-c#
- Clojure
lang-clojure
,lang-clj
- CoffeeScript
lang-coffee
,lang-coffeescript
,lang-cson
,lang-iced
- CSS
lang-css
- Dart
lang-dart
- Erlang
lang-erl
,lang-erlang
- Gå
lang-go
,lang-golang
- Haskell
lang-hs
,lang-haskell
- HTML, XML, XSL, et al.
lang-html
,lang-xml
,lang-xsl
,lang-xhtml
,lang-rss
,lang-atom
,lang-xjb
,lang-xsd
,lang-plist
,lang-wsf
,lang-svg
- HTTP-overskrifter
lang-http
,lang-https
- Ini og TOML
lang-ini
,lang-toml
- Java
lang-java
,lang-jsp
- JavaScript
lang-js
,lang-javascript
,lang-jsx
,lang-mjs
,lang-cjs
- JSON
lang-json
- Kotlin
lang-kotlin
,lang-kt
- LaTeX, TeX
lang-latex
,lang-tex
- Mindre
lang-less
- Lisp
lang-lisp
- Lua
lang-lua
- Makefile
lang-makefile
,lang-mk
,lang-mak
- Markdown
lang-markdown
,lang-md
,lang-mkdown
,lang-mkd
- MATLAB
lang-matlab
- Objective-C
lang-objectivec
,lang-mm
,lang-objc
,lang-obj-c
- OCaml
lang-ocaml
,lang-ml
- Pascal, Delphi
lang-pascal
,lang-delphi
,lang-dpr
,lang-dfm
,lang-pas
,lang-freepascal
,lang-lazarus
,lang-lpr
,lang-lfm
- Perl
lang-pl
,lang-perl
,lang-pm
- PHP
lang-php
,lang-php3
,lang-php4
,lang-php5
,lang-php6
,lang-php7
- PHP-skabelon
lang-php-template
- Protokolbuffere
lang-protobuf
- Python
lang-py
,lang-python
,lang-gyp
,lang-ipython
- R
lang-r
- Ruby
lang-rb
,lang-ruby
,lang-gemspec
,lang-podspec
,lang-thor
,lang-irb
- Rust
lang-rs
,lang-rust
- Scala
lang-scala
- Skema
lang-scheme
- SCSS
lang-scss
- Shell
lang-shell
,lang-console
- SQL
lang-sql
- Swift
lang-swift
- TypeScript
lang-typescript
,lang-ts
- VHDL
lang-vhdl
- VB.NET
lang-vbnet
,lang-vb
- YAML
lang-yaml
,lang-yml
Alle sprogidentifikatorer, der bruges i et indlæg, der ikke genkendes af highlight.js, fungerer som standard lang-default
.
Tip: Tags
Du kan angive et hvilket som helst -tag , der findes på webstedet, og det vil bruge den sprogkode, der i øjeblikket er knyttet til dette tag (som enten kan være null (intet tip), standard eller en specifik sprogkode).
Husk, at som standard alle tags starter med none
som deres sprogkode. Tags med none
angivet som deres sprogkode ignoreres og vender tilbage til lang-default
.
Du kan også bruge det almindelige none
nøgleord til manuelt at angive nogen syntaksfremhævning, svarende til at bruge lang-none
kode ovenfor.
* Den tidligere metode til at specificere et fremhævningssprog kan stadig bruges til HTML-kodeblokke: placer en HTML-kommentar <!-- language: lang-or-tag-here -->
før <pre><code>
tags, og det fungerer.
Også denne tidligere metoden er ikke blevet fjernet fuldstændigt for kodeblokke med fire mellemrum, men kun udfaset. Selvom den stadig fungerer i øjeblikket på kodeblokke med fire mellemrum, kan / vil den blive fjernet i fremtiden.
Bemærk til redaktørerne:
Undlad at tilføje til ovenstående liste, medmindre du er 100% sur e det eksisterer.
Bare fordi du skriver noget i, og det ligner ligesom det er fremhævet korrekt betyder ikke at identifikatoren faktisk findes i systemet. Husk, at ugyldige identifikatorer vender tilbage til standard .
Derudover er der flere sprog, der er angivet som understøttet i highlight.js “dokumentation understøttes muligvis ikke af Stack Exchange-versionen af highlight.js , som de kan være i separate moduler, som muligvis ikke implementeres på Stack Exchange.
På grund af disse punkter skal linkes til Meta-spørgsmålet, som bekræfter, at der findes et tip i din redigeringsoversigt , når du tilføjer et nyt tip til listen.
Bemærk til kommentatorer:
kommentarer til denne FAQ er til anmodning om afklaring af noget, du måske ikke forstår i FAQ, så det kan løses. IKKE spørg om visse sprog vil blive understøttet i fremtiden. Det er ikke et spørgsmål, vi kan besvare, fordi Stack Exchange ikke opretholder denne highlighter. Besøg highlight.js for sprogstøtte.
Kommentarer
- Bør ' t være en angivet præference (ikke regel) her i dette svar til brug af enten en sprogkode eller et tagnavn (muligvis med nogle kvalifikationer)? For eksempel. " Foretrækker at bruge X over Y, medmindre Z. " (Noget beslægtet spørgsmål om MSO (i kommentarer ): Hvad ' er forskellen mellem de to kodeformateringsstile (kodehegn vs indrykkede blokke) med hensyn til syntaksfremhævning ? )
- og det vil bruge den sprogkode, der i øjeblikket er knyttet til det mærke Er der en officiel liste over disse tilknytninger tilgængelige overalt?
- Afsnit 4, " 4. Kontroller, at tags på spørgsmålet har syntaksfremhævning aktiveret " , har alle oplysningerne til at finde ud af @JoshGoebel
- @Josh Til dit direkte spørgsmål , Jeg tror ikke ' der er en liste hvor som helst i øjeblikket indeholder alle tags med tilhørende sprog. Det ser heller ikke ud ' at disse oplysninger er tilgængelige ved hjælp af SEDE, det ' er ikke i tags-tabellen.
https://github.com/highlightjs/
-projekt, eller SE Sites bruger egne sæt farver? Kunne vi ændre farve og tone i farver?Language Categories
=All
ogThemes
=Stackoverflow Light
er dette tema nøjagtigt det samme som brugt på SE-websteder? Hvilket sprog bruges tillang-default
?