W vimie następujący dokument spowoduje, że $PWD
linie 2 i 3 zostaną pokolorowane na dwa różne sposoby:
#/bin/sh
echo "Current Directory: $PWD"
echo 'Current Directory: $PWD'
Pierwsze wystąpienie $PWD
będzie miało inny kolor niż reszta ciągu, w którym się znajduje. Daje to wyraźne wizualne wskazanie, że zmienna zostanie rozwinięta, a nie traktowana jako dosłowny tekst. W przeciwieństwie do tego, druga instancja $PWD
będzie pokolorowana tak samo jak reszta ciągu, ponieważ pojedyncze cudzysłowy powodują, że jest ona traktowana jako dosłowny tekst.
Czy istnieją jakieś tryby emacs, które zapewniają tego rodzaju „przytaczanie świadomości powłoki”?
sh-mode
? Może można go dodać do samego Emacsa.Odpowiedzi:
Poniższy kod używa reguły blokowania czcionek z funkcją zamiast wyrażenia regularnego, funkcja szuka wystąpień,
$VAR
ale tylko wtedy, gdy znajdują się one w ciągu cudzysłowu. Funkcja(syntax-ppss)
służy do ustalenia tego.Reguła blokowania czcionek używa
prepend
flagi, aby dodać się do istniejącego podświetlenia łańcucha. (Zauważ, że używa tego wiele pakietówt
. Niestety, to zastępuje wszystkie aspekty istniejącego podświetlenia. Na przykład użycieprepend
zachowuje kolor tła łańcucha (jeśli taki istnieje) podczas zastępowania koloru pierwszego planu.)Możesz to wywołać, dodając ostatnią funkcję do odpowiedniego zaczepu, na przykład:
źródło
2
zastąpisz regułę blokowania czcionek regułą0
, powinna działać. (Konieczne może być rozszerzenie wyrażenia regularnego, aby zawierało znak końca, aby poprawnie}
podświetlić${FOO}
.) Liczba ta odnosi się do podgrupy wyrażeń regularnych dopasowania, co0
oznacza, że całe dopasowanie powinno być podświetlone.Poprawiłem odpowiedź @ Lindydancer na następujące sposoby:
sh-script-extra-font-lock-is-in-double-quoted-string
funkcję, ponieważ była używana tylko raz$10
,$1
itp) są podświetlone.Przerwa na kod
źródło
[^\\\\]
Można zapisać jako[^\\]
, że jest to zestaw znaków, które nie powinny być dopasowane, a kod zawiera odwrotny ukośnik dwukrotnie. W starszych wersjach Emacsa należy używaćfont-lock-fontify-buffer
, w nowszych należy dzwonić,font-lock-flush
a dzwonieniefont-lock-fontify-buffer
z elisp jest przestarzałe. Mój oryginalny kod poszedł za tym, twój kod nie. W każdym razie lepszym pomysłem może być migracja tego do archiwum GitHub i dołączenie do wysiłku.[^\\]
ucieka]
? Tak wiem, jak regex działa w Javie.