用vi,我怎样才能使CSS规则转换成一个套?(Using vi, how can I make CS

2019-07-18 00:46发布

例如坏:

#main {
      padding:0;
      margin: 10px auto;
}

例如好:

#main {padding:0;margin:10px auto;}

我有一吨的被占用过多行CSS规则。 我想不通了:%s/命令来使用。

Answer 1:

这里是一个班轮:

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

\_. 匹配任何字符,包括换行,和\{-}是的非贪婪版本* ,所以{\_.\{-}}匹配的匹配对花括号,包括之间的所有内容。

所述\=允许你替换一个VIM表达式,我们在这里使用,以汽提出所有的换行符的结果'\n'从匹配文本(在submatch(0)使用) substitute()函数。

倒数(将所述一个行版本的多线),也可以执行作为一个衬里:

:%s/{\_.\{-}}/\=substitute(submatch(0), '[{;]', '\0\r', 'g')/


Answer 2:

如果你是在开始或统治的结束, V%J将加入成一行:

  • 转至打开(或关闭)括号
  • V进入可视化模式
  • 打到%相匹配的其他支柱,选择整个规则
  • J加入线


Answer 3:

尝试是这样的:

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

该开口大括号和分号后移除换行(“{”和“;”),然后除去所串接的线之间的额外的空格。



Answer 4:

如果你想改变的文件,去风铃草的解决方案 。

如果你不希望(或不能)更改文件,则可以因为它允许选择什么以及如何显示折叠文本使用自定义折叠玩。 例如:

" {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在一个列表,列表排序,建立字符串,而这一切。



Answer 5:

我不会直接回答这个问题,而是我建议你重新考虑你的需求。 我认为你的“坏”的例子其实是最好的一个。 这是更具可读性,来思考和修改更容易。 良好的缩进是非常重要的,不仅当它涉及到的编程语言,而且在CSS和HTML。

你提到的CSS规则“占用过多行”。 如果你担心文件的大小,你应该考虑使用CSS / JS minifier像YUI压缩机 ,而不是使代码的可读性变差。



Answer 6:

这样改造的简便方法是运行以下命令短。

:g/{/,/}/j


Answer 7:

转到文件的第一行,并使用命令gqG运行通过格式化整个文件。 非空行假设的运行都应该在整个文件中倒塌。



文章来源: Using vi, how can I make CSS rules into one liners?