Модуль 2.5 · Урок 2
Урок 2: Базовая работа в Cursor
Содержание
- Чему вы научитесь
- Четыре основных инструмента Cursor
- 1. Tab Completion — автодополнение на стероидах
- 2. Inline Edit (Cmd+K) — редактирование выбранного кода
- 3. Chat (Cmd+L) — диалог с AI о коде
- 4. Agent (Cmd+I) — мультифайловые изменения
- Горячие клавиши Cursor
- Пример: полный workflow рефакторинга
- Вариант 1: Inline Edit (быстро)
- Вариант 2: Agent (если нужны новые файлы)
- Режимы Agent и Cloud Agents
- Ключевые выводы
- Следующий урок
Чему вы научитесь
- Использовать Tab Completion для предсказательного автодополнения
- Применять Inline Edit (Cmd+K) для быстрого редактирования кода
- Вести диалог с AI через Chat (Cmd+L) с поддержкой контекста (@file)
- Запускать Agent (Cmd+I): режимы Agent / Plan / Ask; модель Composer 2.5 — отдельный выбор, не панель
Четыре основных инструмента Cursor
Cursor предоставляет четыре способа работы с AI. Давайте изучим каждый.
flowchart LR
A["Один символ?"] -->|да| B["Tab"]
A -->|нет| C["Фрагмент кода?"]
C -->|да| D["Ctrl+K"]
C -->|нет| E["Вопрос к AI?"]
E -->|да| F["Chat"]
E -->|нет| G["Много файлов?"]
G -->|да| H["Agent Cmd+I"]
1. Tab Completion — автодополнение на стероидах
Hotkey: просто начните печатать код
Что это? Когда вы пишете код, Cursor предсказывает следующие строки и показывает их серым текстом (ghost text). Нажмите Tab, чтобы принять.
Пример: функция для фильтрации товаров
Создайте файл products.js:
// Начните писать
function filterProducts(products, category) {
// Нажмите Enter, Cursor предложит:
// Предложение 1 (серый текст):
// return products.filter(p => p.category === category);
// Нажмите Tab, чтобы принять, или просто продолжайте писать, чтобы отклонить
}
Когда это полезно:
- Типовые рабочие функции (CRUD-операции)
- Тесты (быстрое создание test cases)
- Конфигурации (JSON, YAML с повторяющимися структурами)
Как отключить/включить:
- Используйте иконку Cursor Tab в статус-баре (правый нижний угол)
- Или Cmd+Shift+P → “Toggle Cursor Tab” / “Enable Cursor Tab”
Совет: чем лучше вы описали функцию (имя функции, параметры, комментарий), тем точнее предсказание.
2. Inline Edit (Cmd+K) — редактирование выбранного кода
Hotkey: Cmd+K (macOS) или Ctrl+K (Windows/Linux)
Что это? Выделяете код → описываете, что нужно изменить → AI применяет изменение.
Пример: рефакторинг React-компонента
Исходный код:
// UserCard.jsx
import React, { useState } from 'react';
export function UserCard({ user }) {
const [isOpen, setIsOpen] = useState(false);
return (
<div>
<h2>{user.name}</h2>
<p>{user.email}</p>
<button onClick={() => setIsOpen(!isOpen)}>
{isOpen ? 'Hide' : 'Show'} Details
</button>
{isOpen && (
<div>
<p>Phone: {user.phone}</p>
<p>Address: {user.address}</p>
</div>
)}
</div>
);
}
Шаг 1: выделите весь компонент (весь код внутри функции)
Шаг 2: нажмите Cmd+K, откроется окно инструкций
Шаг 3: напишите инструкцию:
Рефакторь компонент:
1. Вынеси детали в отдельный компонент UserDetails
2. Используй hooks для управления состоянием
3. Добавь пропсы для customization
Шаг 4: нажмите Enter
Результат: Cursor покажет новый код и спросит, согласны ли вы с изменениями.
Варианты действий:
- Accept — принять изменение
- Regenerate — попросить AI другой вариант
- Discard — отклонить
Ещё примеры инструкций для Inline Edit
// Пример 1: оптимизация производительности
"Оптимизируй эту функцию для работы с большими массивами (10000+ элементов).
Используй в 2-3 раза меньше памяти."
// Пример 2: добавь типизацию
"Добавь TypeScript типы для всех параметров и возвращаемых значений."
// Пример 3: преобразование стиля
"Переделай эту функцию из callback-стиля в async/await."
// Пример 4: добавь обработку ошибок
"Добавь try-catch блоки и валидацию input'ов."
// Пример 5: документация
"Добавь JSDoc комментарии для каждого параметра и возвращаемого значения."
3. Chat (Cmd+L) — диалог с AI о коде
Hotkey: Cmd+L (macOS) или Ctrl+L (Windows/Linux)
Что это? Боковая панель, где вы общаетесь с AI в natural language. AI может ссылаться на файлы проекта через @file.
Пример: обсуждение архитектуры
Откройте Chat (Cmd+L):
Ты: Помоги разработать архитектуру для приложения todos.
Нужны файлы:
- store.js (управление состоянием)
- components/ (React компоненты)
- api.js (запросы на сервер)
Какую структуру проекта ты рекомендуешь?
AI: Вот рекомендуемая структура...
[предлагает архитектуру]
Ты: А как организовать типы в TypeScript?
AI: [объясняет]
Ты: @store.js Посмотри на этот файл. Как я могу сделать его более масштабируемым?
AI: [анализирует store.js и даёт рекомендации]
Специальные команды в Chat
@file.js — упомянуть конкретный файл (AI читает содержимое)
@folder — включить всю папку в контекст
/web — поиск в интернете (зависит от плана и режима Agent)
/create — создать новый файл на основе обсуждения
Пример использования @file:
Ты: @UserCard.jsx Этот компонент работает медленно.
Почему и как это исправить?
AI: [читает UserCard.jsx, анализирует, предлагает решение]
4. Agent (Cmd+I) — мультифайловые изменения
Hotkey: Cmd+I (macOS) или Ctrl+I (Windows/Linux)
Что это? Панель Agent, не «Composer». Режимы:
- Agent — сам планирует и правит файлы
- Plan — сначала план, без правок, пока не согласитесь
- Ask — только вопросы по коду, без изменений
Composer 2.5 выбираете в списке моделей (рядом с Sonnet 5, Grok 4.6, GPT-5.6 Sol). Это модель, не окно.
Пример: создание нового feature
Сценарий: вам нужно добавить страницу “Settings” в React приложение.
Шаг 1: откройте Agent (Cmd+I), режим Agent или Plan
Шаг 2: напишите инструкцию:
Создай страницу Settings для React приложения:
1. Создай файл pages/Settings.jsx
- Форма для изменения имени пользователя
- Выбор темы (light/dark)
- Кнопка Save
2. Обнови router в App.jsx
- Добавь route /settings → Settings
3. Обнови navigation bar в Header.jsx
- Добавь ссылку на Settings
4. Создай hooks/useSettings.js
- Функция для загрузки и сохранения настроек
Используй React Hooks, не нужны сторонние библиотеки.
Шаг 3: нажмите Enter
Результат: Agent создаст все файлы и покажет превью каждого. Вы можете:
- Принять всё (Accept)
- Отредактировать отдельные файлы
- Попросить регенерировать (Regenerate)
- Отклонить (Discard)
Когда использовать Agent (Cmd+I)
Используйте Agent для:
- Создания нового feature (несколько файлов связаны)
- Глобального refactoring’а (переименование компонента везде)
- Миграции (обновление версии library)
- Автоматизации (создание boilerplate для 10+ компонентов)
Для «только обсудить» — режим Ask. Для «сначала план» — Plan.
Пример: рефакторинг всего проекта на TypeScript
Инструкция в Agent:
Мигрируй весь проект на TypeScript:
1. Переименуй все .jsx файлы на .tsx
2. Добавь типы для всех компонентов (используй interface для Props — рекомендуется вместо React.FC)
3. Создай файл types.d.ts с типами API
4. Обнови imports в App.jsx и других точках входа
5. Добавь tsconfig.json с правильными настройками
Используй:
- interface для Props типов (рекомендуется вместо React.FC)
- function-компоненты с явной типизацией
- async/await для API calls
Agent создаст все файлы и обновит зависимости.
Горячие клавиши Cursor
| Клавиши | Windows/Linux | macOS | Функция |
|---|---|---|---|
| Ctrl+K / Cmd+K | Ctrl+K | Cmd+K | Inline Edit |
| Ctrl+L / Cmd+L | Ctrl+L | Cmd+L | Chat |
| Ctrl+I / Cmd+I | Ctrl+I | Cmd+I | Agent (режимы Agent / Plan / Ask) |
| Ctrl+Shift+P | Ctrl+Shift+P | Cmd+Shift+P | Command Palette |
| Tab | Tab | Tab | Accept Tab Completion |
| Esc | Esc | Esc | Dismiss suggestion |
Пример: полный workflow рефакторинга
Исходный компонент:
// BadForm.jsx — плохо структурирован, без типов, медленный
function BadForm() {
const [data, setData] = useState({});
const [loading, setLoading] = useState(false);
const handleChange = (e) => {
setData({...data, [e.target.name]: e.target.value});
};
const handleSubmit = (e) => {
e.preventDefault();
setLoading(true);
fetch('/api/submit', {method: 'POST', body: JSON.stringify(data)})
.then(r => r.json())
.then(d => {console.log(d); setLoading(false);})
.catch(e => {console.log(e); setLoading(false);});
};
return (
<form onSubmit={handleSubmit}>
<input name="email" onChange={handleChange} />
<input name="password" onChange={handleChange} />
<button disabled={loading}>{loading ? 'Loading...' : 'Submit'}</button>
</form>
);
}
Как это рефакторить в Cursor:
Вариант 1: Inline Edit (быстро)
- Выделите функцию
- Нажмите Cmd+K
- Напишите:
Рефакторь компонент:
1. Добавь TypeScript типы
2. Используй useCallback для обработчиков
3. Отдели логику fetch'а в хук useFormSubmit
4. Добавь валидацию email
5. Улучши обработку ошибок с toast уведомлениями
Вариант 2: Agent (если нужны новые файлы)
- Нажмите Cmd+I
- Напишите:
Рефакторь форму с использованием хуков:
1. Создай hooks/useFormSubmit.ts
- Логика для submit'а
- Управление loading и error
- Валидация
2. Создай hooks/useFormData.ts
- Управление данными формы
- Методы для изменения полей
3. Переделай BadForm.jsx на Form.tsx
- Используй новые хуки
- Добавь TypeScript типы
- Импортируй hooks
4. Обнови App.jsx
- Импортируй Form из Form.tsx
Результат: Agent создаст все файлы, правильно организует код, добавит типы.
Режимы Agent и Cloud Agents
Режим Agent (Cmd+I → Agent) даёт автономию: файлы, терминал, зависимости. Plan — сначала план. Ask — без правок.
Cloud Agents — официальное имя облачных фоновых агентов (не «Background Agents» в новых доках).
Тот же агент из терминала:
curl https://cursor.com/install -fsS | bash
agent
Пример:
Ты: Создай новый Next.js проект, добавь страницу /todos, установи Tailwind
и запусти dev сервер.
AI (режим Agent):
1. Запускает: npx create-next-app todos
2. Устанавливает: npm install -D tailwindcss
3. Создаёт: pages/todos.jsx
4. Запускает: npm run dev
5. Показывает: "Проект запущен на localhost:3000"
Будьте осторожны: режим Agent может запускать опасные команды. Смотрите план и дифф.
Ключевые выводы
- Tab Completion предсказывает следующие строки — Tab, чтобы принять
- Inline Edit (Cmd+K) меняет выбранный код по описанию
- Chat (Cmd+L) — диалог,
@fileдля контекста - Agent (Cmd+I) — мультифайл; режимы Agent / Plan / Ask
- Composer 2.5 — модель на витрине, не панель
- Комбинируйте: Tab для мелочей, Cmd+K для блока, Chat для архитектуры, Agent для пачки файлов
Следующий урок
В Уроке 3: .cursorrules научимся создавать конфигурационные файлы, которые “программируют” AI на вашу кодовую базу:
- Язык программирования и версии
- Стиль кода и соглашения
- Архитектурные правила
- Что AI не должен делать