Используя vi, как я могу превратить правила CSS в лайнеры?

Они распределяют свое программное обеспечение под собственная лицензия . Закон защищает их права и препятствует тому, чтобы их клиенты перераспределили источник, хотя нет никакой фактической трудности, делающей так.

, Но поскольку Вы могли бы хорошо знать, нарушение авторского права (пиратство) программных продуктов довольно общее явление .

9
задан Gavin Miller 14 September 2009 в 17:20
поделиться

6 ответов

Вот однострочный текст:

:%s/{\_.\{-}}/\=substitute(submatch(0), '\n', '', 'g')/

\ _. соответствует любому символу, включая символ новой строки, а \ {-} - это нежадная версия * , поэтому {\ _. \ {-}} соответствует всему, что находится между совпадающей парой фигурных скобок включительно.

\ = позволяет вам подставить результат выражения vim, которое мы здесь используем для удаления всех символов новой строки '\ n ' из совпадающего текста (в submatch (0) ) с помощью функции substitute () .

Обратное (преобразование однострочной версии в многострочную) line) также можно сделать одним лайнером:

:%s/{\_.\{-}}/\=substitute(submatch(0), '[{;]', '\0\r', 'g')/
16
ответ дан 4 December 2019 в 06:19
поделиться

Если вы находитесь в начале или конце правила, V% J объединит его в одну строку:

  • Перейти к началу (или закрытию) фигурная скобка
  • Нажмите V , чтобы войти в визуальный режим
  • Нажмите % , чтобы сопоставить другую фигурную скобку, выбрав все правило
  • Нажмите J , чтобы присоединиться строки
11
ответ дан 4 December 2019 в 06:19
поделиться

Попробуйте что-то вроде этого:

:%s/{\n/{/g
:%s/;\n/;/g
:%s/{\s+/{/g
:%s/;\s+/;/g

Это удаляет символы новой строки после открывающих фигурных скобок и точек с запятой ('{' и ';'), а затем удаляет лишние пробелы между соединенными строками.

4
ответ дан 4 December 2019 в 06:19
поделиться

Если вы хотите изменить файл, воспользуйтесь решением rampion .

Если вы не хотите (или не можете) изменять файл, вы можете поиграйте с настраиваемым сворачиванием, поскольку оно позволяет выбрать, что и как отображать свернутый текст. Например:

" {rtp}/fold/css-fold.vim
" [-- local settings --]               {{{1
setlocal foldexpr=CssFold(v:lnum)
setlocal foldtext=CssFoldText()

let b:width1 = 20
let b:width2 = 15

nnoremap <buffer> + :let b:width2+=1<cr><c-l>
nnoremap <buffer> - :let b:width2-=1<cr><c-l>

" [-- global definitions --]           {{{1
if exists('*CssFold')
  setlocal foldmethod=expr
  " finish
endif

function! CssFold(lnum)
  let cline = getline(a:lnum)
  if     cline =~ '{\s*$'
      return 'a1'
  elseif cline =~ '}\s*$'
      return 's1'
  else
      return '='
  endif
endfunction

function! s:Complete(txt, width)
  let length = strlen(a:txt)
  if length > a:width
      return a:txt
  endif
  return a:txt . repeat(' ', a:width - length)
endfunction

function! CssFoldText()
  let lnum = v:foldstart
  let txt = s:Complete(getline(lnum), b:width1)
  let lnum += 1
  while lnum < v:foldend
      let add = s:Complete(substitute(getline(lnum), '^\s*\(\S\+\)\s*:\s*\(.\{-}\)\s*;\s*$', '\1: \2;', ''), b:width2)
      if add !~ '^\s*$'
          let txt .= ' ' . add
      endif

      let lnum += 1
  endwhile
  return txt. '}'
endfunction

Я оставляю сортировку полей в качестве упражнения. Подсказка: поместите все строки между v: foldstart + 1 и v: voldend в список, отсортируйте список, создайте строку и все.

4
ответ дан 4 December 2019 в 06:19
поделиться

Я не буду отвечать на этот вопрос напрямую, но вместо этого предлагаю вам пересмотреть свои потребности. Я думаю, что ваш «плохой» пример на самом деле лучший. Он более читабельный, его легче рассуждать и изменять. Хорошие отступы очень важны не только для языков программирования, но также и для CSS и HTML.

Вы упомянули, что правила CSS «занимают слишком много строк».

4
ответ дан 4 December 2019 в 06:19
поделиться

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

0
ответ дан 4 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: