2个版本
0.0.3 | 2024年6月17日 |
---|---|
0.0.2 | 2024年4月22日 |
#40 在 文本编辑器
每月115 次下载
18KB
180 行
Harp
我通常在这里写标语,但还没有想出来。
Harp是一个路径存储和检索系统,设计用于存储由各种文本编辑器(或任何其他程序)使用的文件位置。
Harp使用“部分”来存储一组“寄存器”。
寄存器实际上保存单个文件位置。
寄存器可以有以下属性:路径、行、列。
您不必使用所有这些!但您必须至少使用其中之一。
这三个属性的背后的想法是,您可以在一个寄存器内保留存储特定文件位置所需的所有信息。
在您的编辑器端,您会创建热键来更新寄存器的信息,并获取寄存器的信息(以及某种方式使用它,通常是通过跳转到存储的文件位置)。
寄存器非常灵活:`path` 实际上不必是路径,它可以是任何字符串。`line` 和 `column`,另一方面,必须是整数。让我再重复一遍:您不必使用所有三个,您可以根据需要混合匹配属性。
这正是部分发挥作用的地方。您可能想将一组相关的寄存器组合在一起,并在不同的部分中分开它们。
例如,我有一个名为 `harps` 的部分,其中的寄存器(命名为单个字母 a-z 和 A-Z)只设置了文件路径。因此,它只是一组文件路径,帮助我快速跳转到文件,但不能跳转到文件中的特定位置。
我可能想实现这样的功能,即我也存储行和编号,以便我可以跳转到特定的文件位置。因此,我可以将包含它们的部分的名称命名为 `location_harps`。
只有将这两个部分分开才有意义,因为我希望寄存器名称不相互关联。`harps` 中的寄存器 "a" 可能指向与 `location_harps` 中的寄存器 "a" 完全不同的文件。
或者,您可以在 `harps` 中使用所有三个属性,然后根据热键,或者仅跳转到文件,或者跳转到文件的特定位置。
这种灵活性允许您定义在编辑器(或您想要交互式存储和检索文件路径的其他程序)中想要的任何行为,以及您如何使用 harp
,完全由您决定。
用法
`harp` is a program that helps store and retrieve paths, stored in registers that are separated by sections.
A section is the highest level key, that stores a bunch of registers inside of it.
Each register is also a key, but the value of a register is an object, that has the properties path, line, column.
A register needs to have at least one of those properties filled with data.
Outside of that, it's up to you which (if not all) of the three a given register will store.
Examples:
`harp update marks a --path ~/here/is/my/path --line 23 --column 36`
Will store all three properties in the register called "a" (can be any string), under the section called "marks"
(can also be any string).
Important to note: the action is called `update` because it overrides only the properties you pass into it.
If a register previously had all three properties set and you do:
`harp update marks a --path ~/a/different/path`
, then only the path will be updated, while line and column will hold the old value.
If you want to clear them, check out the `clear` subcommand explained later in this help page.
`harp get marks a --path`
Will now print "~/here/is/my/path".
Whatever flags you specify, only those properties will be printed.
The order will always be path, line, column, regardless of the order of flags you specify.
The `clear` subcommand does exactly what you expect it to do.
If you only specify the section to `clear` like:
`harp clear marks`
, the entire section and all its registers will be deleted (be careful!).
However, if you specify the register too, only that register's entry will be deleted from the section,
while every other register in the section will stay intact.
`harp clear marks a`
If, for example, you want to remove the properties line and column in an entry, and change the path,
you would do this:
`harp clear marks a`
and then:
`harp update marks a --path ~/my/new/path`
Usage: harp [OPTIONS] <COMMAND>
Commands:
clear If REGISTER is specified, it's completely removed. If it isn't, the entire SECTION is removed instead
get Print all available properties of a REGISTER in the order: path, line, column.
Only the properties you specified with the `--path`, `--line`, `--column` flags are printed.
At least one of those flags needs to be specified.
update Update properties of a register, or create one. At least one of `--path`, `--line`, `--column` has to
be specified
help Print this message or the help of the given subcommand(s)
Options:
-q, --quiet
Don't print error messages (while still exiting with a non-zero exitcode in case of error).
Useful for when the program where you want to use `harp` in makes it difficult to differentiate between
successful stdout and unsuccessful stderr
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
与文本编辑器的集成
harp
的想法最初来源于 neovim 插件 Harpoon,它以一种令人惊讶的不灵活的方式编写。
harp
最初也打算成为一个 neovim 插件,但我讨厌 lua,所以它被写成 rust,这使得它可以用于任何程序(那些可以在其中调用 shell 命令的程序)。
正因为这种灵活性,harp
并没有实现任何实际的行为——这不是它的责任。用户需要决定如何使用他们通过 harp
存储的数据。
看到 harp
在各种编辑器和程序中的实际使用例子仍然非常有用,这正是 社区 的作用所在!
由于我最初是为 neovim 制作这个程序,我在其中留下了一个如何使用 harp
的例子。如果您觉得 harp
有用,请随意打开一个 PR,将您的配置示例添加到 社区!
贡献
对于 社区 的贡献,唯一的要求是它们应该完整地展示您的想法:如果有外部依赖项,请在注释中指定,以便未来的用户在检查您的配置时可以清楚了解。
文件结构(如果有多个文件)、文件命名约定以及格式化,完全由您决定!只需确保将您的配置放在一个相应的目录下即可。例如,我的 neovim 示例配置在一个名为 neovim 的目录中。
如果您有精力为您自己的配置编写一个 README,那将非常受欢迎。然而,这不是预期的。
当涉及到对项目 rust 方面的贡献时,它要严格得多。设计旨在简单和简约,所以我对于对其进行的更改非常谨慎。因此,如果您不想在编写了大量的编程工作后,却发现维护者不高兴,请通过 github 问题或 discord(@axlefublr
)与我联系,我们可以确定更改是否适合项目。
安装
cargo install axleharp
也支持 cargo-binstall
和 cargo-quickinstall
。
尽管软件包被称为 axleharp
,但您将要调用的二进制可执行文件只是 harp
。
卸载
cargo uninstall axleharp
rm -fr ~/.local/share/harp # this is the data file path on linux
对于 Windows,它看起来像这样:C:\Users\username\AppData\Local\harp
对于 Mac:/Users/username/Library/Application Support/harp
依赖项
~4–14MB
~187K SLoC