Они распределяют свое программное обеспечение под собственная лицензия . Закон защищает их права и препятствует тому, чтобы их клиенты перераспределили источник, хотя нет никакой фактической трудности, делающей так.
, Но поскольку Вы могли бы хорошо знать, нарушение авторского права (пиратство) программных продуктов довольно общее явление .
Вот однострочный текст:
:%s/{\_.\{-}}/\=substitute(submatch(0), '\n', '', 'g')/
\ _.
соответствует любому символу, включая символ новой строки, а \ {-}
- это нежадная версия *
, поэтому {\ _. \ {-}}
соответствует всему, что находится между совпадающей парой фигурных скобок включительно.
\ =
позволяет вам подставить результат выражения vim, которое мы здесь используем для удаления всех символов новой строки '\ n '
из совпадающего текста (в submatch (0)
) с помощью функции substitute ()
.
Обратное (преобразование однострочной версии в многострочную) line) также можно сделать одним лайнером:
:%s/{\_.\{-}}/\=substitute(submatch(0), '[{;]', '\0\r', 'g')/
Если вы находитесь в начале или конце правила, V% J
объединит его в одну строку:
V
, чтобы войти в визуальный режим %
, чтобы сопоставить другую фигурную скобку, выбрав все правило J
, чтобы присоединиться строки Попробуйте что-то вроде этого:
:%s/{\n/{/g :%s/;\n/;/g :%s/{\s+/{/g :%s/;\s+/;/g
Это удаляет символы новой строки после открывающих фигурных скобок и точек с запятой ('{' и ';'), а затем удаляет лишние пробелы между соединенными строками.
Если вы хотите изменить файл, воспользуйтесь решением 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 в список, отсортируйте список, создайте строку и все.
Я не буду отвечать на этот вопрос напрямую, но вместо этого предлагаю вам пересмотреть свои потребности. Я думаю, что ваш «плохой» пример на самом деле лучший. Он более читабельный, его легче рассуждать и изменять. Хорошие отступы очень важны не только для языков программирования, но также и для CSS и HTML.
Вы упомянули, что правила CSS «занимают слишком много строк».
Перейдите к первой строке файла и используйте команду gqG
, чтобы прогнать весь файл через форматтер. Предполагая, что серии непустых строк должны быть свернуты во всем файле.