【问题标题】:Batch normalize line endings in Visual Studio在 Visual Studio 中批量标准化行尾
【发布时间】:2012-02-20 18:53:07
【问题描述】:

当您打开具有混合行尾的文件时,Visual Studio 会提示您对其进行规范化。有没有办法标准化当前解决方案中的所有文件?

没有回答我的问题的相关帖子:

【问题讨论】:

    标签: visual-studio-2010


    【解决方案1】:

    正如 Yellowblood 在 Aaron F. 的回答中指出的那样,如果您将 \n (LF) 替换为 \r\n (CRLF),您将会遇到麻烦,因为它会在每个 LF 之前添加一个 CR,即使是那些已经有一个了。

    但是,您可以使用任何支持批量替换文件的文本编辑器(如 Notepad++ 或 Visual Studio 的“文件替换”)通过正则表达式来实现您想要的。

    例如,要将 LF 替换为 CRLF,请确保激活正则表达式选项,然后替换所有出现的

    (?<!\r)\n
    

    \r\n
    

    \r 是回车符 (CR),\n 是换行符 (LF)。模式(?&lt;!\r)\n 将匹配任何前一个字符不是回车符的换行符,而不捕获(即替换)前一个字符。

    反之则简单得多:只需将\r\n 替换为\n

    与往常一样,备份您的文件并确保在处理整个解决方案之前测试单个文件的操作。

    我会将此作为评论添加到 Aaron F. 的回答中,但我的声誉不够高 :)

    【讨论】:

      【解决方案2】:

      您可以创建一个 bat 文件,以递归方式对所有文件进行规范化。

      1. 下载命令行工具Tofrodos
      2. 在您的解决方案目录的根目录中创建一个 bat 文件,其中包含以下内容:

      对于 (*.cs) 中的 /R %%i 执行 "C:\Prgs\Tofrodos\todos.exe" -p "%%i"

      请注意,您必须更新 todos.exe 的文件路径,可能还有 *.cs 过滤器。

      然后你运行 bat 文件并等待它完成。

      【讨论】:

        【解决方案3】:

        Visual Studio 没有为整个解决方案规范化行尾的机制。该功能本质上仅限于在打开和更改文件时检查文件是否正确。

        虽然行尾的规范化是由 Visual Studio 在IEditorOperations::NormalizeLineEndings 中公开的 API。因此,可以编写一个插件/脚本来针对解决方案中的项目执行操作。

        【讨论】:

        • 太好了!我从来没有为 VS 编写过插件/脚本,我可以打开一个 PowerShell 控制台并在所有解决方案文件上编写一些循环吗?
        • @Borek 不幸的是,这实际上并不容易。您将遇到的主要问题是对用户控制文件的定义没有很好的定义。例如,您可能不想针对生成的文件执行此操作,但从 API 的角度来看,它与普通文件并没有太大区别。此外,并非 IDE 中的所有文件都有一个真实的物理文件支持它们在磁盘上(也很难从 API 中分辨出来)。一般来说,枚举文件会起作用,但你最终会遇到所有这些角落/特殊情况。很可能这就是为什么 VS 行为是今天的原因
        • 很遗憾,我认为有一种简单的方法可以获取我在解决方案资源管理器中看到的所有内容的列表(并且是一个文件)。
        • @Borek 您绝对可以通过枚举项目项目列表来获得您所看到的所有内容的列表。但实际上戳项目项并确定它是否是真正的用户文件是很棘手的。充其量只是一种启发式方法。我希望我有一个像样的东西来扔你的路,但出于这个原因我避免使用项目项目。
        【解决方案4】:

        我刚刚使用了 Notepad++ 查找和替换功能:

        1. 设置 NotePad++ 显示行尾,查看->显示符号->显示所有字符
        2. 打开“在文件中查找”对话框
        3. 根据您正在执行的覆盖设置查找要\r\n(或\n)的内容
        4. 将替换为设置为\n(或\r\n)
        5. 将目录指向您的解决方案文件夹

        在执行此操作之前,您应该备份或提交您所做的任何更改

        【讨论】:

        • 如果你将 \n 替换为 \r\n 你会过得很糟糕。
        猜你喜欢
        • 2018-04-09
        • 2017-10-21
        • 1970-01-01
        • 2017-03-03
        • 1970-01-01
        • 2022-01-21
        • 2018-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多