Hvad er syntaksfremhævning, og hvordan fungerer det?

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?

Gå tilbage til FAQ-indeks

Kommentarer

  • Jeg har spørgsmål: hvorfor SE-ting (en person) ikke rapporterer yderligere sådanne grundlæggende fejl? Denne person vil en gang læse hele udgavelisten med highlight.js og kan let beslutte, at det er bug eller ej. Dette ser virkelig ikke-professionelt ud, når du ser sådanne highlight-bugs … SE valgte det bibliotek, så jeg tror – det er SEs ansvar at rapportere sådanne bugs videre til highligt.js – især i en situation, hvor denne proces er kompliceret (alle har brug for at kende alle emnelister). Er jeg forkert?
  • Jeg skal tjekke for eksisterende rapporter på github.com/highlightjs/highlight.js/issues og eventuelt sende nye fejlrapporter . Så jeg har få spørgsmål, der ikke er nævnt her. Hvilken version af highlight.js bruges på SE-websteder? Hvordan farver er foruddefineret? Grundlæggende ved jeg / antager, at dette vedligeholdes af CSS-filen. Jeg spørger, bruger SE Sites standardfarver fra https://github.com/highlightjs/ -projekt, eller SE Sites bruger egne sæt farver? Kunne vi ændre farve og tone i farver?
  • Jeg ser på highlight.js demo , så vælger jeg Language Categories = All og Themes = Stackoverflow Light er dette tema nøjagtigt det samme som brugt på SE-websteder? Hvilket sprog bruges til lang-default?

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. " "), 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:

Kode sprog (bruges til fremhævning af syntaks): lang-java

Hvis tagget ikke har et fremhævningssprog angivet, når det skal, skal du oprette en 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
  • 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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Deep Theme Powered by WordPress