如何在Vim中编程实现将左大括号移至前一行末尾?
在Vim中实现代码左大括号移至前一行末尾
我看到很多类似这样的代码:
public static void read() { using (StreamReader m_StreamReader = new StreamReader("C:\\myCsv.Csv")) { while (m_StreamReader.Peek >= 0) { string m_Str = m_StreamReader.ReadLine; string[] m_Splitted = m_Str.Split(new char[] { "," }); Console.WriteLine(string.Format("{0}={1}", m_Splitted[0], m_Splitted[1])); } } }
想要转换成这种格式:
public static void read() { using (StreamReader m_StreamReader = new StreamReader("C:\\myCsv.Csv")) { while (m_StreamReader.Peek >= 0) { string m_Str = m_StreamReader.ReadLine; string[] m_Splitted = m_Str.Split(new char[] { "," }); Console.WriteLine(string.Format("{0}={1}", m_Splitted[0], m_Splitted[1])); } } }
也就是把单独一行的起始左大括号移到前一行的末尾。我尝试选中左大括号,但没法移到前一行末尾,请问怎么在Vim中通过编程方式实现?
方法1:全局正则替换命令
在Vim命令模式下输入以下命令,可批量处理整个文件中符合条件的左大括号:
:%s/\n\s*{\s*$/{ /
命令说明:
%:作用于整个文件\n\s*{\s*$:匹配以换行开头、后跟任意空白字符、左大括号、末尾可能带空白的行{:将匹配到的内容替换为「左大括号+空格」,直接拼接到前一行末尾
如果需要保留原缩进的一致性,可使用更精准的版本:
:%s/\(\s*\)\n\s*{\s*$/\1{ /
该命令会保留前一行的缩进,确保括号位置对齐。
方法2:录制宏批量处理
若只需修改部分代码,可通过录制宏实现灵活批量操作:
- 光标定位到单独成行的左大括号所在行
- 按
qa开始录制宏(a为宏名称,可自定义) - 执行操作:
k(上移到语句行末尾)→A(进入行尾插入模式)→ 输入{→Esc→j(回到原括号行)→dd(删除该行) - 按
q结束录制 - 光标移到目标位置,按
@a执行宏,输入n@a可重复执行n次
方法3:代码格式化插件
若频繁处理代码格式问题,可安装vim-autoformat或clang-format插件,配置C#格式规则后,一键即可自动调整括号位置与整体缩进。
内容的提问来源于stack exchange,提问作者rnso
相关产品推荐
相关产品推荐

