10 个版本
0.0.19 | 2022 年 8 月 7 日 |
---|---|
0.0.18 | 2022 年 5 月 20 日 |
0.0.6 | 2022 年 4 月 28 日 |
#154 in 文本编辑器
30KB
436 行
绑定到 Vim 对象和使用 Rust 与 Vim 交互的方式,例如文本属性、通道。
使用此库,您可以编写标准插件,全部在 Rust 中编写,就像 Vim 插件通常会运行一样。
安装
将此行添加到您的 Cargo.toml
文件的依赖项部分。
vii= "0.0"
当前接口非常不稳定。
功能
默认版附带许多有用的功能,但还有许多其他功能可供选择,以提高您程序的质量。
用法
如果可能,直接使用文档中的示例,因为它们更清晰且经过测试。
插件
- 注意:尚未实现服务器插件或持久插件。
- 注意:尚未实现 FiletypePlugin,用于 Vim 文件类型插件。
使用 Rust 创建 Vim 插件。可以使用 Vim 插件 rust-plug
进行安装和运行。
几乎与 Vim 插件完全一样。它在启动时运行,执行其代码。例外情况包括添加 pythonx
代码,autoload
目录,但它仍然可以创建函数、命令、全局变量,并从 Vim 本身读取。
- 使用
PluginConfig
结构体添加配置支持。 - 使用
Plugin
特性创建插件。get_config
- 获取配置结构体。plugin
- 插件,重要信息。
以下是一个示例,取自 rust-plug 验证概念。
# Cargo.toml
[package]
name = "rust-plug-poc"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at http://doc.rust-lang.net.cn/cargo/reference/manifest.html
[dependencies]
vii = "0.0"
// src/main.rs
use std::env;
use std::net::TcpStream;
use vii::plugin::Plugin;
use vii::plugin::PluginConfig;
struct MyPlugin{
ip: String,
port: String,
}
/// Make your struct, MyPlugin, into a Plugin ready for Vim.
impl Plugin for MyPlugin {
fn get_config(&self) -> PluginConfig {
PluginConfig::new("127.0.0.1".to_string(), "8765".to_string())
}
fn plugin(&mut self, _stream: &mut TcpStream) -> Result<(), String> {
Ok(())
}
}
fn main() {
// Environment Variable, to communicate with rust-plug
let port = env::var("VII_PLUGIN_PORT").unwrap();
let mut plugin = MyPlugin {
ip: "127.0.0.1".to_string(),
port,
};
// Run your plugin.
//
// Here you can run your plugin as many times as you'd like, create multiple plugins, etc.
plugin.run();
}
数据类型
与 Vim 数据类型一起工作。
请参阅文档以了解支持的数据类型。
use vii::DataType;
// Using a Vim data type
let vim_float = DataType::Float(3.14);
// Serializing for transmission to Vim
let serialized_float = vim_float.to_string(); // "3.14"
let vim_string = DataType::String("Hello World!".to_string());
let serialized_string = vim_string.to_string(); // "\"Hello World!\""
文本属性
与 Vim 文本属性一起工作(请参阅 Vim 中的 :help textprop.txt
)。
注意:这是一个低级 API。
use vii::textprop::{
TextProperty,
PropertyType,
};
use vii::textprop::PropertyTypeBuilder;
// Create New Property
let prop = TextProperty { id: 0, r#type: "number".to_string() };
// Create New Property Type
let prop_type = PropertyTypeBuilder::default().highlight("Constant".to_string()).build();
通道
与 Vim 通道一起工作(请参阅 Vim 中的 :help channel.txt
)。
注意:这是一个低级API。最终的高级API应该看起来像这样:let expr = Expr::from("line('$')");
。
use vii::channel::{
ChannelCommand,
Call,
Expression,
};
// Number of Lines in Current Buffer
// ["expr","line('$')"]
let expression = ChannelCommand::Expr(
Expression {
expression: "line('$')".to_string(),
},
None,
);
// Number of Lines in Current Buffer
// ["call", "line", ["$"]]
let call = ChannelCommand::Call(
Call {
function: "line".to_string(),
args: vec![DataType::String("$")],
},
None,
);
println!("{}", expression.to_string());
// ["expr","line('$')"]
println!("{}", call.to_string());
// ["call", "line", ["$"]]
贡献
如果您希望添加任何功能,发现任何潜在的错误,或者有任何问题,请随时创建一个问题。
测试
cargotest
单元测试位于测试文件中,紧邻它们所测试的单元(底部)。集成测试位于/tests/
。
许可证
根据以下任一许可证授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任由您选择。
贡献
除非您明确声明,否则您有意提交给作品以包含在内的任何贡献,根据Apache-2.0许可证的定义,将按照上述方式双重许可,不附加任何额外的条款或条件。
依赖项
~0–305KB