Подтвердить что ты не робот

Как Alphabetize CSS файл в Vim

Я получаю файл CSS:

div#header h1 {
    z-index: 101;
    color: #000;
    position: relative;
    line-height: 24px;
    margin-right: 48px;
    border-bottom: 1px solid #dedede;
    font-size: 18px;
}

div#header h2 {
    z-index: 101;
    color: #000;
    position: relative;
    line-height: 24px;
    margin-right: 48px;
    border-bottom: 1px solid #dedede;
    font-size: 18px;
}

Я хочу Алфавит строк между {...}

div#header h1 {
    border-bottom: 1px solid #dedede;
    color: #000;
    font-size: 18px;
    line-height: 24px;
    margin-right: 48px;
    position: relative;
    z-index: 101;
}

div#header h2 {
    border-bottom: 1px solid #dedede;
    color: #000;
    font-size: 18px;
    line-height: 24px;
    margin-right: 48px;
    position: relative;
    z-index: 101;
}

Я сопоставляю F7, чтобы сделать это

nmap <F7> /{/+1<CR>vi{:sort<CR>

Но мне нужно нажать F7 снова и снова, чтобы выполнить эту работу.
Если файл CSS большой, это занимает много времени и легко соскучиться.
Я хочу получить cmds. Так что, я только один раз нажимаю F7!
Есть идеи? спасибо!

4b9b3361

Ответ 1

:g#\({\n\)\@<=#.,/}/sort

Пояснение:

g        " Work over the whole file running .,/}/sort on each line that matches
         " the pattern \({\n\)\@<=
#...#... " Delimiters: first bit is search pattern, second bit is what
         " to do on each matching line
\(       " Grouping, containing:
  {\n    " Open brace followed by new line
\)       " End of grouping
\@<=     " Negative look-behind, so match after the new-line, but make sure that
         " the match point is preceded by an open brace and a new-line

.,/}/    " From this line to the next closing brace...
sort     " Sort the lines

Вы можете, конечно, сопоставить это с сочетанием клавиш или сделать его командой:

:nmap <F7> :g#\({\n\)\@<=#.,/}/sort<CR>

" Or:

:command! SortCSSBraceContents :g#\({\n\)\@<=#.,/}/sort

Затем вы можете просто нажать F7 или запустить:

:SortCSSBraceContents

Ответ 2

nnoremap <S-F7> zRgg:while search("{$", 'W') \| .+1,/}$/-1sort \| endwhile<CR>

Это то, что он делает:

  • zR открывает все складки.
  • gg перемещает курсор в первую строку.
  • search("{$") выполняет поиск открытой скобки в конце строки и перемещает курсор в найденную позицию.
  • search(, 'W') предотвращает обтекание search() в конце файла, поэтому он возвращает false после последней найденной позиции.
  • .+1,/}$/-1 устанавливает диапазон "от одной строки после (+1) позиции курсора (.) до строки (-1) закрывающей скобки в конце строки (/}$/)".
  • sort сортирует, вы это знаете.

Ответ 3

Для таблиц стилей SCSS:

:g#\({\n\)\@<=#.,/\.*[{}]\@=/-1 sort

Это выглядит как закрывающая фигурная скобка или другая открытая фигурная скобка и выбирает линию перед ней.

Ответ 4

Для отдельных компонентов Vuejs, встроенного стиля и т.д. - где вам нужна команда для запуска только внутри элемента:

:/<style>/,/<\/style>/:g#\({\n\)\@<=#.,/}/sort