Oletetaan, että minulla on lyhyt merkkijono C ++: ssa ja poistan vahingossa sen lopettavan kaksoislainauksen. Emacs tekee korostamalla loput koodista yhtenä erittäin pitkänä merkkijonona, joka sekoittaa kaiken muotoilun, kunnes laitan kaksoislainauksen takaisin sisään. Se tuntuu myös hieman hitaalta, kun se vahvistaa koko puskurin uudelleen.
Selasin läpi cc-mode.el
, mutta en löytänyt sille asetusta tai paikkaa, jossa merkkijonon vahvistaminen tapahtuu.
Onko olemassa tapaa kerro c ++ – mode (tai ehkä fontin lukitus?), että merkkijononi eivät koskaan sisällä uusia rivejä ja että sen ei pitäisi koskaan katsoa ensimmäisen rivin ulkopuolelle, jos se löytää loputtoman merkkijonon kirjaimen? = ”comments”>
Answer
Funktio c-literal-limits
, määritelty kohdassa progmodes/cc-engine.el
määrittää, miten merkkijonot ja kommentit tunnistetaan kaikissa c-mode
-muunnelmissa. Se käyttää näitä kahta määritelmää:
;; String syntax chars, suitable for skip-syntax-(forward|backward). (defconst c-string-syntax (if (memq "gen-string-delim c-emacs-features) "\"|" "\"")) ;; Regexp matching string limit syntax. (defconst c-string-limit-regexp (if (memq "gen-string-delim c-emacs-features) "\\s\"\\|\\s|" "\\s\""))
Valitettavasti, koska tämä on Et ole määritettävissä oleva muuttuja, et voi vain määrittää sitä uudelleen ja antaa c-mode
tehdä mitä haluat sen tekevän. Sinun tulisi periaatteessa toteuttaa ”neuvoja” (katso: defadvice
) funktiolle c-literal-limits
, joka käyttää vakioita sen sijaan. Nämä vakiot lisäisivät EOL: n (ts. "\\s$"
) merkkijonolausekkeen lopettamiseksi.
C / C ++ ei tietenkään ole näin kieli toimii, joten suosittelen, ettet tee tätä, mutta valinta on sinun, ja kuten huomaat, se ei ole helppo polku.
R""(string-contents)""
.syntax-ppss
.c-mode
-syntaksimoottori ei ole aina joustava, koska se tukee valitettavasti monia ominaisuuksia …