重要提示:这是开发文档, 如果您是从发布版本安装的,请查看标签中的文档。
当前最新发布版本是:v1.1.2
LSD (LSDeluxe)
这个项目是对 GNU ls
的重写,增加了许多新功能,如颜色、图标、树状视图、更多格式化选项等。
该项目深受超级 colorls 项目的启发。
安装
先决条件
安装 powerline nerd-font 和/或 font-awesome 的补丁字体。查看 Nerd Font README 获取更多安装说明。别忘了设置你的终端以使用正确的字体。
操作系统/发行版 | 命令 |
---|---|
Archlinux | pacman -S lsd |
Fedora | dnf install lsd |
Gentoo | sudo emerge sys-apps/lsd |
macOS | brew install lsd 或 sudo port install lsd |
NixOS | nix-env -iA nixos.lsd |
FreeBSD | pkg install lsd |
NetBSD 或任何 pkgsrc 平台 | pkgin install lsd 或 cd /usr/pkgsrc/sysutils/lsd && make install |
OpenBSD | pkg_add lsd |
Windows | scoop install lsd 或 winget install --id lsd-rs.lsd 或 choco install lsd |
Android (通过 Termux) | pkg install lsd |
Debian sid 和 bookworm | apt install lsd |
Ubuntu 23.04 (Lunar Lobster) | apt install lsd |
早期 Ubuntu/Debian 版本 | snap 已停用,使用从二进制文件安装 |
Solus | eopkg it lsd |
Void Linux | sudo xbps-install lsd |
openSUSE | sudo zypper install lsd |
从源代码安装
使用 Rust 的包管理器 cargo,你可以通过以下方式安装 lsd:
cargo install lsd
如果你想安装最新的 master 分支提交:
cargo install --git https://github.com/lsd-rs/lsd.git --branch master
从二进制文件安装
发布页面 包含每个发布版本的 Linux、macOS 和 Windows 预编译二进制文件。你也可以从 GitHub action 构建产物 获取 master
分支的最新二进制文件(选择顶部的 action 并滚动到产物部分)。
配置
lsd
可以通过配置文件设置默认选项。
查看配置文件内容了解详情。
配置文件位置
非 Windows 系统
在非 Windows 系统上,lsd
遵循
XDG 基本目录规范
关于配置文件位置的约定。将按以下顺序搜索 config.yaml
或 config.yml
文件:
$HOME/.config/lsd
$XDG_CONFIG_HOME/lsd
在大多数系统上,这些路径映射到同一位置,即 ~/.config/lsd/config.yaml
。
Windows 系统
在 Windows 系统上,lsd
按以下顺序搜索 config.yaml
或 config.yml
:
%USERPROFILE%\.config\lsd
%APPDATA%\lsd
这些通常分别是 C:\Users\username\AppData\Roaming\lsd\config.yaml
和 C:\Users\username\.config\lsd\config.yaml
。
自定义
你也可以从非标准位置提供配置文件:
lsd --config-file [路径]
配置文件内容
这是一个带有默认值和一些额外说明的示例配置文件。
# == 经典模式 ==
# 这是一个快捷方式,用于覆盖一些选项以向后兼容 `ls`。
# 它影响 "color"->"when"、"sorting"->"dir-grouping"、"date" 和 "icons"->"when" 选项。
# 可能的值:false、true
classic: false
# == 块 ==
# 这指定了使用长格式和树状布局时的列及其顺序。
# 可能的值:permission、user、group、context、size、date、name、inode、links、git
blocks:
- permission
- user
- group
- size
- date
- name
# == 颜色 ==
# 这有各种颜色选项。(未来将会扩展。)
color:
# 何时为输出着色。
# 当 "classic" 设置时,此项设为 "never"。
# 可能的值:never、auto、always
when: auto
# 如何为输出着色。
# 当 "classic" 设置时,此项设为 "no-color"。
# 可能的值:default、custom
# 当设为 "custom" 时,lsd 将在配置目录中查找 `colors.yaml`。
theme: default
# == 日期 ==
# 这指定日期列的日期格式。自由格式接受类似 strftime 的字符串。
# 当 "classic" 设置时,此项设为 "date"。
# 可能的值:date、locale、relative、'+<日期格式>'
# `日期格式` 将是一个 `strftime` 格式的值。例如 `date: '+%d %b %y %X'` 将给你这样的日期:17 Jun 21 20:14:55
date: date
# == 解引用 ==
# 是否解引用符号链接。
# 可能的值:false、true
dereference: false
# == 显示 ==
# 显示哪些项目。不指定此项以使用默认行为。
# 可能的值:all、almost-all、directory-only
# display: all
# == 图标 ==
icons:
# 何时使用图标。
# 当 "classic" 设置时,此项设为 "never"。
# 可能的值:always、auto、never
when: auto
# 使用哪种图标主题。
# 可能的值:fancy、unicode
theme: fancy
# 图标和名称之间的分隔符
# 默认为 1 个空格
separator: " "
# == 忽略 Globs ==
# 列出时要忽略的 glob 列表。
# ignore-globs:
# - .git
# == 指示符 ==
# 是否为某些列出的文件添加指示符字符。
# 可能的值:false、true
indicators: false
# == 布局 ==
# 使用哪种布局。这里的 "oneline" 可能有点令人困惑,应该称为 "one-per-line"。
# 未来可能会改变。
# 可能的值:grid、tree、oneline
layout: grid
== 大小 ==
指定大小列的格式。
可能的值: default, short, bytes
size: default
== 权限 ==
指定权限列的格式
可能的值: rwx, octal, attributes (仅限 Windows), disable
permission: rwx
== 排序 ==
sorting:
指定排序依据。
可能的值: extension, name, time, size, version
column: name
是否反向排序。
可能的值: false, true
reverse: false
是否将目录分组并放在何处。
当设置为"classic"时,此项设为"none"。
可能的值: first, last, none
dir-grouping: none
== 不显示符号链接 ==
是否省略显示符号链接目标
可能的值: false, true
no-symlink: false
== 总大小 ==
是否显示目录的总大小。
可能的值: false, true
total-size: false
== 超链接 ==
为文件名添加超链接
可能的值: always, auto, never
hyperlink: never
== 符号链接箭头 ==
指定如何显示符号链接箭头,包括 ASCII 和 UTF-8 字符
symlink-arrow: ⇒
== 头部 ==
是否显示块头。
可能的值: false, true
header: false
== 原始显示 ==
是否在文件名上显示引号。
可能的值: false, true
literal: false
== 截断所有者 ==
如果文件的用户名和组名超过一定字符数,如何截断它们。
truncate-owner:
保留的字符数。默认不截断(空值)。
after:
如果名称被截断,要附加的字符串。
marker: ""
## 主题
`lsd` 可以通过主题文件配置颜色或图标。
### 颜色主题
颜色主题可以在[配置文件](#configuration)(color.theme)中设置。
有效的主题配置为:
- `default`: `lsd` 默认自带的配色方案
- `custom`: 使用在 `colors.yaml` 中定义的自定义配色方案
- *(已弃用) 主题文件名(yaml): 使用主题文件指定颜色(不包含 `yaml` 扩展名)*
当设置为 `custom` 时,`lsd` 将在 XDG 基本目录中查找 `colors.yaml`,例如 ~/.config/lsd/colors.yaml
当配置为 `主题文件名`(一个 `yaml` 文件)时,`lsd` 将按以下方式查找主题文件:
- 相对名称: 检查 XDG 基本目录,例如 ~/.config/lsd/themes/<主题文件名>.yaml
- 绝对名称: 使用文件路径和名称查找主题文件
查看[颜色主题文件内容](#color-theme-file-content)了解详情。
#### 颜色主题文件内容
主题文件使用 [crossterm](https://crates.io/crates/crossterm) 来配置颜色,请查看 [crossterm](https://docs.rs/crossterm/0.20.0/crossterm/style/enum.Color.html) 了解支持的颜色。
颜色表: https://upload.wikipedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
请注意,颜色值会忽略大小写,小写和大写都支持。
这是 `lsd` 默认自带的主题方案。
```yaml
user: 230
group: 187
permission:
read: dark_green
write: dark_yellow
exec: dark_red
exec-sticky: 5
no-access: 245
octal: 6
acl: dark_cyan
context: cyan
date:
hour-old: 40
day-old: 42
older: 36
size:
none: 245
small: 229
medium: 216
large: 172
inode:
valid: 13
invalid: 245
links:
valid: 13
invalid: 245
tree-edge: 245
git-status:
default: 245
unmodified: 245
ignored: 245
new-in-index: dark_green
new-in-workdir: dark_green
typechange: dark_yellow
deleted: dark_red
renamed: dark_green
modified: dark_yellow
conflicted: dark_red
创建 lsd
的主题时,你可以指定默认主题的任何部分,然后更改其颜色,未指定的项目将使用默认颜色。
图标主题
图标主题可以在固定位置配置,$XDG_CONFIG_DIR/lsd/icons.yaml
,
例如,在 macOS 上是 ~/.config/lsd/icons.yaml
,
请查看配置文件位置以确定 $XDG_CONFIG_DIR
的位置。
如文件名所示,图标主题文件是一个 yaml
文件。
查看图标主题文件内容了解详情。
图标主题文件内容
lsd
支持 3 种图标覆盖方式,按 name
、按 filetype
和按 extension
。
最终使用的图标集将是 lsd
自带的图标与配置中的覆盖组合而成。
你可以在这里找到默认的图标集。
图标可以使用 nerd font 字形和 Unicode 表情符号。以下是图标自定义的示例。
name:
.trash:
.cargo:
.emacs.d:
a.out:
extension:
go:
hs:
rs: 🦀
filetype:
dir: 📂
file: 📄
pipe: 📩
socket:
executable:
symlink-dir:
symlink-file:
device-char:
device-block:
special:
外部配置
必需
为你的终端启用 nerd fonts,以 URxvt 为例,在 .Xresources
中:
URxvt*font: xft:Hack Nerd Font:style=Regular:size=11
可选
要在输入 ls
命令时使用 lsd,你需要在 shell 配置文件(~/.bashrc, ~/.zshrc 等)中添加以下内容:
alias ls='lsd'
一些其他有用的别名示例:
alias l='ls -l'
alias la='ls -a'
alias lla='ls -la'
alias lt='ls --tree'
常见问题
使用 deb 包时出现 "Uses unknown compression for member 'control.tar.zst'"
从 Debian 12
和 Ubuntu 21.10
开始支持 Zst 压缩,
请使用从 lsd v1.1.0
开始发布的 _xz.deb
。
详情或手动修复请查看 https://github.com/lsd-rs/lsd/issues/891。
Windows 下的自定义颜色方案
目前对于 lsd
,它读取一个名为 LS_COLORS 的系统环境变量。请查看这个帖子中标记的解决方案,其中包含如何设置颜色方案的指南。
图标不显示
为了让 lsd
能够显示图标,字体必须包含特殊的字体字形。对于大多数下载的字体来说,可能并非如此。幸运的是,你可以使用 NerdFont 修补大多数字体并添加这些图标。或者你可以直接从 NerdFont 字体下载页面 下载已修补版本的你喜欢的字体。
这里有一个在 macOS 和 Android 上设置字体的指南。
要检查你使用的字体是否正确设置,请尝试在 shell 中运行以下代码片段,看看是否打印出文件夹图标。如果打印出方框、问号或其他内容,那么你在设置字体或终端模拟器渲染字体方面可能存在一些问题。
echo $'\uf115'
在 Windows 的 PuTTY/KiTTY 中图标缺失或无法正确渲染
首先,确保已安装修补过的字体,并且 PuTTY/KiTTY 已配置使用该字体,请查看先决条件。
PuTTY/KiTTY 在显示 2 个字符宽度的图标时存在问题,请确保使用 1 个字符宽度的字体,如 Hack Regular Nerd Font Complete Mono Windows Compatible,详情请查看此问题。
颜色
你可以使用 LS_COLORS
自定义文件类型颜色,并使用主题自定义其他颜色。
默认颜色如下:
用户/组 | 权限 | 文件类型(根据终端配色方案变化) | 日期 | 文件大小 |
---|---|---|---|---|
用户 | 读取 | 目录 | 一小时内 | 小文件 |
组 | 写入 | 可执行文件 | 一天内 | 中等文件 |
执行 | 非可执行文件 | 更早 | 大文件 | |
带粘滞位执行 | 损坏的符号链接 | 非文件 | ||
无权限 | 管道/符号链接/块设备/套接字/特殊 | |||
字符设备 |
查看 trapd00r/LS_COLORS 和 sharkdp/vivid 以获取使用 LS_COLORS
进行主题设置的帮助。
文件夹/文件的第一个字符被截断
Konsole 的解决方法:编辑配置文件(如果不存在则创建它),并粘贴以下内容(包含不可见的 Unicode 字符):
icons:
separator: " ㅤ"
这是一些终端模拟器中的已知问题。尝试使用其他终端模拟器,如 Alacritty 和 Kitty,它们是非常好的替代选择。你可能还需要检查是否是你的字体导致了这个问题。 要验证这一点,请尝试禁用图标运行 lsd,如果仍然没有第一个字符,那么这是 lsd 的 bug:
lsd --icon never --ignore-config
UTF-8 字符
lsd
将尝试显示文件名中的 UTF-8 字符,使用 U+FFFD 替换字符
(�) 来表示无效的 UTF-8 字符。
图标显示异常
Nerd Fonts 在 3.0 版本中移动了 Material Design 图标的代码点,因此 lsd 在 #830 中更新了图标。如果你的图标看起来很奇怪,请使用 Nerd Fonts v2.3.0 或更高版本修补的字体。
另请参阅:https://github.com/ryanoasis/nerd-fonts/releases/tag/v2.3.3
贡献者
每个人都可以为这个项目做出贡献,改进代码或添加功能。如果有人想要添加什么,我们会尽力去做。
由于这个项目正在定期更新,在创建拉取请求之前,请不要忘记重新基于最新的主分支。
致谢
特别感谢:
- meain 的所有贡献和审查
- danieldulaney 的 Windows 集成
- sharkdp 和他出色的 fd,我从中借鉴了很多 CI 相关的内容
- athityakumar 的 colorls 项目
- 所有其他贡献者