10 个稳定版本

3.6.1 2024 年 4 月 25 日
3.6.0 2023 年 11 月 26 日
3.4.0 2023 年 10 月 17 日
3.3.0 2023 年 1 月 17 日
3.0.0 2020 年 3 月 26 日

命令行工具 中排名第 214

Download history 23/week @ 2024-04-27 2/week @ 2024-05-04 4/week @ 2024-05-18 1/week @ 2024-05-25

每月下载量 582

MIT 许可证

170KB
5K SLoC

Rust 3K SLoC // 0.0% comments C 2K SLoC

Syncat

语法感知的 cat 工具。使用 Tree-sitter 解析文件并使用 ANSI 转义码为其着色,为命令行上打印的文件提供语法高亮。

功能

Syncat 旨在提供与标准 cat 和类似工具 Bat 相似的功能

  1. Git 集成 (-g)
  2. 显示行结束 (-e)
  3. 行号 (-n)
  4. 多级框架 (-f-ff)
  5. 文件连接
  6. 使用 Tree-sitter 精确解析任何文件类型
  7. 使用样式表自定义语法着色

尤其是,Syncat 与其他选项相比的优势在于它使用 Tree-sitter 而不是正则表达式进行解析,这使得它

  • 非常快;
  • 足够健壮,即使在语法错误的情况下也能提供有用的结果。

Syncat 不支持自动分页,但您可以使用 less -r 来处理。

安装

Syncat 可以从 crates.io 安装

cargo install syncat

配置

默认情况下,Syncat 随配置文件一起提供,如 syncat/config 中所示,提供未经验证的树-sitter 语法列表和一些为已知文件类型快速组合的高亮显示。

如果这个基本配置不足以满足您的需求,您可以自行配置 Syncat。通过复制以下文件夹并修改它们来完成此操作:syncat/config。您也可能对复制我的个人 Syncat 配置感兴趣,该配置可以在 syncat-themes 仓库中找到。

在任一情况下,根据您的操作系统,在相应的配置目录中复制(或创建新文件),然后继续到以下部分。相应的目录是:

  • Linux: $HOME/.config/syncat/
  • Mac: $HOME/Library/Preferences/com.cameldridge.syncat/
  • Windows: 不受官方支持

样式表

官方样式表(虽然有些不完整)可在 此处 获取。

样式表放置在配置目录下的子目录 style 中。您可以通过以下方式获取官方主题,或者自行创建此目录。

cd ~/.config/syncat # or `cd ~/Library/Preferences/com.cameldridge.syncat` for Mac users
git clone https://github.com/foxfriends/syncat-themes style

有关这些样式表自定义如何工作的完整文档,请参阅 syncat-themes 仓库中的 README。

语言

由于 Syncat 使用 Tree-sitter 进行解析,您必须下载和编译 Syncat 的 Tree-sitter 解析器。幸运的是,如果您指定了下载的内容,Syncat 可以处理下载和编译。

语言映射是一个名为 languages.toml 的简单 TOML 文件,位于配置文件夹的根目录。您可以尝试从 这里 开始。

此文件中的每个条目都描述了一种语言,是一个包含 4 或 5 个键的表格。以下示例条目将为 Syncat 样式表安装一个高亮程序。

[syncat-stylesheet] # The name here is arbitrary
# The URL of the Git repository where the language is defined
source = "https://github.com/foxfriends/syncat"
# Optional: The path within the repository to the tree-sitter package.
# Leave this out if the language is defined in the root of the repository.
path = "tree-sitter-syncat-stylesheet"
# The name of the directory to clone the `source` repository into. Typically
# this is the same name as the source repository, but you must specify it anyway.
library = "syncat"
# The name of this language. This value should be the same as the value listed
# in the `grammar.js` file from the repository.
#
# This name will also be the name of the stylesheet file used when highlighting
# this language.
name = "syncat_stylesheet"
# A list of file extensions which should be parsed using this language.
extensions = ["syncat"]

一旦您根据自己的喜好填写了此文件,命令 syncat install 将安装所有这些语言。稍后再次运行 syncat install 将更新所有语言,并安装任何新的语言。

使用方法

# Colours this file based on the extension
syncat src/main.rs

# Uses the shell expansion, colouring each file by its own extension
syncat src/*.rs

# Colours the file using a specific language
syncat -l js src/package.json

# Installs (or updates) all languages listed in the `languages.toml` file
syncat install

# Installs only a specific entry in the `languages.toml` file
syncat install rust

# Uninstalls a language. A few points to note:
# *   The language must still be listed in the `languages.toml` file.
# *   This does not remove the file from `languages.toml`, only deletes its installation.
syncat remove rust

# Show information about all languages listed in `languages.toml`
syncat list

依赖关系

~15–27MB
~492K SLoC