Metadata-Version: 2.4
Name: easymd-cli
Version: 0.2.0
Summary: Terminal Markdown editor with vim-style keys and live side-by-side preview
Project-URL: Repository, https://github.com/decajoin/easymd
Project-URL: Issues, https://github.com/decajoin/easymd/issues
Author-email: Yiqi Yang <yangyiqi5261@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: editor,markdown,terminal,textual,tui,vim
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Text Editors
Classifier: Topic :: Text Processing :: Markup :: Markdown
Requires-Python: >=3.10
Requires-Dist: textual[syntax]>=8.0
Description-Content-Type: text/markdown

# easymd

终端里的 Markdown 编辑器：左侧 vim 式编辑，右侧实时预览。基于 [Textual](https://textual.textualize.io/)。

## 安装

需要 Python 3.10+。推荐用 pip 或 [uv](https://docs.astral.sh/uv/) 从 PyPI 安装：

```bash
pip install easymd-cli      # 或: uv tool install easymd-cli
easymd 笔记.md               # 文件不存在时会在首次 :w 时创建
```

从源码开发：

```bash
git clone https://github.com/decajoin/easymd && cd easymd
uv sync --group dev
uv run easymd demo.md
uv run pytest            # 运行测试
```

## 按键参考

### 模式

| 按键 | 作用 |
| --- | --- |
| `i` `a` `A` `I` `o` `O` | 进入插入模式（位置同 vim） |
| `R` | 替换模式（连续覆写，退格可恢复被覆写的字符） |
| `Esc` | 回到普通模式 |
| `v` | 可视模式（`y`/`d`/`c` 作用于选区） |
| `V` | 可视行模式（按整行选择，`y`/`d`/`c` 作用于整行；`v`/`V` 互切） |

### 移动（普通/可视模式，支持数字前缀如 `3j`）

`h j k l`、`w b e`、`0 ^ $`、`gg G`（`3G` 跳第 3 行）、`Ctrl+d/u` 半页、`Ctrl+f/b` 整页

### 编辑

| 按键 | 作用 |
| --- | --- |
| `x` | 删除光标处字符 |
| `r` / `~` | 替换光标处字符 / 切换大小写（支持计数） |
| `J` | 合并下一行（`3J` 合并三行） |
| `dd` / `yy` / `cc` | 删除 / 复制 / 改写整行（支持 `3dd`） |
| `D` / `C` / `Y` | 删除至行尾 / 改写至行尾 / 复制整行 |
| `dw` `de` `d$` 等 | 操作符 + 移动（`y`、`c` 同理；`cw` 同 vim 不吃尾随空格） |
| `diw` `ci"` `ya(` 等 | 文本对象：`i`/`a` + `w` `"` `'` `` ` `` `(` `[` `{`，配 `d/c/y` 或可视模式 |
| `p` / `P` | 在后 / 前粘贴 |
| `u` / `Ctrl+r` | 撤销 / 重做 |

### 命令与搜索

| 命令 | 作用 |
| --- | --- |
| `:w` `:w 文件名` | 保存 |
| `:q` `:q!` `:wq` `:x` | 退出（有未保存修改时 `:q` 会拒绝） |
| `/文本` 然后 `n` / `N` | 搜索 / 下一个 / 上一个 |

## 项目结构

```
src/easymd/
  cli.py     # 命令行入口
  app.py     # 分屏布局、状态栏、命令行、预览同步
  editor.py  # vim 模态层（TextArea 子类）
tests/       # pytest 套件（Textual Pilot 无头驱动真实按键）
```

运行测试：`uv run pytest`
