How to make all line endings (EOLs) in all files in Visual Studio Code, UNIX like?

后端 未结 6 518
有刺的猬
有刺的猬 2021-01-01 08:36

I use Windows 10 home and I usually use Visual Studio Code (VSCODE) to edit Linux Bash scripts as well as PHP and JavaScript.

I don\'t develop anything dedicated for

相关标签:
6条回答
  • 2021-01-01 09:13

    In your project preferences, add/edit the following configuration option:

    "files.eol": "\n"
    

    This was added as of commit 639a3cb, so you would obviously need to be using a version after that commit.

    Note: Even if you have a single CRLF in the file, the above setting will be ignored and the whole file will be converted to CRLF. You first need to convert all CRLF into LF before you can open it in Visual Studio Code.

    See also: https://github.com/Microsoft/vscode/issues/2957

    0 讨论(0)
  • 2021-01-01 09:14

    To convert the line ending for existing files

    We can use dos2unix in WSL or in your Shell terminal.

    Install the tool:

    sudo apt install dos2unix
    

    Convert line endings in the current directory:

    find -type f -print0 | xargs -0 dos2unix
    

    If there are some folders that you'd want to exclude from the conversion, use:

    find -type f \
         -not -path "./<dir_to_exclude>/*" \
         -not -path "./<other_dir_to_exclude>/*" \
         -print0 | xargs -0 dos2unix
    
    0 讨论(0)
  • 2021-01-01 09:17

    The accepted answer explains how to do this for all files (use files.eol in settings), but if you ever need to override that setting there's an indicator at the bottom right that you can click on and change for this one file. Took me a while to notice that this was clickable.

    0 讨论(0)
  • 2021-01-01 09:22

    Both existing answers are helpful but not what I needed. I wanted to bulk convert all the newline characters in my workspace from CRLF to LF.

    I made a simple extension to do it

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

    In fact, here is the extension code for reference

    '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");
    
                }
            }
    
        });
    
    }
    
    0 讨论(0)
  • 2021-01-01 09:26

    For other people asking you can use the "Files.eol" setting is VSC to change the line ending for every file.

    "Files.eol": "\n" // Unix
    "Files.eol": "\r\n" // Windows
    
    0 讨论(0)
  • 2021-01-01 09:30

    You can find the option in vscode settings. It's under "Text Editor" > "Files" > "Eol". Here you can select whether you want \n or \r\n or auto.

    0 讨论(0)
提交回复
热议问题