anse41 downloadsControl line ending format (LF/CRLF) per file or per folder. Prevent Obsidian from silently converting CRLF to LF.
Control line ending format (LF / CRLF) per file or per folder in Obsidian.
🌐 This plugin supports English and 简体中文 — automatically follows Obsidian's display language.
📖 中文文档
Obsidian's editor (CodeMirror 6) normalizes all line endings to LF (\n) internally. When you open a file with CRLF (\r\n) line endings — even if you make no edits — and save it, Obsidian silently converts all line endings to LF.
If your project uses CRLF (common on Windows, or enforced by .editorconfig / .gitattributes), this causes:
linebreak-style failThis plugin fixes line endings automatically after every save (and optionally on file open), so your files always have the line endings you expect.
LF / CRLF) at a glanceOpen Settings → Line Ending Controller to configure rules:
| Setting | Description |
|---|---|
| Pattern | Path prefix to match (e.g. projects/ or docs/spec.md). Empty matches all files as fallback. |
| Strategy | LF (Unix) — force LF line endingsCRLF (Windows) — force CRLF line endings |
Rules use longest prefix matching — more specific rules take priority. The rule with an empty pattern acts as the default for all unmatched files.
| Pattern | Strategy | Effect |
|---|---|---|
| (empty) | CRLF | All files → CRLF |
linux-scripts/ |
LF | Files under linux-scripts/ → LF |
docs/README.md |
LF | Only docs/README.md → LF |
Result: docs/README.md and everything under linux-scripts/ uses LF; everything else uses CRLF.
This plugin adds two commands to the Command Palette (Ctrl+P):
| Command | Description |
|---|---|
| Convert current file to LF | Immediately converts the active file to LF |
| Convert current file to CRLF | Immediately converts the active file to CRLF |
main.js, manifest.json, styles.css from the latest release<Vault>/.obsidian/plugins/line-ending-controller/git clone https://github.com/anseyuyin/line-ending-controller.git
cd line-ending-controller
npm install
npm run build
# Then copy main.js, manifest.json, styles.css to your vault
Q: Does this plugin modify files without me saving? A: By default, yes — the "Fix on open" option corrects line endings when you open a file. You can disable this in settings.
Q: Will this cause merge conflicts in Git? A: No. The plugin ensures consistent line endings, which prevents merge conflicts caused by mixed line endings.
Q: Does it work on mobile? A: No — desktop only.
Q: Can I exclude certain files? A: Not directly, but you can use path prefix rules to control which files get which strategy. Files not matched by any rule use the empty-pattern fallback.
git clone https://github.com/anseyuyin/line-ending-controller.git
cd line-ending-controller
npm install
npm run dev # watch mode — auto-rebuilds on changes
npm run build # production build
├── src/main.ts # Plugin source
├── main.js # Bundled output
├── manifest.json # Plugin metadata
├── styles.css # Plugin styles
├── esbuild.config.mjs # Build configuration
├── version-bump.mjs # Version management
└── versions.json # Version compatibility map
npm version patch # or minor / major
git push --tags
GitHub Actions will automatically build and create a draft release.
MIT