Автоматически добавлять пробелы вокруг бинарных операторов (используя регулярные выражения в Emacs) - PullRequest
0 голосов
/ 16 октября 2018

Я хочу сопоставить все двоичные операторы в моем коде и убедиться, что они окружены пробелами (для целей стиля кодирования).При необходимости необходимо добавить пробелы.

Я использую emacs, и я уверен в том, что возможно использовать replace-regexp или что-то подобное.

Двоичные операторы рассматриваются для языка Ситолько.А пока у меня есть несколько неисчерпывающих примеров:

Стандартные случаи

a=b станут a = b

a+=b станут a += b

a-=b и т.д ...

a*=b

a/=b

Левый токен приклеен

a= b станет a = b

a+= b станет a += b

и т.д ...

Правый токен приклеен

a =b станет a = b

a +=b станет a += b

и т. Д. ...

Контрольные случаи

a = b или a += b и т. Д. ... НЕ ДОЛЖНЫбыть измененным (мы не хотим добавлять еще несколько пробелов)

Первая попытка

Я пытаюсь сопоставить это регулярное выражение: [^ ]\\+?\\-?\\*?\\/?=[^ ] означает символ = с любым другим символом, кромепробел справа и любой арифметический оператор (+*-/), один или ноль раз (с использованием ?), перед которым стоит любой другой символ, кроме пробела слева.Я здесь, потому что эти дозы не работают, по крайней мере, с функцией re-building emacs.Совпадения неверны.Кто-нибудь может помочь?

PS: я сосредоточился на этих регулярных выражениях, потому что символы +, * и - являются специальными символами в регулярном выражении.Но я надеюсь, что в будущем смогу применить эту функцию ко всем бинарным операторам C.

PPS: Я знаю, что будет проблема с * символами и указателями, но я оставлю это на потом ...

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

https://github.com/davidshepherd7/electric-operator

, кажется, стоит попробовать.Скажите, какой основной режим вы используете, может быть.

0 голосов
/ 16 октября 2018

Регулярные выражения не применимы для отступа кода, потому что они будут соответствовать всему, включая подстроки в строковых константах, в комментариях и т. Д. Вы можете создать свой собственный стиль для отступа или, возможно, какой-то встроенный стиль подойдет вашим потребностям: https://www.emacswiki.org/emacs/IndentingC

...