跳到主要内容
    ↑↓ 选择↵ 打开esc 关闭
    中文English
    CodingMarco

    Line Endings

    v0.1.5其他
    opencode-line-endings

    OpenCode plugin that enforces consistent line endings (LF or CRLF) on file edits

    GitHub 星标

    2

    近 30 天 +1

    月装机量

    51

    近 7 天 10

    综合评分SCORE

    27.5

    生态多维模型

    最近提交

    5 个月前

    2026-03-03

    快速安装与配置

    opencode.json

    写入当前项目的 opencode.json,只对这个仓库生效。

    opencode.json

    {
      "$schema": "https://opencode.ai/config.json",
      "plugin": ["opencode-line-endings@0.1.5"]
    }

    opencode 启动时会通过内嵌运行时自动加载 npm 依赖并缓存至本地目录,无需手动在全局环境执行安装。

    npm

    An OpenCode plugin that enforces consistent line endings (LF or CRLF) on all file edits, independent of the platform OpenCode runs on.

    The primary use case is running OpenCode inside WSL while editing Windows files — the platform reports Linux (LF), but the files need CRLF line endings.

    Installation

    Add the plugin to your opencode.json:

    {
      "plugin": ["opencode-line-endings"]
    }
    

    OpenCode installs the package and its dependencies automatically at startup.

    Alternative: local file

    If you prefer not to use npm, copy index.ts directly into your plugins directory. Since this plugin depends on the editorconfig package, you also need a package.json in the config directory.

    Project-level:

    cp index.ts <project>/.opencode/plugins/line-endings.ts
    

    Add to .opencode/package.json:

    {
      "dependencies": {
        "editorconfig": "^3.0.2"
      }
    }
    

    Global:

    cp index.ts ~/.config/opencode/plugins/line-endings.ts
    

    Add to ~/.config/opencode/package.json:

    {
      "dependencies": {
        "editorconfig": "^3.0.2"
      }
    }
    

    Configuration

    Line ending style is determined in this order:

    1. Environment variable (highest priority)

    export OPENCODE_LINE_ENDINGS=crlf  # or lf
    

    2. .editorconfig

    The plugin reads .editorconfig files, walking up the directory tree as per the spec. The end_of_line property is used:

    # .editorconfig
    root = true
    
    [*]
    end_of_line = crlf
    

    Per-pattern overrides work as expected:

    [*.sh]
    end_of_line = lf
    
    [*.{cs,csproj,sln}]
    end_of_line = crlf
    

    3. Default

    If neither the environment variable nor .editorconfig specifies a line ending style, the plugin defaults to CRLF.

    How it works

    The plugin hooks into OpenCode's tool execution pipeline at two points:

    • Before tool execution (tool.execute.before): Transforms content in write, edit, and multiedit tool arguments before they reach disk. This ensures diffs shown to the user reflect the correct line endings.

    • After file edits (file.edited event): Re-reads the entire file and normalizes all line endings. This catches cases where partial edits produce mixed line endings (e.g., existing LF content with CRLF insertions from the edit tool).

    Binary files are skipped automatically based on file extension.

    License

    MIT