#editor #line-numbers #terminal #terminal-text

bin+lib 吉比

少于1024行代码的文本编辑器,具有语法高亮、搜索等功能

5个版本

0.2.2 2021年2月14日
0.2.1 2020年10月6日
0.2.0 2020年4月24日
0.1.2 2020年2月17日

#74 in 文本编辑器

MIT/Apache

77KB
1K SLoC

吉比:在 ≤1024 行代码中编写的 Rust 文本编辑器

Build Status Crate Minimum rustc version Platform Packaging status License Gitpod Ready-to-Code All Contributors

asciicast

一个可配置的文本编辑器,支持 UTF-8,增量搜索,语法高亮,行号等功能,用不到 1024 行 Rust 代码实现1,依赖最少。

吉比兼容 Linux、macOS 和 Windows 102

本项目灵感来源于 kilo,一个用 C 语言编写的文本编辑器。以下为更多功能的对比列表。

欢迎贡献!请注意保持代码行数在 1024 行以内...

1.: 使用 count_loc.sh 计算
2.: 吉比需要终端支持 ANSI 转义序列。Windows 10 版本 1703 (创作者更新,2017 年 4 月) 及以上版本支持。

目录

安装

Packaging status

使用 cargo

您可以使用 cargo 安装吉比

cargo install kibi

语法高亮配置文件位于此仓库的 syntax.d 目录中。它们需要放置在配置/语法高亮部分中提到的配置目录之一。

例如

cd ~/repos
git clone https://github.com/ilai-deutel/kibi.git
mkdir -p ~/.local/share/kibi/
ln -sr ./kibi/syntax.d ~/.local/share/kibi/syntax.d

Arch 用户仓库 (Arch Linux)

在 AUR 上有 2 个软件包可用: kibikibi-git

安装说明
  1. 使用 AUR 辅助工具安装,例如使用 yay

    yay -Syu kibi  # or yay -Syu kibi-git
    
  2. 手动安装使用 makepkg

    git clone https://aur.archlinux.org/kibi.git  # or git clone https://aur.archlinux.org/kibi-git.git
    cd kibi
    makepkg -si
    

Android (通过 Termux)

Kibi 以 Termux 软件包 的形式提供。

安装说明
  1. 安装 Termux

    Get it on F-Droid" Get it on Google Play"

  2. 在 Termux 中安装 Kibi: pkg install kibi

Fedora/CentOS

该软件包在 COPR 中可用,地址为 atim/kibi.

安装说明
sudo dnf copr enable atim/kibi -y
sudo dnf install kibi

NetBSD

Kibi 可从 官方仓库 获取。

安装说明

使用

pkgin install kibi

或从源码构建

cd /usr/pkgsrc/editors/kibi
make install

使用方法

kibi              # Start an new text buffer
kibi <file path>  # Open a file
kibi --version    # Print version information and exit

键盘快捷键

键盘快捷键 描述
Ctrl-F 增量搜索;使用箭头导航
Ctrl-S 将缓冲区保存到当前文件,或指定文件路径
Ctrl-G 跳转到 <行号>[:<列号>] 位置
Ctrl-Q 退出
Ctrl-D 复制当前行
Ctrl-E 执行外部命令并将输出粘贴

配置

全局配置

Kibi 可以使用配置文件进行配置。它必须遵循此格式

# The size of a tab. Must be > 0.
tab_stop=4
# The number of confirmations needed before quitting, when changes have been
# made since the file was last changed.
quit_times=2
# The duration for which messages are shown in the status bar, in seconds.
message_duration=3
# Whether to show line numbers.
show_line_numbers=true

以下描述了这些文件的位置。

Linux / macOS

kibi 遵循 XDG 基础目录规范

  • 如果定义了环境变量 $XDG_CONFIG_HOME,则用户级别的配置文件位于 $XDG_CONFIG_HOME/kibi/config.ini,否则位于 ~/.config/kibi/config.ini
  • 如果定义了环境变量 $XDG_CONFIG_DIRS,则系统级别的配置文件位于 $XDG_CONFIG_DIRS/kibi/config.ini,否则位于 /etc/kibi/config.ini/etc/xdg/kibi/config.ini
Windows

