'How can I make all line endings (EOLs) in all files in Visual Studio Code, Unix-like?
I use Windows 10 Home and I usually use Visual Studio Code (VS Code) to edit Linux Bash scripts as well as PHP and JavaScript.
I don't develop anything dedicated for Windows and I wouldn't mind that the default EOLs for all files I edit whatsoever would be Unix like (nix).
How could I ensure that all EOLs, in all files whatsoever (from whatever file extension), are nix, in Visual Studio Code?
I ask this question after I've written a few Bash scripts in Windows with Visual Studio Code, uploaded them to GitHub as part of a project, and a senior programmer that reviewed the project told me I have Windows EOLs there and also a BOM problem that I could solve if I'll change the EOLs there to be nix (or that's what I understood, at least).
Because all my development is Linux-oriented, I would prefer that by default, any file I edit would have nix EOLs, even if it's Windows unique.
Solution 1:[1]
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.
Solution 2:[2]
I searched for a simple solution for days and didn't have any success after I found some Git commands that changed all files from CRLF to LF.
As pointed out by Mats, make sure to commit changes before executing the following commands.
In the root folder type the following.
git config core.autocrlf false
git rm --cached -r . # Don’t forget the dot at the end
git reset --hard
Solution 3:[3]
You can find the option in Visual Studio Code settings. It's under "Text Editor"?"Files"?"Eol". Here you can select whether you want \n or \r\n or auto.
Solution 4:[4]
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
Solution 5:[5]
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
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");
}
}
});
}
Solution 6:[6]
For other people asking you can use the "Files.eol" setting is Visual Studio Code to change the line ending for every file.
"Files.eol": "\n" // Unix
"Files.eol": "\r\n" // Windows
Solution 7:[7]
I've just faced the same issue on my Windows machine. Every time I opened a file it would set the EOL to CRLF (even though I explicitly set up a configuration for lf as people suggested). It appeared, that the problem is that I cloned my repository with the wrong Git configuration. It was CRLF by default. Anyway, here's what I did and it worked perfectly. No more CRLF in my workspace.
- Set up your Git configuration to
lfwith the commandgit config --global core.autocrlf false - Now clone your project again:
git clone ... - Set up your Visual Studio Code instance, menu File ? Preferences ? Settings ? Files: Eol to "\n".
- Open the project, and everything should be as expected
Solution 8:[8]
Uninstall typescript
run
npm install -g typescript
git config --global core.autocrlf false
check
git config --global core.autocrlf
if it shows false. try to clone and re-run the project
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow


