推送到各平台需先装并登录对应 CLI,如 GitHub 需 gh、GitLab 需 glab、Gitea 需 tea、Bitbucket 需 bkt;Azure DevOps 和 Gerrit 需在本地仓库克隆内运行,因为 diff 靠 git diff 构建;Bitbucket 不支持 Request changes 和 Draft,且不记录批准覆盖的提交,重开 PR 时不会预选提交
curl -fsSL tuicr.dev/install.sh | shREADME 未说明
终端里的代码审查 TUI,带 vim 键位,能把行内评论直接推回 GitHub 等平台
在终端里用 Vim 键位做代码审查的 TUI 工具,省去在浏览器和编辑器之间来回切换,适合习惯键盘操作的开发者。
核心能力
- 用 GitHub 风格连续 diff 在终端滚动查看全部改动文件
- 支持行、范围、文件、评审四级 PR 式评论
- 按文件或 hunk 记录已审状态并跨会话持久化
- 评论可推送到 GitHub、GitLab、Gitea、Bitbucket、Azure DevOps、Gerrit
- 支持 git、jj、mercurial,可审未提交改动、提交区间或远端 PR
容易踩的坑
- v0.28.0最新正式版2026-10-26 · 2026-10-26 08:14 UTC
What's Changed
- feat(cli): open at a source line with --line by @martintrojer in https://github.com/agavra/tuicr/pull/755
- fix(search): use regexes for diff search by @w3lld1 in https://github.com/agavra/tuicr/pull/752
- feat(ui): toggle relative line numbers with n by @kgni in https://github.com/agavra/tuicr/pull/747
- fix(comments): support vertical cursor movement by @chrishenzie in https://github.com/agavra/tuicr/pull/744
- fix: resolve nested GitLab group owners as the full namespace by @joshvito in https://github.com/agavra/tuicr/pull/656
- fix: keep the comment input on screen at EOF when lines wrap by @davinkevin in https://github.com/agavra/tuicr/pull/605
- fix(forge): resolve PR diff bases to the merge base by @ronen-hoffer in https://github.com/agavra/tuicr/pull/756
- perf: syntax highlight diff lines as they scroll into view by @arjansingh in https://github.com/agavra/tuicr/pull/712
- fix(watch): keep a -r range in the commit pane on watch ticks by @embano1 in https://github.com/agavra/tuicr/pull/757
- comments: ask about the comment the annotation points at by @thiblahute in https://github.com/agavra/tuicr/pull/758
- feat(ui): align wrapped diff content after the gutter by @ferdinandyb in https://github.com/agavra/tuicr/pull/760
- feat(selector): delete and unhide saved reviews from the Sessions tab by @martintrojer in https://github.com/agavra/tuicr/pull/679
- fix(ignore): honor nested .gitignore files like git does by @MrCliff in https://github.com/agavra/tuicr/pull/763
- fix(cli): keep an emptied session that a running tuicr has open by @martintrojer in https://github.com/agavra/tuicr/pull/773
- fix(pr): carry the review forward when a PR is reopened at a new head by @MrCliff in https://github.com/agavra/tuicr/pull/762
- fix(ignore): don't follow a symlinked .gitignore, as git doesn't by @MrCliff in https://github.com/agavra/tuicr/pull/774
- fix(terminal): bound the keyboard enhancement probe so startup cannot hang by @itsmunzir in https://github.com/agavra/tuicr/pull/779
- fix(gitlab): accept null MR description by @sean-david-welch in https://github.com/agavra/tuicr/pull/789
- fix(theme): keep local themes usable with linked or missing syntax themes by @SomSamantray in https://github.com/agavra/tuicr/pull/768
- feat(ui): show the cursor line's own number with relative numbering by @itsmunzir in https://github.com/agavra/tuicr/pull/780
- fix(ui): map selection and wrapping by display cells, not chars by @itsmunzir in https://github.com/agavra/tuicr/pull/776
- feat(config): add mouse_scroll_lines to set lines per wheel tick by @itsmunzir in https://github.com/agavra/tuicr/pull/798
- fix(file): isolate single-file review sessions by @MattKotsenas in https://github.com/agavra/tuicr/pull/775
- feat: add an independent selection marker theme color by @ronen-hoffer in https://github.com/agavra/tuicr/pull/777
- perf(github): fetch independent PR data concurrently on open by @itsmunzir in https://github.com/agavra/tuicr/pull/797
- fix(azure): cap error details by characters so non-ASCII bodies don't panic by @MaxFreedomPollard in https://github.com/agavra/tuicr/pull/805
- feat(ui): add Ctrl-l to clear and redraw the whole screen by @itsmunzir in https://github.com/agavra/tuicr/pull/806
- fix(ui): stop j/k at the file's edges when the terminal can't report key releases by @itsmunzir in https://github.com/agavra/tuicr/pull/800
- fix(jj): diff a merge commit against its merged parents by @liziye627-design in https://github.com/agavra/tuicr/pull/807
- release: v0.28.0 by @github-actions[bot] in https://github.com/agavra/tuicr/pull/809
New Contributors
- @w3lld1 made their first contribution in https://github.com/agavra/tuicr/pull/752
- @kgni made their first contribution in https://github.com/agavra/tuicr/pull/747
- @chrishenzie made their first contribution in https://github.com/agavra/tuicr/pull/744
- @embano1 made their first contribution in https://github.com/agavra/tuicr/pull/757
- @MrCliff made thei
- v0.27.02026-09-23 · 2026-09-23 19:06 UTC
查看更新说明
What's Changed
- fix(editor): open the PR revision with 'e', not the worktree copy by @joshvito in https://github.com/agavra/tuicr/pull/627
- feat(config): add pr_comments_visibility option by @atirna in https://github.com/agavra/tuicr/pull/730
- docs: reserve README config entries for critical options by @agavra in https://github.com/agavra/tuicr/pull/731
- feat: add automatic per-extension whitespace comparison by @mvanhorn in https://github.com/agavra/tuicr/pull/729
- fix(forge): detect remotes in reftable and SHA-256 checkouts by @hydraxman in https://github.com/agavra/tuicr/pull/725
- Add review delete, clearc, and clear commands by @jakubrpawlowski in https://github.com/agavra/tuicr/pull/701
- fix(diff): show the commit message for a commit picked from the list by @arjansingh in https://github.com/agavra/tuicr/pull/727
- perf(syntax): cap Oniguruma's backtracking budget by @arjansingh in https://github.com/agavra/tuicr/pull/726
- fix(editor): re-attach editor stdio to /dev/tty in --stdout mode by @nick4eva in https://github.com/agavra/tuicr/pull/740
- fix(navigation): target rendered hunk headers by @hydraxman in https://github.com/agavra/tuicr/pull/737
- skill: put the tmux review pane where its caller is by @nick4eva in https://github.com/agavra/tuicr/pull/736
- fix(comments): copy all remote comment types at cursor by @goiaciprian in https://github.com/agavra/tuicr/pull/733
- feat: Add runtime theme picker with :theme command by @wakuflair in https://github.com/agavra/tuicr/pull/732
- release: v0.27.0 by @github-actions[bot] in https://github.com/agavra/tuicr/pull/742
New Contributors
- @jakubrpawlowski made their first contribution in https://github.com/agavra/tuicr/pull/701
- @goiaciprian made their first contribution in https://github.com/agavra/tuicr/pull/733
- @wakuflair made their first contribution in https://github.com/agavra/tuicr/pull/732
Full Changelog: https://github.com/agavra/tuicr/compare/v0.26.0...v0.27.0
- v0.26.02026-09-15 · 2026-09-15 23:54 UTC
查看更新说明
What's Changed
- fix(forge): use the comment type label in the submit prefix by @barspielberg in https://github.com/agavra/tuicr/pull/611
- diff: drop the frame and fold the header when the diff is the sole pane by @thiblahute in https://github.com/agavra/tuicr/pull/666
- Add export.session_header to drop the session slug by @nfvelten in https://github.com/agavra/tuicr/pull/676
- feat(config): add editor key to override $EDITOR for e/:edit by @yuhua99 in https://github.com/agavra/tuicr/pull/677
- fix: avoid keyboard probe for piped stdin by @atirna in https://github.com/agavra/tuicr/pull/678
- docs(skill): guide agents through seeding comments correctly by @martintrojer in https://github.com/agavra/tuicr/pull/680
- fix(cli): warn when review add --type is not a configured type by @martintrojer in https://github.com/agavra/tuicr/pull/682
- fix: stage deleted files with libgit2 by @mvanhorn in https://github.com/agavra/tuicr/pull/684
- Print a review-exit summary line to stderr by @joshgummersall in https://github.com/agavra/tuicr/pull/685
- fix(forge): return GitLab MR commits oldest-first by @atirna in https://github.com/agavra/tuicr/pull/691
- fix: scroll side-by-side diffs horizontally by @dkarter in https://github.com/agavra/tuicr/pull/693
- fix(input): type AltGr characters in the command, search and filter prompts by @MaxFreedomPollard in https://github.com/agavra/tuicr/pull/694
- Add q_quits config option by @nfvelten in https://github.com/agavra/tuicr/pull/688
- fix(cli): include comment author in review output by @MattKotsenas in https://github.com/agavra/tuicr/pull/690
- feat(forge): add Gitea pull request review support by @ghaith in https://github.com/agavra/tuicr/pull/652
- feat(gerrit): add Gerrit Code Review as a supported forge by @anicke in https://github.com/agavra/tuicr/pull/692
- docs: add a CLI reference and correct stale forge claims by @joshvito in https://github.com/agavra/tuicr/pull/705
- docs(skill): correct review comment author guidance by @MattKotsenas in https://github.com/agavra/tuicr/pull/706
- fix: persist reload reconciliation by @MattKotsenas in https://github.com/agavra/tuicr/pull/704
- feat: add opt-in compact folders to the file tree by @Jonathanm10 in https://github.com/agavra/tuicr/pull/698
- skill: put the zellij review pane where its caller is by @thiblahute in https://github.com/agavra/tuicr/pull/687
- feat(pr): add named remote selection by @JamesC1305 in https://github.com/agavra/tuicr/pull/715
- fix(git): open SHA-256 repositories with the CLI backend by @hydraxman in https://github.com/agavra/tuicr/pull/716
- release: v0.26.0 by @github-actions[bot] in https://github.com/agavra/tuicr/pull/717
New Contributors
- @barspielberg made their first contribution in https://github.com/agavra/tuicr/pull/611
- @dkarter made their first contribution in https://github.com/agavra/tuicr/pull/693
- @MaxFreedomPollard made their first contribution in https://github.com/agavra/tuicr/pull/694
- @MattKotsenas made their first contribution in https://github.com/agavra/tuicr/pull/690
- @ghaith made their first contribution in https://github.com/agavra/tuicr/pull/652
- @anicke made their first contribution in https://github.com/agavra/tuicr/pull/692
- @Jonathanm10 made their first contribution in https://github.com/agavra/tuicr/pull/698
- @JamesC1305 made their first contribution in https://github.com/agavra/tuicr/pull/715
Full Changelog: https://github.com/agavra/tuicr/compare/v0.25.0...v0.26.0
- v0.25.02026-09-02 · 2026-09-02 17:33 UTC
查看更新说明
What's Changed
- feat(config): add confirm_quit to gate the bare q quit by @aeslaughter in https://github.com/agavra/tuicr/pull/630
- side-by-side: choose the comment side with ←/→, caret follows by @thiblahute in https://github.com/agavra/tuicr/pull/634
- fix(ui): render a visible stand-in for whitespace leader keys in help by @OddMagnet in https://github.com/agavra/tuicr/pull/646
- fix: Make commit branch columns responsive by @mvanhorn in https://github.com/agavra/tuicr/pull/651
- fix: update naersk lock for static.crates.io crate downloads by @riadloukili in https://github.com/agavra/tuicr/pull/661
- fix: resolve Azure DevOps remote owners as org/project by @joshvito in https://github.com/agavra/tuicr/pull/654
- fix: apply .tuicrignore before parsing PR diffs by @atirna in https://github.com/agavra/tuicr/pull/668
- feat(selector): add a Sessions tab to resume saved reviews by @martintrojer in https://github.com/agavra/tuicr/pull/669
- fix(pr): render Markdown in description panel by @atirna in https://github.com/agavra/tuicr/pull/671
- Fix Comment mode help alignment by @nfvelten in https://github.com/agavra/tuicr/pull/667
- fix(gitlab): open merge requests through API by @hydraxman in https://github.com/agavra/tuicr/pull/665
- Pass through scope args to all wrappers by @joshgummersall in https://github.com/agavra/tuicr/pull/662
- Pan the help popup with h/l by @nfvelten in https://github.com/agavra/tuicr/pull/673
- release: v0.25.0 by @github-actions[bot] in https://github.com/agavra/tuicr/pull/674
New Contributors
- @aeslaughter made their first contribution in https://github.com/agavra/tuicr/pull/630
- @OddMagnet made their first contribution in https://github.com/agavra/tuicr/pull/646
- @riadloukili made their first contribution in https://github.com/agavra/tuicr/pull/661
- @atirna made their first contribution in https://github.com/agavra/tuicr/pull/668
- @nfvelten made their first contribution in https://github.com/agavra/tuicr/pull/667
- @hydraxman made their first contribution in https://github.com/agavra/tuicr/pull/665
- @joshgummersall made their first contribution in https://github.com/agavra/tuicr/pull/662
Full Changelog: https://github.com/agavra/tuicr/compare/v0.24.0...v0.25.0
- v0.24.02026-08-25 · 2026-08-25 17:33 UTC
查看更新说明
What's Changed
- diff view: hide the Review Comments section while it is empty by @thiblahute in https://github.com/agavra/tuicr/pull/559
- fix(tui): resume from an editor without querying the cursor by @r-vdp in https://github.com/agavra/tuicr/pull/648
- vcs/jj: use as_chunks to parse diff metadata by @samuelkarp in https://github.com/agavra/tuicr/pull/642
- Fix issues with reftable and bare repos in unit tests by @samuelkarp in https://github.com/agavra/tuicr/pull/643
- fix: detect self-hosted GitLab before resolving SSH host by @Hmouks in https://github.com/agavra/tuicr/pull/631
- comment_panel: adapt newline hint to terminal by @samuelkarp in https://github.com/agavra/tuicr/pull/641
- docs: add pacman installation by @tridimensionaal in https://github.com/agavra/tuicr/pull/635
- release: v0.24.0 by @github-actions[bot] in https://github.com/agavra/tuicr/pull/649
New Contributors
- @samuelkarp made their first contribution in https://github.com/agavra/tuicr/pull/642
- @Hmouks made their first contribution in https://github.com/agavra/tuicr/pull/631
- @tridimensionaal made their first contribution in https://github.com/agavra/tuicr/pull/635
Full Changelog: https://github.com/agavra/tuicr/compare/v0.23.1...v0.24.0
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
tuicr
A code review TUI with vim keybindings. Export to GitHub, GitLab, Gitea, Bitbucket, Azure DevOps, Gerrit, or clipboard.

[!TIP] Pronounced "tweaker".
What it does
- GitHub-style continuous diff in the terminal. Scroll through every changed file in one stream.
- PR-style comments at the line, range, file, and review level.
- Review tracking at file or hunk granularity, persisted across sessions.
- Three export targets: push a real review to GitHub, GitLab, Gitea, Bitbucket, Azure DevOps, or Gerrit, copy structured markdown to your clipboard, or pipe to stdout.
- Works with git, jj, and mercurial. Reviews uncommitted changes, commit ranges, or any GitHub PR, GitLab MR, Gitea PR, Bitbucket PR, Azure DevOps PR, or Gerrit change.
Install
curl -fsSL tuicr.dev/install.sh | sh
# or
brew install tuicr
# or
sudo pacman -S tuicr
# Cargo
cargo install tuicr
# Mise
mise use github:agavra/tuicr
# Nix
nix run github:agavra/tuicr
Pre-built binaries: GitHub Releases. Linux releases include dynamically linked GNU and static musl variants.
From source:
git clone https://github.com/agavra/tuicr.git
cd tuicr
cargo install --path .
Update the active installation with one command:
tuicr update
tuicr update 0.18.0 # Install a known-good version
tuicr update uses Homebrew, Cargo, Mise, or a Nix profile when that manager owns the
executable. Install-script and manually downloaded binaries update in place from the matching
GitHub release asset after SHA-256 verification. Exact-version installs support Cargo and direct
binaries; use the package manager's pinning workflow for Homebrew, Mise, or Nix. A nix run
invocation is temporary rather than installed; rerun it to use the current flake, or use
nix profile install github:agavra/tuicr for an installation that tuicr update can upgrade.
Quick start
tuicr # Pick from a commit selector
tuicr tui # Same TUI, explicit subcommand
tuicr -w # Uncommitted changes (skip selector)
tuicr -r main..HEAD # Commit range
tuicr --file f.md --line 42 # Annotate a file, starting at line 42
tuicr pr 125 # GitHub, Gitea, Bitbucket, or Azure DevOps PR, or Gerrit change
tuicr pr 125 --remote up # Use a named Git remote's fetch URL
tuicr mr 125 # GitLab MR
tuicr tui pr 125 # GitHub PR via explicit TUI subcommand
tuicr tui mr 125 # GitLab MR via explicit TUI subcommand
tuicr --stdout # Pipe the review to stdout
tuicr review list # List saved local review sessions
tuicr update # Update the active installation
tuicr update 0.18.0 # Install a known-good version
Every flag, environment variable, and exit code in docs/CLI.md.
The default Git backend detects renames using a 50% similarity threshold and honors
Git's diff.renames and diff.renameLimit settings. Working-tree reviews include
untracked destinations in rename detection, so a move can appear as R before staging.
Inside tuicr, navigate with j/k, press c to comment, then y to copy the review or
:submit to push it to GitHub, GitLab, Gitea, Bitbucket, Azure DevOps, or Gerrit. When reopening a
pull request you've reviewed before, tuicr preselects commits newer than your latest submitted
review when that metadata is available; commits already covered by that review are marked with
✓ in the inline selector.
(Bitbucket does not record which commit an approval covered, so that preselection does not apply
there.)
Use :summary during a review to show every pending local-draft comment. The summary replaces the
diff while leaving the file sidebar visible when it is open. The first
comment is selected when the view opens; use j/k to select the next or previous comment, and
the view scrolls automatically to keep it visible. Press Enter to jump to the selected comment
in the continuous diff, leaving single-file view if necessary, or Esc to return to the diff. If
its file or hunk is already marked reviewed, tuicr reveals the target without clearing that
reviewed state.
Press dd to delete the selected local draft, even if its original line or file is absent from
this diff. Return with Esc and use :w to save the deletion, as with diff-view deletion.
Auto-detects git, jj, or mercurial. SHA-256 Git repositories automatically use the Git CLI backend,
including when reviewing root commits; ordinary SHA-1 repositories still default to libgit2.
How it compares
| tuicr | hunk | lumen | gh pr review | git diff | |
|---|---|---|---|---|---|
| TUI diff viewer | ✅ | ✅ | ✅ | ❌ | ❌ |
| Write comments in the TUI | ✅ | ✅ | ✅ | ❌ | ❌ |
| Vim keybindings | ✅ | ❌ | partial¹ | ❌ | ❌ |
| Push inline review to GitHub | ✅ | ❌ | ❌ | partial² | ❌ |
| Push inline review to GitLab | ✅ | ❌ | ❌ | ❌ | ❌ |
| Push inline review to Gitea | ✅ | ❌ | ❌ | ❌ | ❌ |
| Push inline review to Bitbucket | ✅ | ❌ | ❌ | ❌ | ❌ |
| Push inline review to Azure DevOps | ✅ | ❌ | ❌ | ❌ | ❌ |
| Push inline review to Gerrit | ✅ | ❌ | ❌ | ❌ | ❌ |
| Agent-ready markdown export | ✅ | via CLI skill | ❌ | ❌ | ❌ |
| git | ✅ | ✅ | ✅ | ❌ | ✅ |
| jj | ✅ | ✅ | ✅ | ❌ | ❌ |
| Mercurial (hg) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Single static binary | ✅ | ✅ | ✅ | ✅ | ✅ |
¹ Lumen has j/k navigation but no broader vim model (visual mode, {N}G, Ctrl-d/Ctrl-u,
etc.).
² gh pr review posts approve/comment/request-changes at the review level only. No inline line
comments.
Export your review
When you're done reviewing, send your comments wherever the work continues.
To GitHub
:submit opens a picker for Comment, Approve, Request changes, or Draft. Inline comments land
on the right lines as a real PR review. Review-level comments become the review summary.
Requires gh authenticated to the repo.
To GitLab
:submit offers Comment, Approve, Request changes, or Draft on a GitLab MR. Inline comments post
as discussion notes, or as draft notes for Draft. Review-level comments become the summary.
Requires glab authenticated to the host. Request changes needs your account to be an assigned
reviewer. See docs/GITLAB.md for setup, self-hosted instances, and
troubleshooting.
To Gitea
:submit offers Comment, Approve, Request changes, or Draft on a Gitea pull request. Inline
comments post as review comments and review-level comments become the summary, all in one request.
Requires tea with a login for the instance (tea logins add).
Multi-line comments collapse to their last line — Gitea has no range form. See
docs/GITEA.md for setup, self-hosted detection, and limitations.
To Bitbucket
:submit offers Comment or Approve on a Bitbucket Cloud PR. Inline comments post as inline PR
comments, multi-line ranges included; review-level comments become general PR comments. Requires
bkt authenticated to bitbucket.org. Request changes and Draft are not supported yet, and
Bitbucket Data Center is out of scope. See docs/BITBUCKET.md for setup,
required token scopes, and troubleshooting.
To Azure DevOps
:submit offers Comment, Approve, or Request changes on an Azure DevOps PR. Inline comments post
as PR comment threads; Approve/Request changes also cast a reviewer vote. Auth is a Personal
Access Token in AZURE_DEVOPS_EXT_PAT (preferred — works with enterprise tenants), falling back
to az login via the Azure CLI. Run tuicr from a local clone of the repo — Azure exposes no
unified-diff API, so the diff is built with git diff base...head. See
docs/AZURE.md for setup, supported URL forms, and MVP limitations.
To Gerrit
:submit offers Comment, Approve, Request changes, or Draft on a Gerrit change. Inline comments
post as Gerrit comments (multi-line ranges included) and the review-level comment becomes the
change message; Approve votes Code-Review +2 and Request changes votes -1. Draft keeps
everything as Gerrit draft comments so you can publish from the web UI; tuicr keeps showing them,
marked draft. Auth is your Gerrit HTTP
password in GERRIT_USERNAME / GERRIT_PASSWORD. Run tuicr from a local clone — the diff is
built with git diff base..head after fetching the change's patch-set ref. See
docs/GERRIT.md for setup, detection of self-hosted hosts, and limitations.
To your coding agent
y or :clip copies a structured markdown block to your clipboard. Each comment has a number
and a file/line anchor:
I reviewed your code and have the following comments. Please address them.
1. `src/auth.rs` - Consider adding unit tests
2. `src/auth.rs:42` - Magic number should be a named constant
3. `src/auth.rs:50-55` - This block could be refactored
Paste it back to any coding agent (Claude, Codex, Cursor, etc).
For an agent-driven workflow where your agent opens tuicr in a cmux, Rex, tmux, Zellij, or Herdr split pane, see skills/tuicr/SKILL.md.
To stdout
Run with --stdout to pipe the markdown to another process:
tuicr --stdout > review.md
tuicr --stdout | pbcopy
Review session CLI
tuicr review exposes saved sessions without opening the TUI. It can list
sessions, add, delete, and clear comments, and print stored comments for
agent and script
integrations. See docs/REVIEW_CLI.md.
The TUI creates a persisted session file when a review target becomes active,
so collaborative tools can add comments immediately. Empty auto-created session
files are removed when the TUI exits. tuicr review list marks currently open
TUI sessions with "active": true.
Inside the TUI, the review target selector's Sessions tab lists the saved
reviews for the current checkout, so you can resume one by picking it instead of
retyping the commit range it was opened with. Open it with :sessions or cycle
to it with Tab. Press dd to delete the review under the cursor after a
confirmation prompt, and a to reveal reviews holding no comments and no
reviewed files, which are hidden by default.
Library API
tuicr also exposes a Rust library API for tools that want to build on top of its
persisted review sessions. ReviewStore can list sessions for a checkout, load a
session, and add review, file, line, or range comments using the same insertion
primitive as the TUI.
use tuicr::{AddCommentRequest, CommentTarget, CommentType, LineSide, ReviewStore};
let store = ReviewStore::new();
let sessions = store.list_sessions_for_repo("/path/to/repo")?;
let session = &sessions[0].session_ref;
store.add_comment(
session,
AddCommentRequest {
target: CommentTarget::Line {
path: "src/main.rs".into(),
line: 42,
side: LineSide::New,
},
content: "Handle the empty case here.".into(),
comment_type: CommentType::from_id("issue"),
},
)?;
Configuration
Path: ~/.config/tuicr/config.toml on Linux/macOS, %APPDATA%\tuicr\config.toml on Windows.
theme = "catppuccin-mocha"
diff_view = "side-by-side" # or "unified"
ignore_whitespace = false # ignore all whitespace in local VCS diffs
appearance = "system" # or "dark" / "light"
mouse = true
leader = ";" # configurable prefix for leader shortcuts
editor = "nvim" # editor for `e` / `:edit`; overrides $EDITOR
comment_vim = false # vim modal editing in the review comment box
relative_line_numbers = false # show rendered-row distances in the diff gutter
[[comment_types]]
id = "issue"
color = "red"
definition = "must fix before merge"
Bundled themes: dark, light, ayu-light, ayu-mirage, onedark, github-light,
github-dark, catppuccin-latte, catppuccin-frappe, catppuccin-macchiato,
catppuccin-mocha, everforest-dark, everforest-light, gruvbox-dark,
gruvbox-light, nord-dark, nord-light, nord-dark-high-contrast,
nord-light-high-contrast, solarized-light, solarized-dark, tokyo-night-storm,
tokyo-night-day.
Local themes: set theme = "my-theme" or run tuicr --theme my-theme, then create
~/.config/tuicr/themes/my-theme.toml on Linux/macOS or %APPDATA%\tuicr\themes\my-theme.toml
on Windows. Local themes may reference a local syntax_theme = "my-syntax.tmTheme" file for
syntax highlighting. A ready-to-copy example lives at examples/tuicr-teal.toml
with its matching examples/tuicr-teal-syntax.tmTheme syntax theme.
Full options, theme resolution precedence, comment_types semantics, and .tuicrignore rules in
docs/CONFIG.md.
Keybindings
A first-session cheatsheet. Press ? inside tuicr for the full reference.
| Key | Action |
|---|---|
j / k | Down / up |
Ctrl-d / Ctrl-u | Half-page down / up |
g / G | Top / bottom |
{ / } | Previous / next file |
[ / ] | Previous / next hunk |
m / M | Next / previous comment |
/ | Search the diff by case-insensitive regex, or search the file tree/help by text — whichever is focused/open |
n / N | Next / previous search match (wraps); matches stay highlighted — Esc clears |
i / e (file tree) | Filter files in / out by regex; narrows the tree and the diff |
I / E (file tree) | Clear the include / exclude filter |
c / C | Add line / file comment |
v / V | Visual mode (range comment) |
s (visual mode) | Suggest changes to the selected code lines |
r | Toggle file reviewed |
R | Toggle hunk reviewed |
e | Open focused file in $EDITOR (in PR review: the PR's revision, as a read-only copy when the checkout differs) |
y | Copy review to clipboard |
:edit | Open focused file in $EDITOR |
:submit | Push review to GitHub, GitLab, Gitea, Bitbucket, Azure DevOps, or Gerrit |
:theme | Open a live-preview theme picker (/ to filter); :theme <name> applies directly. Session-only; set theme in config.toml to keep it |
Tab in : prompt | Complete or cycle commands |
Ctrl-l | Redraw the whole screen |
? | Toggle full help |
While composing a comment in the default editor, ↑ / ↓ move one displayed row,
including wrapped rows, preserving the column where possible.
Full reference in docs/KEYBINDINGS.md.
Sponsors
Thanks to the folks below for keeping tuicr development going, it means a lot to have the work I'm doing here appreciated!
License
MIT licensed. Contribution notes in CONTRIBUTING.md.