Cursor Tab - самый частый вид взаимодействия с моделью и одновременно самый недооценённый по риску. Он предлагает не одну строку, а многострочные изменения, переходы внутри файла и продолжения, затрагивающие другой файл. Tab принимает предложение, Esc или продолжение набора отклоняет его, а отдельное сочетание принимает только следующее слово. После принятия редактор может предложить перейти к следующей точке изменения - и именно здесь начинается разница между работой и инерцией: переход задаёт следующий шаг за вас, а вы соглашаетесь с ним тем же жестом, каким согласились с предыдущим.
Наивное отношение к Tab простое: это же автодополнение, привык нажимать - нажимай. На коротких очевидных продолжениях так и есть, цена ошибки близка к нулю. Но тот же жест принимает и блок в двадцать строк, который меняет обработку ошибок или контракт функции. Рука уже научилась нажимать, а глаз ещё не прочитал - и в коде появляется правка, которую никто не рассматривал. Одинаковая клавиша для действий разной цены и есть главная особенность инструмента: она экономит движения и ровно поэтому стирает границу между мелким и крупным решением.
Ломается это на несоответствии стоимости проверки и размера предложения. Пока предложение локально и синтаксически очевидно, проверка занимает долю секунды. Как только предложение уходит в бизнес-логику, безопасность или миграции данных, цена непрочитанного растёт скачком: ошибка в такой правке обнаруживается не компилятором, а пользователем. Разница здесь не в объёме кода, а в том, кто и когда заметит ошибку. Поэтому правило простое - чем дальше предложение от локального синтаксиса, тем ближе его проверка должна быть к полноценному ревью.
Полезно один раз свести ситуации и действия в таблицу: что делать с очевидным продолжением, с большим блоком, с неверной идеей, когда нужно только одно слово и когда предложение уводит в другой файл. К ней возвращаются, пока рефлекс не устоялся: важно натренировать не скорость нажатия, а привычку сначала прочитать, а потом принять.
| Ситуация | Действие | Почему |
|---|---|---|
| Очевидное продолжение строки | Принять | Минимальная цена проверки |
| Большой многострочный блок | Сначала прочитать предложение целиком |
| Оно может менять контракт или обработку ошибок |
| Не та идея | Esc или продолжить набор | Не приучать себя принимать из инерции |
|---|
| Нужно только одно слово | Принять следующее слово | Контроль над формулировкой остаётся у вас |
|---|
| Переход в другой файл | Посмотреть, куда ведёт и что вокруг | Продолжение расширяет область diff |
|---|
У Tab есть граница применимости, и её стоит проговорить. Tab работает по тому, что уже написано, - он продолжает форму, а не выполняет намерение. Пока намерение читается из кода вокруг, это удобно и быстро. Как только задача требует решения, которого в тексте ещё нет, - выбрать подход, затронуть несколько мест согласованно, поменять поведение, - подсказки начинают предлагать правдоподобное продолжение вместо нужного. Признак момента, когда пора переставать нажимать и сформулировать задачу словами, простой: вы третий раз подряд отклоняете предложение, потому что оно не про то.
Особая осторожность - к переходам между файлами. Продолжение в соседнем файле выглядит так же, как продолжение в текущем, но расширяет область diff туда, где вы сейчас не смотрите. Перед принятием стоит убедиться, что вы понимаете, куда именно ведёт переход и что там вокруг: иначе изменение расползается по дереву незаметно для автора.
Есть и обратная сторона, о которой говорят реже. Отклонять предложение - это не отказ от инструмента, а часть работы с ним. Продолжение набора отклоняет подсказку так же надёжно, как Esc, и не требует лишних движений. Приём принимать только следующее слово особенно полезен, когда идея верная, а формулировка ваша: вы забираете полезное, не отдавая контроль над остальной строкой.
В реальной работе о принятом лишнем узнают по diff, а не по ощущению. После сессии с активными подсказками полезно посмотреть изменения по файлам, а не по последнему экрану редактора: именно там становится видно, что правка задела соседний файл, что вместе с нужной строкой приехал обработчик ошибки, которого вы не писали, или что переименование прошло дальше, чем вы думали. Признак узнаваемый - в diff есть строки, которые вы не помните. Их не оправдывают тем, что код выглядит разумно: непрочитанная правка остаётся непрочитанной, даже если она правильная.
Инженерный вывод касается не столько Tab, сколько привычки. Инструмент, который угадывает намерение в девяти случаях из десяти, приучает не проверять десятый - и именно он обходится дороже всех девяти сэкономленных секунд. Дисциплина здесь дешёвая: читать ghost text целиком, если он больше строки, и не принимать из инерции. В местах, где каждая правка требует ревью, подсказки проще выключить, чем каждый раз бороться с собственным рефлексом.
Типичные провалы работы с Tab предсказуемы. Принять многострочный блок, не прочитав его, и получить изменение контракта или обработки ошибок. Согласиться на продолжение в другом файле, не посмотрев, что там вокруг. Держать подсказки включёнными в местах, где каждая правка требует ревью. И приучить себя нажимать Tab автоматически - тогда инструмент из помощника превращается в источник правок, которых никто не рассматривал.