Zen Mode 具体我也不太清楚, 之前在 vscode 中使用过, 但是不是太好就没有再使用了. Helix(23.03) 现在还不支持窗口尺寸变更, 我在 PR 中查阅到有人提起 Zen Mode.

这里我利用了编辑器的配置项最大行长度 text-width 和虚拟字符后支持的软换行(soft wrap)功能中的配置项 soft-wrap.wrap-at-text-width, 其中软换行的这个选项是指在设置的text-width长度位置进行换行, 而非默认的视图位置换行.

zen-mode

追加 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\
  • 项目配置目录, 一般为项目位置下创建 .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 }