配置文件位于 %APPDATA%\Kibi\config.ini

语法高亮

可以使用遵循此格式的 INI 文件配置语法高亮

### /usr/share/kibi/syntax.d/rust.ini ###
# Kibi syntax highlighting configuration for Rust

name=Rust
extensions=rs
highlight_numbers=true
singleline_string_quotes="
singleline_comment_start=//
multiline_comment_delims=/*, */
; In Rust, the multi-line string delimiter is the same as the single-line string
; delimiter
multiline_string_delim="
; https://doc.rust-lang.org/book/appendix-01-keywords.html
keywords_1=abstract, as, async, await, become, box, break, const, continue, crate, do, dyn, else, enum, extern, false, final, fn, for, if, impl, in, let, loop, macro, match, mod, move, mut, override, priv, pub, ref, return, self, Self, static, struct, super, trait, true, try, type, typeof, unsafe, unsized, use, virtual, where, while, yield
keywords_2=i8, i16, i32, i64, i128, isize, u8, u16, u32, u36, u128, usize, f32, f64, bool, char, str

以下描述了这些文件的位置。

Linux / macOS

kibi 遵循 XDG 基础目录规范

  • 如果定义了环境变量 $XDG_DATA_HOME,则用户级别的语法高亮配置文件位于 $XDG_DATA_HOME/kibi/syntax.d/<文件名>.ini,否则位于 ~/.local/share/kibi/syntax.d/<file_name>.ini
  • 系统范围内的语法高亮配置文件可以位于 $XDG_DATA_DIRS/kibi/syntax.d/<file_name>.ini,如果环境变量 $XDG_DATA_DIRS 被定义,否则位于 /usr/local/share/kibi/syntax.d/<file_name>.ini/usr/share/kibi/syntax.d/<file_name>.ini
Windows

语法高亮配置文件可以位于 %APPDATA%\Kibi\syntax.d\<file_name>.ini

kilo 的比较

本项目受到 Salvatore Sanfilippo (antirez) 用 C 语言编写的文本编辑器 kilo 以及 C 语言教程 此教程 的启发。

kibi 提供了额外的功能

  • 支持 UTF-8 字符
  • 与 Windows 的兼容性
  • 跳转到指定行/列的命令
  • 处理窗口大小调整(仅限 UNIX)
  • 解析配置文件:全局编辑器配置,特定语言的语法高亮配置
  • 在屏幕左侧显示行号;在状态栏中显示文件大小
  • 语法高亮:多行字符串
  • 当没有提供文件名时,显示 另存为 提示
  • 复制当前行的命令
  • 能够从编辑器执行外部命令并将输出粘贴
  • 内存安全,归功于 Rust!
  • 许多错误修复

依赖项

此项目必须保持小巧,因此使用高级依赖项,如 ncursestomlansi-escapes 将被视为作弊。

以下依赖项提供了系统调用的包装。

  • 在 UNIX 系统(Linux、macOS)上
    • libc
  • 在 Windows 上
    • winapi
    • winapi-util

此外,unicode-width 用于确定 Unicode 字符的显示宽度。不幸的是,没有办法解决这个问题:Unicode 字符宽度表有 230 行长。

为什么选择吉比?

  1. kilo 的源代码从 C 转换为 Rust 并尝试使其符合 Rust 的风格很有趣
  2. 在 1024 行的限制下实现新功能是一个很好的挑战
  3. 最重要的是,我想学习 Rust,这是一个很好的开始项目(感谢 Reddit 的想法)

贡献者

本项目遵循 all-contributors 规范(emoji 键)。欢迎任何形式的贡献!


Ilaï Deutel

💻 🤔 🚇 📦 💠

Vishal Anand

🐛

Gurjus Bhasin

🤔

Libin Dang

💻 🐛

Isaac Andrade

🤔

frjol

🐛

Artem Polishchuk

📦

Marco A L Barbosa

💻

pin

📦

Uniminin

💠

Woomy4680-exe

🐛

许可证

本项目许可协议为以下之一:

任选其一。

贡献

除非您明确说明,否则您提交给Kibi的任何有意贡献都将采用上述双许可协议,不附加任何额外条款或条件。

依赖项

~0.3–7.5MB
~38K SLoC