代码之家  ›  专栏  ›  技术社区  ›  user9303970

如何在Visual Studio代码(类似Unix)中的所有文件中生成所有行尾(EOL)?

  •  97
  • user9303970  · 技术社区  · 6 年前

    我使用 Windows 10 Home 我通常使用Visual Studio代码(VS代码)来编辑Linux Bash脚本以及PHP和JavaScript。

    我没有专门为Windows开发任何东西,我也不介意我编辑的所有文件的默认EOL都是类Unix(nix)。

    在Visual Studio代码中,如何确保所有文件(无论文件扩展名为何)中的所有EOL都是nix?


    在我用Visual Studio代码在Windows中编写了一些Bash脚本,并将其作为项目的一部分上传到GitHub之后,我问了这个问题,一位审查该项目的高级程序员告诉我 Windows EOL 还有一个 BOM 如果我将那里的EOL更改为nix,我可以解决的问题(或者至少我是这么理解的)。


    因为我所有的开发都是面向Linux的,所以默认情况下我更喜欢这样, 任何 我编辑的文件会有nix EOL,即使它是Windows唯一的。

    9 回复  |  直到 3 年前
        1
  •  125
  •   Ian McGowan    4 年前

    这个 accepted answer 解释如何对所有文件执行此操作(在“设置”中使用files.eol),但如果需要覆盖该设置,则在右下角有一个指示器,您可以单击并更改该文件。我花了一些时间才注意到这是可点击的。

    See CRLF in the message bar at the bottom right

        2
  •  79
  •   Peter Mortensen John Conde    3 年前

    我搜索了几天一个简单的解决方案,在找到一些Git命令更改所有文件后,没有任何成功 CRLF LF .

    pointed out by Mats ,请确保在执行以下命令之前提交更改。

    在根文件夹中键入以下内容。

    git config core.autocrlf false
    
    git rm --cached -r .         # Don’t forget the dot at the end
    
    git reset --hard
    
        3
  •  67
  •   Mike    6 年前

    在项目首选项中,添加/编辑以下配置选项:

    "files.eol": "\n"
    

    这是在提交时添加的 639a3cb ,因此您显然需要在提交之后使用版本。

    注意:即使您有一个 CRLF 在文件中,上述设置将被忽略,整个文件将转换为 CRLF公司 . 首先需要转换所有 CRLF公司 进入 LF 然后才能在Visual Studio代码中打开它。

    另请参见: https://github.com/Microsoft/vscode/issues/2957

        4
  •  22
  •   Peter Mortensen John Conde    3 年前

    您可以在Visual Studio代码设置中找到该选项。 它位于“文本编辑器”“文件”“Eol”下。 您可以在此处选择是\n还是\r\n或自动。

    Enter image description here

        5
  •  19
  •   Jesus Iniesta    4 年前

    转换现有文件的行尾的步骤

    我们可以使用 dos2unix 在里面 WSL 或者在Shell终端中。

    安装工具:

    sudo apt install dos2unix
    

    转换当前目录中的行尾:

    find -type f -print0 | xargs -0 dos2unix
    

    如果要从转换中排除某些文件夹,请使用:

    find -type f \
         -not -path "./<dir_to_exclude>/*" \
         -not -path "./<other_dir_to_exclude>/*" \
         -print0 | xargs -0 dos2unix
    
        6
  •  8
  •   Jim W    4 年前

    现有的两个答案都很有用,但不是我所需要的。我想将工作区中的所有换行符从CRLF批量转换为LF。

    我做了一个简单的扩展

    https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.keyoti-changeallendoflinesequence

    实际上,下面是扩展代码供参考

    'use strict';
    
    import * as vscode from 'vscode';
    import { posix } from 'path';
    
    
    export function activate(context: vscode.ExtensionContext) {
    
        // Runs 'Change All End Of Line Sequence' on all files of specified type.
        vscode.commands.registerCommand('keyoti/changealleol', async function () {
    
            async function convertLineEndingsInFilesInFolder(folder: vscode.Uri, fileTypeArray: Array<string>, newEnding: string): Promise<{ count: number }> {
                let count = 0;
                for (const [name, type] of await vscode.workspace.fs.readDirectory(folder)) {
    
                    if (type === vscode.FileType.File && fileTypeArray.filter( (el)=>{return name.endsWith(el);} ).length>0){ 
                        const filePath = posix.join(folder.path, name);
    
                        var doc = await vscode.workspace.openTextDocument(filePath);
    
                        await vscode.window.showTextDocument(doc);
                        if(vscode.window.activeTextEditor!==null){
                            await vscode.window.activeTextEditor!.edit(builder => { 
                                if(newEnding==="LF"){
                                    builder.setEndOfLine(vscode.EndOfLine.LF);
                                } else {
                                    builder.setEndOfLine(vscode.EndOfLine.CRLF);
                                }
                                count ++; 
                            });
    
                        } else {
                            vscode.window.showInformationMessage(doc.uri.toString());
                        }
                    }
    
                    if (type === vscode.FileType.Directory && !name.startsWith(".")){
                        count += (await convertLineEndingsInFilesInFolder(vscode.Uri.file(posix.join(folder.path, name)), fileTypeArray, newEnding)).count;
                    }
                }
                return { count };
            }
    
            let options: vscode.InputBoxOptions = {prompt: "File types to convert", placeHolder: ".cs, .txt", ignoreFocusOut: true};
            let fileTypes = await vscode.window.showInputBox(options);
            fileTypes = fileTypes!.replace(' ', '');
            let fileTypeArray: Array<string> = [];
    
            let newEnding = await vscode.window.showQuickPick(["LF", "CRLF"]);
    
            if(fileTypes!==null && newEnding!=null){
                fileTypeArray = fileTypes!.split(',');
    
                if(vscode.workspace.workspaceFolders!==null && vscode.workspace.workspaceFolders!.length>0){
                    const folderUri = vscode.workspace.workspaceFolders![0].uri;
                    const info = await convertLineEndingsInFilesInFolder(folderUri, fileTypeArray, newEnding);
                    vscode.window.showInformationMessage(info.count+" files converted");
    
                }
            }
    
        });
    
    }
    
        7
  •  6
  •   Peter Mortensen John Conde    3 年前

    如果其他人要求,您可以使用 “Files.eol”设置是Visual Studio代码,用于更改每个文件的行尾。

    "Files.eol": "\n"   // Unix
    "Files.eol": "\r\n" // Windows
    
        8
  •  6
  •   Peter Mortensen John Conde    3 年前

    我刚刚在我的Windows机器上遇到了同样的问题。每次我打开一个文件,它都会将EOL设置为 CRLF (尽管我为 lf 正如人们所建议的)。问题是我用 Git配置错误 . 是的 CRLF公司 默认情况下。不管怎样,这就是我所做的,它工作得很好。没有了 CRLF公司 在我的工作区中。

    1. 将Git配置设置为 lf公司 使用命令 git config --global core.autocrlf false
    2. 现在再次克隆项目: git clone ...
    3. 设置Visual Studio代码实例,菜单 文件 → 偏好 → 设置 → 文件夹 : 下线 至“\n”。
    4. 打开项目,一切都应该如预期的那样
        9
  •  0
  •   Tanjin Alam    2 年前

    卸载typescript

    npm install -g typescript
    git config --global core.autocrlf false
    

    检查

    git config --global core.autocrlf 
    

    如果显示false。尝试克隆并重新运行项目