Как 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!
Есть идеи? спасибо!
Ответы
Ответ 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