Равенство полей / идентичность (== /===) с пробелами, если необходимо (vim)

#javascript #regex #vim

#javascript #регулярное выражение #vim

Вопрос:

Если существует инструмент для автоматического улучшения моего js-кода, я бы предпочел использовать этот пакет.

Я хочу расширить все так, чтобы подобное утверждение:

 var n=x (y (z/k))-123;
  

превращается в:

 var n = x   (y   (z / k)) - 123;
  

Однако на данный момент я хочу преобразовать все мои сжатые = операторы , == , и === , в дополненные версии самих себя.

Я пытался использовать что-то вроде :%s/[^ ]==[^ ]/ == /g , но проблема в том, что он обрезает предшествующий и продолжающий символ.

Ответ №1:

В Vim вы могли бы использовать что-то вроде:

 :%s!s*([!<>=/* -] )s*! 1 !g
  

Объяснение:

  • s — заменить
  • ! — шаблон запуска
  • s* — ноль или более пробелов
  • ( — начать группу
  • [!<>=/* -] — один или несколько из !<>=/* -
  • ) — конец группы
  • s* ноль или более пробелов
  • ! конец шаблона, начало замены
  • <space>1<space> — сопоставленная группа дополняется пробелом
  • ! — Конец замены
  • g — глобально в строке

Но если вы хотите улучшить код и придерживаться определенного стандарта кодирования, вам лучше использовать такой инструмент, как художественный стиль.

Комментарии:

1. Похоже, что это может работать лучше, чем то, что у меня есть, 1 вам, сэр!

2. Также спасибо за ссылку, я ее проверю. В настоящее время я пробую jsbeautify.

3. @chown: я обновил свой ответ, чтобы включить !=, >=, <= и т. Д., Спасибо вам 🙂

Ответ №2:

Для этого потребуется несколько команд, но вы могли бы попробовать что-то вроде:

 :%s/([^s])([ /()-=])/1 2/g
:%s/([ /()-=])([^s])/1 2/g

:%s/([^s])==/1 ==/g
:%s/==([^s])/== 1/g

Then do those last 2 for each: !=, >=, <=, etc..