如何使用vim将css选择器中的所有属性设置为一行?

如何使用vim将css选择器中的所有属性设置为一行?,css,vim,Css,Vim,这是我的css文件的css部分 body{ width:1100px; height:800px; } div.main{ margin:20px auto 0 auto; background-color:#f7f7f7; } 我想把它改写如下 body{width:1100px;height:800px;} div.main{margin:20px auto 0 auto;background-color:#f7f7f7;} 所有属性和值仅重写为一行,是否

这是我的css文件的css部分

body{
    width:1100px;
    height:800px;
}
div.main{
    margin:20px auto 0 auto;
    background-color:#f7f7f7;
}
我想把它改写如下

body{width:1100px;height:800px;}
div.main{margin:20px auto 0 auto;background-color:#f7f7f7;}

所有属性和值仅重写为一行,是否有smarty vim命令来执行此任务?

您可以使用
J
gJ
(不添加空格的替代)命令。它们可以在视觉模式下运行,以连接所有选定的行,或进行计数

或者,该插件根据您的要求提供对css规则的特定支持。将光标放在css块的第一行上,键入
gJ
将整个块连接成一行

无论哪种方式,您都可能希望/需要在加入行之前运行替换以删除前导空格-
:s/^\s\+/

编辑:我想一个不使用插件的“智能”方法是使用以下宏:
vf}:s/^\s\+/^MgvgJ
^M
意味着按enter键-您可能需要手动输入宏才能获得此结果)。通过将光标放在要重写的css规则顶部行的开头来使用它。

一个选项是

g/{/,/}/j
它分解为

g        start a global command
{        search for {
,/}/    for each match, set a range up until the }
j       join the range

请注意,这可能是幼稚的。这不考虑嵌套括号。您可能首先要为要更改的文本块设置一个可视范围。

正如@romainl所说,您应该使用缩小器。然而,我将假设您真正想要的是一种快速浏览css规则的方法。如果是这样的话,我建议你研究一下折叠@吕克·赫米特(Luc Hermitte)在《华盛顿邮报》上就这一问题发表了评论:

下面是@Luc Hermitte答案的一个变体。将以下内容放入
~/.vim/ftplugin/css\u fold.vim

let b:width = 25

" Use the following mappings to adjust the foldtext "columns"
nnoremap <silent> <buffer> >s :<c-u>let b:width+=v:count1<cr><c-l>
nnoremap <silent> <buffer> <s :<c-u>let b:width-=v:count1<cr><c-l>

if !exists('*s:CssFoldText')
  function! s:CssFoldText()
    let line = printf("% *s {", -1*b:width, substitute(getline(v:foldstart), "{\s*$", "", ""))
    let nnum = nextnonblank(v:foldstart + 1)
    let lst = []
    while nnum <= v:foldend
      let line = line . " " . substitute(getline(nnum), "^\s*", "", "")
      let nnum += 1
    endwhile
    return line
  endfunction 

  map <SID>xx <SID>xx
  let s:sid = substitute(maparg("<SID>xx"),'xx$','', '')
  unmap <SID>xx

endif

exe "setlocal foldtext=" . s:sid . "CssFoldText()"
setlocal foldmethod=syntax

使用缩小器。
:h folds
:h 'foldtext'
:h 'foldmethod'
:h za
:h zR
:h zM