Skip to content

Review (RU)

Baidak.D edited this page Jul 11, 2026 · 2 revisions

English · Русский

Kitten для kitty: двухпанельный оверлей для ревью незакоммиченных правок git. Слева — дерево изменённых файлов, справа — unified diff с подсветкой синтаксиса, вживую при навигации.

В дереве видны все виды изменений разом — staged, modified, renamed и неотслеживаемые файлы — со статистикой +/− по каждому; в диффе ярче подсвечены именно изменившиеся слова строки (word-diff):

review — дифф всего файла с подсветкой синтаксиса

a переключает вид — весь файл целиком или только изменённые hunk'и, где неизменный контекст свёрнут в разделители (клик раскрывает скрытые строки):

review — режим только hunk'ов

Плюс третий вид (v) — финальный код, как в IDE: файл целиком без знаков +/ и без удалённых строк; правки видны маркером на полях.

Что умеет

  • Показывает незакоммиченные правки рабочего дерева (vs HEAD), включая untracked.
  • Слева — дерево файлов (папки синим, файлы со статусом M/A/D/R цветом).
  • Справа — unified diff выделенного файла: добавления зелёным +, удаления красным , контекст с подсветкой синтаксиса уровня IDE (Pygments): функции, типы, self, декораторы, докстринги, f-строки — по расширению файла. Обновляется сразу при переходе.
  • Word-diff: в паре удалённая/добавленная строка ярче подсвечиваются именно изменившиеся слова, а не вся строка.
  • Go to definition — ⌥-клик по символу в диффе (или выделить слово и нажать d) — прыжок к месту определения, не выходя из оверлея — см. Go to definition.
  • Два режима просмотра (a): только hunk'и (изменения с контекстом) либо весь файл целиком развёрнутым, с пометками изменений inline.
  • Финальный код (v) — вид как в IDE: читаешь код таким, каким он станет после мержа. Ни +/, ни удалённых строк, ни заливки внутри строк — только маркер на полях ( зелёный — добавлено, синий — изменено, красный — здесь что-то вырезано). Что именно поменялось в строке, показывает unified-вид. Прыжки, комментарии, копирование и поиск работают как в диффе, курсор при переключении остаётся на той же строке.
  • Карта изменений на полосе прокрутки справа от диффа — цветные риски показывают, где по файлу правки (зелёная — добавлено, синяя — изменено, красная — удалено), видно, куда листать.
  • Прыжки между изменениями ([ / ]) — по блокам правок внутри диффа (в обоих режимах).
  • Статистика строк на файл в дереве (+добавлено −удалено), как в IDE/GitHub.
  • Unversioned Files — неотслеживаемые файлы собраны в отдельную группу внизу дерева, свёрнутую по умолчанию: куча новых файлов не хоронит правки, ради которых открыли ревью.
  • git add из дерева (+) — добавить в индекс файл под курсором, целую папку или все неотслеживаемые разом (+ на узле группы).
  • Откат правок (-) — вернуть файл/папку под курсором к HEAD (и рабочее дерево, и индекс). Сначала спрашивает подтверждение: срабатывает только y. Неотслеживаемые файлы откатывать не к чему, поэтому они удаляются — в вопросе это сказано прямо.
  • Sticky-заголовок: при скролле сверху закреплена объемлющая функция/класс.
  • Горизонтальный скролл длинных строк (h / l).
  • Полосы прокрутки в обеих панелях; колесо мыши скроллит ту панель, над которой курсор, не двигая выделение.
  • Аннотации → markdown — комментируешь строки прямо в диффе (многострочно: Shift+Enter), по w все замечания собираются в markdown, копируются в буфер обмена и очищаются, чтобы скормить их обратно Claude («вот замечания, поправь»). Замыкает цикл ревью → правка.
  • Refresh (r) — пересканировать изменения, не переоткрывая оверлей (удобно, пока Claude ещё правит файлы).
  • Open in editor (e) — открыть текущий файл на видимой строке. Редактор выбирается по конфигам проекта: .idea/ → JetBrains (PhpStorm/IDEA/PyCharm/…), .vscode/ → VS Code, .cursor/ → Cursor, .zed/ → Zed — открывается весь проект с фокусом на строке, оверлей при этом остаётся открытым. Если конфигов нет — $VISUAL/$EDITOR, иначе vim в новом табе (в этом случае оверлей закрывается — терминальному редактору нужен терминал).
  • Поиск по диффу (/, переходы n / N) с подсветкой совпадений.
  • Фильтр дерева по имени файла (f), русская раскладка шорткатов.

