README file from
GithubLine Ending Controller
Control line ending format (LF / CRLF) per file or per folder in Obsidian.
🌐 This plugin supports English and 简体中文 — automatically follows Obsidian's display language.
📖 中文文档
Why?
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:
- Unexpected Git diffs — every line appears changed
- CI failures — linting rules like
linebreak-stylefail - Team friction — mixed line endings across the codebase
This plugin fixes line endings automatically after every save (and optionally on file open), so your files always have the line endings you expect.
Features
- 🔧 Auto-fix on save — line endings are corrected immediately when you save a file
- 📂 Auto-fix on open — (enabled by default) corrects line endings when you open a file
- 📋 Per-file / per-folder rules — different line ending strategies for different parts of your vault
- 📊 Status bar indicator — shows the current file's line ending (
LF/CRLF) at a glance - ⚡ Manual commands — convert any file to LF or CRLF on demand
- 🌐 Chinese / English i18n — UI language follows Obsidian's display language
Configuration
Open 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.
Example
| 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.
Commands
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 |
Installation
From Obsidian Community Plugins
- Open Obsidian → Settings → Community Plugins
- Disable Safe mode
- Click Browse and search for "Line Ending Controller"
- Install and enable
Manual Installation
- Download
main.js,manifest.json,styles.cssfrom the latest release - Copy them to
<Vault>/.obsidian/plugins/line-ending-controller/ - Restart Obsidian and enable the plugin in Settings
From Source
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
FAQ
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.
Development
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
Project Structure
├── 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
Releasing
npm version patch # or minor / major
git push --tags
GitHub Actions will automatically build and create a draft release.
License
MIT