fedit

fedit

Edit files in the terminal. Small. Written in F#.

Install fedit View on GitHub

macOS & Linux via Homebrew. Windows binary on GitHub Releases.

^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^

what

workspace tree

open a directory, navigate with arrow keys, expand and collapse with left/right

multi-buffer

open any number of files; switch with next / prev / buffers

piece-table buffers

inserts and deletes stay local; each buffer has its own undo/redo stack

find

live-highlight as you type; enter or down to advance, up for previous

command palette

Ctrl+P opens a fuzzy-completing command bar with the last 20 entries as history

system clipboard

Ctrl+C / Ctrl+X / Ctrl+V via pbcopy on macOS, xclip on Linux

live file watcher

external changes trigger a debounced 300ms rescan; no need to press Ctrl+R

seven themes

swap accent palette live; persists to ~/.config/fedit/config.json

UTF-8

reads any line-ending style, preserves it on save, no BOM written

install

homebrew (macOS & Linux)

$ brew install helgesverre/tap/fedit

Auto-detects your OS and CPU (arm64 / x64). Updates land via brew upgrade fedit.

windows

Download fedit-x86_64-pc-windows-msvc.zip from the latest release, extract, and add the folder to your PATH.

from source

$ git clone https://github.com/HelgeSverre/fedit
$ cd fedit
$ just install
$ fedit .

The just install recipe publishes a self-contained single-file binary to ~/.local/bin. Override the destination with just install path/to/bin. Remove with just uninstall. Requires .NET SDK 9 and just; the repo ships a local .dotnet SDK so cloning is enough.

run without installing

$ ./fedit .                              # shell shim, pins local .dotnet
$ dotnet run --project src/Fedit/Fedit.fsproj -- .
$ just run .                             # or via the recipe

dev loop

$ just dev .         # dotnet watch, re-launches on source changes
$ just check         # lint + build + test, the pre-commit gate
$ just test          # xUnit + FsCheck
$ just format        # fantomas + prettier

flags

--log <path>
append a UTC-timestamped trace of every Msg and Effect to the file — for debugging without polluting the TUI