Папка проекта и git-корень определяются по cwd окна, из которого нажат хоткей.

Go to definition

⌥-клик по символу в диффе — или выделить слово и нажать d — прыжок к месту, где символ определён. Прыжок происходит внутри просмотрщика, со стеком возврата (⌃o — назад): определение в изменённом файле открывает его дифф, определение в неизменённом — просмотр read-only. Если определений несколько — пикер со списком (19 или клик).

review — go to definition: прыжок в неизменённый файл

Разрешение учитывает контекст: obj.name предпочитает методы, name( — объявления, а импортированные имена резолвятся в конкретный файл по импортам текущего (Python from a.b import x / относительные ./..; JS/TS import/require с подбором расширения и index; PHP use через composer PSR-4; символы Go-пакетов через go.mod). Всё остальное ищется repo-wide через git grep, включая новые untracked-файлы — без индекса и language server.

⌘-клик невозможен: терминальный протокол мыши несёт только Shift/Alt/Ctrl, но не Cmd, поэтому триггер — ⌥-клик. Пока зажат ⌥, курсор над идентификаторами, по которым можно прыгнуть, превращается в руку.

Подключение

familiar enable review

Перезагрузить конфиг: Cmd+Ctrl+, (или перезапустить kitty). Открыть: cmd+shift+r.

Минимальный fallback — ручной map в ~/.config/kitty/kitty.conf (или include-файле):

map cmd+shift+r kitten /path/to/familiar/plugins/review.py

В отличие от familiar enable, голый map лишён toggle-закрытия, защиты от повторного открытия оверлея поверх самого себя, кириллических дублей клавиш и проброса cmd+c / cmd+shift+c для копирования внутри оверлея.

Клавиши

Два фокуса: дерево (слева, навигация по файлам) и дифф (справа, курсор по строкам для аннотаций). Переключение — Tab или стрелки (дерево) / (дифф).

Мышь: клик по файлу в дереве — выбрать; клик по папке — выбрать, повторный — свернуть/развернуть; клик по строке диффа — поставить курсор, двойной клик по слову — выделить именно его (для копирования), двойной клик — открыть комментарий; клик по номеру строки — комментарий к ней; ⌥-клик по символу — к его определению; клик по разделителю — раскрыть скрытые строки. (Пока включён захват мыши, выделение текста для копирования — с зажатым Shift.)

Фокус дерева

Клавиша Действие
↑/↓ навигация по файлам (дифф справа обновляется)
g / G первый / последний файл
Enter Space свернуть/развернуть папку
Tab перейти в дифф (курсор по строкам)
+ git add файла / папки / всех Unversioned Files под курсором
- откатить правки к HEAD (новые файлы удаляются); подтверждение — y
r пересканировать изменения (refresh)
u показать/скрыть «шумные» папки (.idea, node_modules, __pycache__, …)
f фильтр дерева по имени файла
q Esc выход

Фокус диффа (/Tab из дерева; /Tab/Esc — назад в дерево)

Клавиша Действие
↑/↓ курсор по строкам диффа
g / G к началу / концу диффа
Enter на разделителе — раскрыть скрытые строки контекста
Enter / c комментарий к строке под курсором (пустой — удалить один)
{ / } прыжок к предыдущей / следующей аннотации ()
w собрать все комментарии в markdown, скопировать в буфер и очистить
x удалить все комментарии
[ / ] предыдущее / следующее изменение
d к определению выделенного слова (также ⌥-клик по символу)
⌃o назад после прыжка go to definition

Во время ввода (комментарий / фильтр / поиск)

Клавиша Действие
Enter сохранить (в комментарии: пустой текст — удалить его)
Shift+Enter перенос строки — комментарии многострочные, текст переносится по словам
Ctrl+W стереть слово перед курсором
Ctrl+U стереть весь текст
Esc отмена

Общие (в обоих фокусах)

Клавиша Действие
PgUp PgDn скролл диффа (также Ctrl+U / Ctrl+D)
h / l горизонтальный скролл диффа (длинные строки)
a режим просмотра: только hunk'и ↔ весь файл целиком
v вид панели: unified diff ↔ финальный код (как в IDE)
/ n/N поиск по диффу и переходы по совпадениям
⌘c скопировать: в дереве — @путь файла/папки, в диффе — выделение / строку под курсором
⌘shift+c скопировать @путь#L42 (в дереве — @путь)
e открыть файл в IDE проекта (.idea/.vscode/.cursor/.zed) или $EDITOR

Статусы файлов (цвет как в IDE): A added — зелёный, M modified — синий, D deleted — красный, R renamed — голубой, ? untracked (новый, ещё не в git) — красный (файл показывается, но помечен как не добавленный в git).

Неотслеживаемые файлы собраны в группу Unversioned Files внизу дерева, свёрнутую по умолчанию. + на узле группы добавляет в индекс сразу все; + на файле или папке — только их. Подсказка + stage показывается, лишь когда есть что добавлять: у уже добавленного файла её нет.

- делает обратное: файл возвращается к версии из HEAD — и на диске, и в индексе, — а неотслеживаемый файл удаляется с диска безвозвратно, копии в git у него нет. Ничего не произойдёт, пока не нажмёшь y; Enter, Esc и любая другая клавиша отменяют.

«Шумные» IDE-папки (.idea, .vscode, node_modules, __pycache__, dist, venv, и т.п.) скрыты по умолчанию — как в IDE; u их показывает (и сообщает, сколько их). Пока они скрыты, + их не добавляет.

Работа с Claude Code

Замечания обратно в Claude

  1. Tab — перейти в дифф, ↑/↓ — встать на строку.

  2. Enter или c — написать замечание (рядом со строкой появится ). Shift+Enter — перенос строки; текст переносится по словам, Ctrl+W / Ctrl+U стирают слово / всё.

  3. Пройтись по всем местам, в разных файлах.

  4. w — все замечания собираются в markdown, копируются в буфер и очищаются из диффа:

    # Review comments
    
    ## app/Http/Controllers/UserController.php
    - **L42** `return $user->save();`
      нет проверки прав, добавь authorize()
  5. Вставить (Cmd+V) в чат Claude: «вот замечания по ревью, поправь».

Пути и строки

Помимо сбора замечаний, дифф даёт быстрый способ сослать Claude Code на конкретное место в коде. Обе клавиши кладут в буфер @-упоминание с путём от корня репозитория — в том виде, какого ждёт Claude Code:

  • ⌘c@путь/до/файла.py выбранного файла или @путь/до/папки/ (в фокусе дерева); в диффе — выделение / строку под курсором как код.
  • ⌘shift+c@путь/до/файла.py#L42, а при выделении диапазона мышью — @путь/до/файла.py#L42-58.

Claude Code разрешает @путь относительно директории, из которой запущен, — то есть это работает, когда claude запущен из корня проекта. Встал на строку в диффе → ⌘shift+cCmd+V в промт: не нужно пересказывать словами «в файле таком-то, где-то возле функции такой-то».

Что с чем сравнивается

Список файлов — git status (плюс untracked); дифф каждого файла — версия из HEAD («до») против файла на диске («после»). Отвечает на вопрос «что я наменял с последнего коммита».

Для untracked-файлов и репозитория без коммитов «до» — пусто: весь файл показывается как добавленный.

Clone this wiki locally