lf

gokcehanMIT活跃维护

用 Go 写的终端文件管理器,纯键盘操作,启动快、占用低,适合习惯在命令行里浏览和整理文件的人。

Terminal file manager

r42发布于 2026-07-31 07:16 UTC9,594star +4 / 7 天390fork同步于 2026-11-10 11:30 UTC

怎么上手

由 README 提炼,执行前请确认
env CGO_ENABLED=0 go install -trimpath -ldflags="-s -w" github.com/gokcehan/lf@latest
硬件要求按 README 说明

README 未说明,仅要求能运行终端;跨平台支持 Linux、macOS、BSD 和 Windows,不涉及 GPU 或显存

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 Go 写的终端文件管理器,灵感来自 ranger,单二进制无依赖,启动快、占用低

用 Go 写的终端文件管理器,纯键盘操作,启动快、占用低,适合习惯在命令行里浏览和整理文件的人。

核心能力

  • 单二进制分发,无任何运行时依赖
  • 异步 IO 操作,避免界面卡顿
  • 服务端/客户端架构,可远程命令管理多实例
  • 用 shell 命令扩展和配置,支持自定义键位
  • 默认键位兼容 vi 与 readline

容易踩的坑

从源码构建需要先安装 Go 工具链;不内置分页器、编辑器和文件操作命令,需自行配合 shell 工具与外部程序;没有标签页和窗口,多任务要靠窗口管理器或终端复用器

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本r42
  1. r42最新正式版2026-07-31 · 2026-07-31 07:16 UTC

    Changed

    • The key <backspace2> has been renamed to <backspace> for map keybindings (#2286).
    • .Stat.DirSize and .Stat.DirCount in the ruler file no longer have a pointer type, and will be set to -1 instead of nil if the corresponding value cannot be determined (#2397).
    • setlocal commands no longer support the ability to specify recursive directories (#2415). For use cases where setlocal should apply to a directory based on some condition, it is recommended to script this inside the on-load hook command.
    • On Windows, files are now considered executable according to PATHEXT when matching colors and icons (#2448).
    • The rulerfmt and statfmt options are now marked as deprecated in favor of using the ruler file (configured using the rulerfile option), and will be removed in a future release (#2477).
    • The client server connection will now exclusively use Unix domain sockets on Windows and no longer fall back to TCP sockets (#2527).
    • The fallback location of the server socket (used if XDG_RUNTIME_DIR is not defined) is changed from /tmp/lf.<user>.sock to /tmp/lf-<uid>/lf.sock, and the containing directory must be owned by the current user (#2532).
    • The ignorecase and ignoredia options (intended for searching) no longer affect sorting, and instead sortignorecase and sortignoredia have been added to customize sorting (#2543).
    • Previews are now marked as binary if they contain a control character other than bell, backspace, tab, newline, vertical tab, form feed, carriage return, escape or delete (#2561). Previously only null bytes were used to detect binary previews.

    Added

    • Emoji sequences containing Zero Width Joiner characters are now displayed as a single combined glyph (#2286).
    • Key combinations such as <c-h> and <backspace> can now be distinguished when supported by the terminal (#2286) (#2496).
    • A new field .All is added to the ruler file to display the number of all files (i.e. visible + hidden) in the current working directory (#2376).
    • A new option numbercursorfmt is added to further customize the appearance of line numbers (#2395).
    • The loading... message delay of 100 milliseconds for file previews is now applied to directories as well (#2410).
    • lf will now automatically change to the parent directory if the current directory no longer exists and the watch option is enabled (#2424).
    • A new option terminalcursor is added to customize the appearance of the terminal cursor (#2441).
    • A new option borderstyle is added to control whether drawbox draws an outline, separators, or both (#2445). This also replaces the existing roundbox option.

    Fixed

    • Previews are now cleaned when changing to an empty directory (#2369).
    • The dircounts indicator for errors is changed back to ! instead of ? (#2372).
    • Previews are now correctly updated on visual-change (#2373).
    • The select command can now select files immediately after creation as part of a script (#2377).
    • The on-load hook command now ignores .git directories to reduce flicker and repeated on-load triggers (#2382).
    • Preview messages like empty or loading... have their alignment improved (#2400).
    • A bug where the loading... message was not displayed for volatile previews after the first time is now fixed (#2410).
    • The cmd-transpose command now advances the cursor correctly after swapping characters (#2413).
    • Symbolic links are no longer followed when changing directories (#2423).
    • Using the select command with a blank string as the argument now properly raises an error instead of changing to the parent directory (#2429).
    • The number of bytes read is now limited for previews that contain extremely long lines (#2458).
    • Control characters are now stripped from previews to prevent dangerous terminal sequences from being processed if the default previewer is used (#2459).
    • Various fixes have been made to sanitize input data a
  2. r412026-02-04 · 2026-02-04 05:50 UTC
    查看更新说明

    Changed

    • The previewer script no longer skips non-regular files (#2327).
    • Line numbers now take up less space when both number and relativenumber are enabled (#2331).
    • Changes have been made to ruler configuration (#2338):
      • The ruler file is no longer experimental.
      • The ruler file will be used by default unless rulerfmt (now a blank string by default) is specified.
      • The ruler file is no longer read from fixed locations like ~/.config/lf/ruler, and instead the rulerfile option has been repurposed to specify the path of the ruler file.

    Added

    • A new server command list is added to print the IDs of all currently connected clients (#2314).
    • The previewer and cleaner scripts now have their stderr output logged (#2316).
    • The ruler file now supports .Stat.Extension, .Stat.AccessTime, .Stat.BirthTime, .Stat.ChangeTime and .Stat.CustomInfo (#2329), as well as .Stat.DirSize and .Stat.DirCount (#2343).
    • A new option mergeindicators is added to reduce the gap before filenames, by merging tag and selection indicators into a single column (#2330).

    Fixed

    • A bug where sixel images fail to display when scrolling back and forth is now fixed (#2301).
    • Newline characters are now ignored when drawing the ruler with the ruler file configured (#2319).
    • A potential crash when using the scroll-up/scroll-down commands is now fixed (#2320).
    • Case-insensitive command-line completions no longer cause user input to be displayed in lowercase (#2336).
    • Calculation of window widths for the ratios option is now more accurate (#2347).
  3. r402025-12-10 · 2025-12-10 03:48 UTC
    查看更新说明

    Fixed

    • Error messages from the server are no longer written to the terminal which causes the UI to break (#2290).
    • A bug where file previews fail to load properly when scrolling quickly is now fixed (#2292).
  4. r392025-12-01 · 2025-12-01 13:33 UTC
    查看更新说明

    Changed

    • File extensions are now shown for long filenames even if they are truncated (#2159).
    • The history file will no longer contain a space between the prefix and the actual command (e.g. :quit instead of : quit) for each line (#2161). The command sed -i -E 's/^(.) /\1/' ~/.local/share/lf/history can be run to make an existing history file compatible with the new format.
    • The cmd-history-next and cmd-history-prev commands will now select only matching entries if part of the command is typed beforehand (#2161). Consecutive duplicate entries will also be skipped for convenience.
    • The string representation of commands shown when displaying keybindings is simplified (e.g. cd ~ instead of cd -- [~]) (#2165).
    • yes-no-prompts now use the same design everywhere (#2212).
    • Logs generated by -log <path> now get appended to <path> instead of overwriting it (#2215).
    • The showbinds menu now hides the redundant mode column (#2226) (#2228) and omits already typed keys (#2249).
    • The setlocal command no longer requires absolute paths (#2253).
    • The string representation of file permissions now matches the traditional Unix format instead of the one used by Go (#2270).

    Added

    • A new command cmd-menu-discard is added to allow exiting the completion menu with completions discarded (#2146).
    • The lf_mode environment variable will now be set to compmenu if the completion menu is active (#2146).
    • A ruler config file is added as an alternate method for customizing the ruler (#2186). This is intended to eventually replace the existing rulerfmt/statfmt options and must be enabled using the new rulerfile option. This feature is currently experimental.
    • A new option preload is added to enable calling the previewer to generate previews in advance (#2206). This feature is currently experimental.
    • OSC 8 escape codes to render clickable hyperlinks are now supported (#2243).

    Fixed

    • shell-pipe commands no longer wait for output if kept open after the command has finished running (#2155).
    • Natural sorting now compares string lengths when dealing with equivalent numbers (e.g. 0 is ordered before 00) (#2177).
    • A bug where the copy progress indicator only displayed the first time a file was copied is now fixed (#2181).
    • A bug where the source command does not show an error message upon failure is now fixed (#2189).
    • The addcustominfo (#2198) and setlocal (#2254) (#2259) commands, as well as the cleaner and previewer options (#2211) now support filename completions.
    • A bug where an empty custom info property would still take up space is now fixed (#2208).
    • A bug where setting drawbox could lead to scrolling outside the view is now fixed (#2210) (#2218).
    • The preview cache is now not cleared when setting ratios to its current value (#2218).
    • Filtering is fixed when using special characters in the search pattern if the filtermethod is text (#2231).
    • Custom commands that output messages (e.g. cmd greet echo 'hello world') now display properly (#2245).
    • Errors in config files are now displayed properly (#2246).
  5. r382025-09-19 · 2025-09-19 04:23 UTC
    查看更新说明

    Changed

    • The deprecated globfilter and globsearch options are now removed (#2108).
    • Sixel image support is now enabled by default, and the sixel option has been removed as it is no longer required (#2109).
    • The dircache option has now been removed (#2110). This was previously used as a workaround to disable the directory cache since at the time changes to files were not detected reliably, but this is no longer the case.
    • The experimental locale option has been removed in favor of the recommendation to use addcustominfo/set sortby custom for custom sorting (#2111).
    • The existing doc command has been renamed to help so that it is more natural for users (#2125).
    • Text previews are no longer displayed with a padding of two spaces by default (#2131). Instead, a custom padding can be added in the previewer script, for example by piping to sed 's/^/ /'.

    Added

    • Sixel image previews can now display multiple images as well as text (#2109).
    • A new option sizeunits is added to allow displaying file sizes in either binary or decimal units (#2118).
    • XDG_CONFIG_HOME and XDG_DATA_HOME are now taken into account when looking up config/data files on Windows (#2119).
    • Three new options menufmt, menuheaderfmt, and menuselectfmt are added to customize the appearance of the menu (#2123).

    Fixed

    • Error messages are now cleared after running interactive commands such as invert/unselect/tag-toggle (#2117).
    • The menu is now drawn over sixel images instead of being hidden behind it if they overlap (#2122).
    • A bug which prevents the user from quitting when copying files with a size of 0 has been fixed (#2130).
    • lf -remote should no longer busy wait and cause high CPU usage if its output is not being read (#2138).
    • The parameter types for command line options shown by lf -help now match the synopsis in the documentation (#2153).

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    LF

    Doc | Wiki | #lf:matrix.org (with IRC bridge)

    Go Build Go Report Card

    lf (as in "list files") is a terminal file manager written in Go with a heavy inspiration from ranger file manager. See faq for more information and tutorial for a gentle introduction with screencasts.

    icons-and-border image-preview new-features

    Features

    • Cross-platform (Linux, macOS, BSDs, Windows)
    • Single binary without any runtime dependencies
    • Fast startup and low memory footprint due to native code and static binaries
    • Asynchronous IO operations to avoid UI locking
    • Server/client architecture and remote commands to manage multiple instances
    • Extendable and configurable with shell commands
    • Customizable keybindings (vi and readline defaults)
    • A reasonable set of other features (see the documentation)

    Non-Features

    • Tabs or windows (better handled by window manager or terminal multiplexer)
    • Builtin pager/editor (better handled by your pager/editor of choice)
    • Builtin commands for file operations (better handled by the underlying shell tools including but not limited to mkdir, touch, chmod, chown, chgrp, and ln)

    Installation

    See packages for community maintained packages.

    See releases for pre-built binaries.

    Building from the source requires Go.

    On Unix:

    env CGO_ENABLED=0 go install -trimpath -ldflags="-s -w" github.com/gokcehan/lf@latest
    

    On Windows cmd:

    set CGO_ENABLED=0
    go install -trimpath -ldflags="-s -w" github.com/gokcehan/lf@latest
    

    On Windows PowerShell:

    $env:CGO_ENABLED = '0'
    go install -trimpath -ldflags="-s -w" github.com/gokcehan/lf@latest
    

    Usage

    After the installation lf command should start the application in the current directory.

    Run lf -help to see command line options.

    Run lf -doc to see the documentation.

    See etc directory to integrate lf to your shell and/or editor. Example configuration files along with example colors and icons files can also be found in this directory.

    See integrations to integrate lf to other tools.

    See tips for more examples.

    Contributing

    See contributing for guidelines.