如何让vim-surround替换包围符时保留换行与空白格式?
解决vim-surround替换大括号为括号的格式问题
要实现你想要的格式效果,给你几个实用的方法:
方法一:自定义快捷键自动修正格式
在你的.vimrc(或者Neovim的init.vim)里添加这段配置:
" 自定义快捷键,替换大括号为括号并修正格式 nnoremap <leader>cs( :normal! cs{(:call FixParenIndent()<CR> function! FixParenIndent() " 跳转到左括号位置 call search('(') " 在左括号后插入换行 normal! a<CR><Esc> " 定位到第一行非空白开头的内容行,缩进回退一级 call search('^\\s\\S') normal! << " 跳转到右括号,将其移到单独一行并对齐缩进 call search(')') normal! kO<Esc>> endfunction
之后按<leader>cs(就能直接得到目标格式,无需手动调整。
方法二:手动操作快速修正
不想修改配置的话,完成默认替换后手动调整几步:
- 光标放在大括号处,执行
cs{(完成基础替换 - 光标移动到左括号后方,按
a<CR><Esc>插入换行 - 移动到第一行内容行(如
hello world所在行),按<<减少缩进 - 移动到右括号所在行,按
kO<Esc>>将右括号移到单独一行并对齐缩进
方法三:修改vim-surround默认逻辑(不推荐)
如果想彻底改变cs{(的默认行为,可以找到vim-surround插件的surround.vim脚本,修改处理大括号转括号的逻辑,增加换行和缩进的处理。但这种方法会在插件更新后丢失修改,因此不推荐使用。
内容的提问来源于stack exchange,提问作者gxk28
相关产品推荐
相关产品推荐

