Как Расположить в алфавитном порядке файл 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 однажды!
Какая-либо идея?спасибо!

19
задан kev 16 June 2010 в 04:51
поделиться

2 ответа

: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
40
ответ дан 30 November 2019 в 02:44
поделиться
nnoremap <S-F7> zRgg:while search("{$", 'W') \| .+1,/}$/-1sort \| endwhile<CR>

Вот что он делает:

  1. zR открывает все складки.
  2. gg перемещает курсор в первую строку.
  3. search ("{$") ищет открывающую скобку в конце строки и перемещает курсор в найденную позицию.
  4. search (, 'W') предотвращает перенос search () на конец файла, поэтому он вернет false после последней найденной позиции.
  5. . + 1, /} $ / - 1 устанавливает диапазон «от одной строки после ( +1 ) позиции курсора (. ) до строки перед ( -1 ) закрывающая фигурная скобка в конце строки ( /} $ / ) ».
  6. sort сортирует, вы это знаете.
7
ответ дан 30 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

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