Zen Mode 具体我也不太清楚, 之前在 vscode 中使用过, 但是不是太好就没有再使用了. Helix(23.03) 现在还不支持窗口尺寸变更, 我在 PR 中查阅到有人提起 Zen Mode.
这里我利用了编辑器的配置项最大行长度 text-width
和虚拟字符后支持的软换行(soft wrap)功能中的配置项 soft-wrap.wrap-at-text-width
, 其中软换行的这个选项是指在设置的text-width
长度位置进行换行, 而非默认的视图位置换行.
追加 Zen Mode Like 功能
修改源文件
现在我们修改 helix-view/src/views.rs
,找到 inner_area
函数进行修改.
# cd helix source dir
hx helix-view/src/views.rs
键入 <space>sinner_area<enter>;
(这里是打开symobl picker, 搜索 inner_area , 然后 ;
取消默认的选择)
pub fn inner_area(&self, doc: &Document) -> Rect {
// zen mode with wrap and text_width
let config = doc.config.load();
let self_width = self.inner_width(doc);
let text_width = doc
.language_config()
.and_then(|config| config.text_width)
.unwrap_or(config.text_width) as u16;
let soft_wrap_at_text_width = doc
.language_config()
.and_then(|config| {
config
.soft_wrap
.as_ref()
.and_then(|soft_wrap| soft_wrap.wrap_at_text_width)
})
.or(config.soft_wrap.wrap_at_text_width)
.unwrap_or(false);
let space_width = if soft_wrap_at_text_width && self_width.gt(&text_width) {
(self_width - text_width) / 2
} else {
0
};
self.area
.clip_left(self.gutter_offset(doc) + space_width)
.clip_right(space_width)
.clip_bottom(1) // -1 for statusline
}
主要修改了
- 读取配置
config.toml
- 同样会读取
languages.toml
中的配置
- 同样会读取
- 计算宽度
- 将编辑区域左右各自追加空白
编译
cargo build --bin hx
./target/debug/hx book/src/configuration.md
输入命令 :set soft-wrap.wrap-at-text-width true
, 当然确保你的配置中已经开启了软换行 soft-wrap.render = true
, 这时应该可以看到了 markdown 文件居中显示 80 列字符, 修改宽度可以使用 :set text-width 120
这里默认 80.
编译release
cargo install --path helix-term
个人配置和项目配置
在 helix 中支持三层配置
- 默认配置, 这个是在编译时完成的.
- 用户配置目录, 参看 configuration
- linux & macos:
~/.config/helix/
比如~/.config/helix/config.toml
,~/.config/helix/languages.toml
. - windows:
%AppData%\helix\
- linux & macos:
- 项目配置目录, 一般为项目位置下创建
.helix/
配置目录.
这里我们为自己的项目中的 Markdown 文件使用 zen mode like.
cd my-project
mkdir .helix
touch .helix/languages.toml
hx .helix/languages.toml
.helix/languages.toml
[[language]]
name = "markdown"
text-width = 80
soft-wrap = { enable = true, wrap-at-text-width = true }