You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:录制宏批量处理

若只需修改部分代码,可通过录制宏实现灵活批量操作:

  1. 光标定位到单独成行的左大括号所在行
  2. 按qa开始录制宏(a为宏名称,可自定义)
  3. 执行操作:k(上移到语句行末尾)→ A(进入行尾插入模式)→ 输入 { → Esc → j(回到原括号行)→ dd(删除该行)
  4. 按q结束录制
  5. 光标移到目标位置,按@a执行宏,输入n@a可重复执行n次

方法3:代码格式化插件

若频繁处理代码格式问题,可安装vim-autoformat或clang-format插件,配置C#格式规则后,一键即可自动调整括号位置与整体缩进。

内容的提问来源于stack exchange,提问作者rnso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:10:51