Project Icon

lsd

Rust 实现的增强版 ls 命令,支持色彩和图标

LSD (LSDeluxe) 是 GNU ls 命令的 Rust 重写版本,增加了彩色输出、图标显示和树形视图等功能。支持自定义颜色主题和图标,可跨平台使用。通过直观的文件信息展示,LSD 旨在改善用户的文件浏览体验。该工具提供了灵活的配置选项,适用于需要增强文件列表功能的开发者和系统管理员。

重要提示:这是开发文档, 如果您是从发布版本安装的,请查看标签中的文档。

当前最新发布版本是:v1.1.2


LSD (LSDeluxe)

许可证 最新版本 构建状态 代码覆盖率 版本

图片

这个项目是对 GNU ls 的重写,增加了许多新功能,如颜色、图标、树状视图、更多格式化选项等。 该项目深受超级 colorls 项目的启发。

安装

打包状态 打包状态

先决条件

安装 powerline nerd-font 和/或 font-awesome 的补丁字体。查看 Nerd Font README 获取更多安装说明。别忘了设置你的终端以使用正确的字体。

操作系统/发行版命令
Archlinuxpacman -S lsd
Fedoradnf install lsd
Gentoosudo emerge sys-apps/lsd
macOSbrew install lsdsudo port install lsd
NixOSnix-env -iA nixos.lsd
FreeBSDpkg install lsd
NetBSD 或任何 pkgsrc 平台pkgin install lsdcd /usr/pkgsrc/sysutils/lsd && make install
OpenBSDpkg_add lsd
Windowsscoop install lsdwinget install --id lsd-rs.lsdchoco install lsd
Android (通过 Termux)pkg install lsd
Debian sid 和 bookwormapt install lsd
Ubuntu 23.04 (Lunar Lobster)apt install lsd
早期 Ubuntu/Debian 版本snap 已停用,使用从二进制文件安装
Soluseopkg it lsd
Void Linuxsudo xbps-install lsd
openSUSEsudo 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.yamlconfig.yml 文件:

  • $HOME/.config/lsd
  • $XDG_CONFIG_HOME/lsd

在大多数系统上,这些路径映射到同一位置,即 ~/.config/lsd/config.yaml

Windows 系统

在 Windows 系统上,lsd 按以下顺序搜索 config.yamlconfig.yml

  • %USERPROFILE%\.config\lsd
  • %APPDATA%\lsd

这些通常分别是 C:\Users\username\AppData\Roaming\lsd\config.yamlC:\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
# == 递归 == recursion: # 是否启用递归。 # 可能的值: false, true enabled: false # 递归深度。必须为正整数。不指定则为(实质上的)无限。 # depth: 3

== 大小 ==

指定大小列的格式。

可能的值: 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 12Ubuntu 21.10 开始支持 Zst 压缩, 请使用从 lsd v1.1.0 开始发布的 _xz.deb

详情或手动修复请查看 https://github.com/lsd-rs/lsd/issues/891。

Windows 下的自定义颜色方案

目前对于 lsd,它读取一个名为 LS_COLORS 的系统环境变量。请查看这个帖子中标记的解决方案,其中包含如何设置颜色方案的指南。

图标不显示

为了让 lsd 能够显示图标,字体必须包含特殊的字体字形。对于大多数下载的字体来说,可能并非如此。幸运的是,你可以使用 NerdFont 修补大多数字体并添加这些图标。或者你可以直接从 NerdFont 字体下载页面 下载已修补版本的你喜欢的字体。 这里有一个在 macOSAndroid 上设置字体的指南。

要检查你使用的字体是否正确设置,请尝试在 shell 中运行以下代码片段,看看是否打印出文件夹图标。如果打印出方框、问号或其他内容,那么你在设置字体或终端模拟器渲染字体方面可能存在一些问题。

echo $'\uf115'

在 Windows 的 PuTTY/KiTTY 中图标缺失或无法正确渲染

首先,确保已安装修补过的字体,并且 PuTTY/KiTTY 已配置使用该字体,请查看先决条件

PuTTY/KiTTY 在显示 2 个字符宽度的图标时存在问题,请确保使用 1 个字符宽度的字体,如 Hack Regular Nerd Font Complete Mono Windows Compatible,详情请查看此问题

颜色

你可以使用 LS_COLORS 自定义文件类型颜色,并使用主题自定义其他颜色。

默认颜色如下:

用户/组权限文件类型(根据终端配色方案变化)日期文件大小
#ffffd7 用户#00d700 读取#0087ff 目录#00d700 一小时内#ffffaf 小文件
#d7d7af#d7ff87 写入#00d700 可执行文件#00d787 一天内#ffaf87 中等文件
#af0000 执行#ffffff 非可执行文件#00af87 更早#d78700 大文件
#ff00ff 带粘滞位执行#af0000 损坏的符号链接#ffffff 非文件
#d75f87 无权限#00d7d7 管道/符号链接/块设备/套接字/特殊
#d78700 字符设备

查看 trapd00r/LS_COLORSsharkdp/vivid 以获取使用 LS_COLORS 进行主题设置的帮助。

文件夹/文件的第一个字符被截断

Konsole 的解决方法:编辑配置文件(如果不存在则创建它),并粘贴以下内容(包含不可见的 Unicode 字符):

icons:
    separator: " ㅤ"

这是一些终端模拟器中的已知问题。尝试使用其他终端模拟器,如 AlacrittyKitty,它们是非常好的替代选择。你可能还需要检查是否是你的字体导致了这个问题。 要验证这一点,请尝试禁用图标运行 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

贡献者

每个人都可以为这个项目做出贡献,改进代码或添加功能。如果有人想要添加什么,我们会尽力去做。

由于这个项目正在定期更新,在创建拉取请求之前,请不要忘记重新基于最新的主分支。

致谢

特别感谢:

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号