VIM新手求助:如何用大括号包裹CSS代码块并优化格式?
用surround.vim给CSS代码块添加带换行的大括号的最佳方法
刚接触VIM完全不用不好意思,surround.vim默认的S{行为确实只是生硬地把选中内容用大括号包裹,不会自动处理换行和缩进——这对CSS这种需要清晰格式的代码来说确实不够友好。下面是几种解决方式,其中自定义surround规则是最省心的长期方案:
1. 全局自定义带换行缩进的大括号包围
直接在你的.vimrc(Neovim用户是init.vim)里添加一行配置,让S{默认生成带换行和缩进的结构:
" 自定义大括号包围:自动换行+缩进(\t代表制表符,可换成两个空格" ") let g:surround_{char2nr('{')} = "{\r\t\r}"
保存配置后,重启VIM或者执行:source ~/.vimrc生效。之后在可视模式选中CSS代码块,按S{,就能直接得到:
{ color: #fff; background: #000; }
2. 仅在CSS文件中生效的局部配置
如果你不想全局修改大括号的包围行为(比如写其他语言时还是需要默认的紧凑包裹),可以用文件类型自动命令,只在CSS文件中启用这个规则:
" 仅CSS文件中,S{生成带换行缩进的大括号 autocmd FileType css let b:surround_{char2nr('{')} = "{\r\t\r}"
3. 更智能的缩进处理(进阶)
如果选中的代码本身没有规范缩进,你可以结合VIM的自动缩进功能,自定义一个函数来处理:
function! SurroundCSSBraces() " 临时保存当前缩进规则,切换到CSS缩进 let saved_indent = &indentexpr set indentexpr=GetCSSIndent() " 给选中的每一行添加缩进,再包裹大括号 let indented_content = substitute(getreg('"'), '^\s*', '\t', 'g') let result = "{\r" . indented_content . "\r}" " 恢复原来的缩进规则 let &indentexpr = saved_indent return result endfunction " 把S{绑定到这个函数 autocmd FileType css let b:surround_{char2nr('{')} = "SurroundCSSBraces()"
这个函数会自动给选中的每一行添加缩进,适合处理格式比较乱的代码片段。
临时应急方案(不用改配置)
如果只是偶尔需要,不想动配置,选中文本按S{包裹后,按i进入插入模式,把光标移到大括号内部,按o换行,再用==命令自动缩进选中的代码——不过这种方式不如自定义配置高效。
内容的提问来源于stack exchange,提问作者jensbambauer
相关产品推荐
相关产品推荐

