- 35 project notes (PARA structure, 1:1 disk mapping) - CLAUDE.md session protocol - Projects Index MOC - Templates: Daily, Meeting, Project - 03 Resources, 02 Areas structure - .gitignore excludes credentials, workspace files, smart-env Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
511 lines
29 KiB
HTML
511 lines
29 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Linux · Docker · Apache2 · Vim — Шпаргалка</title>
|
||
<style>
|
||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||
|
||
:root {
|
||
--bg: #0f1117;
|
||
--bg2: #181c27;
|
||
--bg3: #1e2335;
|
||
--border: rgba(255,255,255,0.08);
|
||
--border-hover: rgba(255,255,255,0.16);
|
||
--text: #e8eaf0;
|
||
--text2: #8b90a0;
|
||
--text3: #5a5f70;
|
||
--accent: #4f8ef7;
|
||
--accent-bg: rgba(79,142,247,0.12);
|
||
--green: #3ecf8e;
|
||
--green-bg: rgba(62,207,142,0.12);
|
||
--amber: #f5a623;
|
||
--amber-bg: rgba(245,166,35,0.12);
|
||
--red: #f56565;
|
||
--red-bg: rgba(245,101,101,0.12);
|
||
--purple: #a78bfa;
|
||
--purple-bg: rgba(167,139,250,0.12);
|
||
--mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
|
||
--sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
|
||
}
|
||
|
||
body {
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
font-family: var(--sans);
|
||
min-height: 100vh;
|
||
padding: 2rem 1rem;
|
||
}
|
||
|
||
.container { max-width: 860px; margin: 0 auto; }
|
||
|
||
header {
|
||
margin-bottom: 2rem;
|
||
padding-bottom: 1.5rem;
|
||
border-bottom: 0.5px solid var(--border);
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: flex-end;
|
||
flex-wrap: wrap;
|
||
gap: 1rem;
|
||
}
|
||
|
||
header h1 {
|
||
font-size: 22px;
|
||
font-weight: 600;
|
||
letter-spacing: -0.02em;
|
||
color: var(--text);
|
||
}
|
||
|
||
header p {
|
||
font-size: 13px;
|
||
color: var(--text3);
|
||
margin-top: 4px;
|
||
}
|
||
|
||
.tabs {
|
||
display: flex;
|
||
gap: 6px;
|
||
flex-wrap: wrap;
|
||
margin-bottom: 1.5rem;
|
||
}
|
||
|
||
.tab {
|
||
padding: 7px 16px;
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
border-radius: 999px;
|
||
border: 0.5px solid var(--border);
|
||
background: transparent;
|
||
cursor: pointer;
|
||
color: var(--text2);
|
||
font-family: var(--sans);
|
||
transition: all .15s;
|
||
}
|
||
.tab:hover { background: var(--bg3); color: var(--text); border-color: var(--border-hover); }
|
||
.tab.active { background: var(--text); color: var(--bg); border-color: transparent; }
|
||
|
||
.search-wrap { margin-bottom: 1.25rem; }
|
||
.search-wrap input {
|
||
width: 100%;
|
||
padding: 9px 14px;
|
||
font-size: 13px;
|
||
border: 0.5px solid var(--border);
|
||
border-radius: 10px;
|
||
background: var(--bg2);
|
||
color: var(--text);
|
||
font-family: var(--sans);
|
||
outline: none;
|
||
transition: border-color .15s;
|
||
}
|
||
.search-wrap input:focus { border-color: var(--accent); }
|
||
.search-wrap input::placeholder { color: var(--text3); }
|
||
|
||
.section { display: none; }
|
||
.section.active { display: block; }
|
||
|
||
.group { margin-bottom: 1.5rem; }
|
||
|
||
.group-title {
|
||
font-size: 11px;
|
||
font-weight: 600;
|
||
letter-spacing: .08em;
|
||
text-transform: uppercase;
|
||
color: var(--text3);
|
||
margin-bottom: 8px;
|
||
padding-left: 2px;
|
||
}
|
||
|
||
.cmd-list { display: flex; flex-direction: column; gap: 3px; }
|
||
|
||
.cmd {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 16px;
|
||
align-items: start;
|
||
padding: 9px 12px;
|
||
border-radius: 8px;
|
||
border: 0.5px solid var(--border);
|
||
background: var(--bg2);
|
||
font-size: 13px;
|
||
transition: border-color .12s, background .12s;
|
||
}
|
||
.cmd:hover { background: var(--bg3); border-color: var(--border-hover); }
|
||
.cmd.hidden { display: none; }
|
||
|
||
.cmd code {
|
||
font-family: var(--mono);
|
||
font-size: 12px;
|
||
color: var(--accent);
|
||
background: var(--accent-bg);
|
||
padding: 3px 8px;
|
||
border-radius: 5px;
|
||
word-break: break-all;
|
||
line-height: 1.6;
|
||
display: inline-block;
|
||
}
|
||
|
||
.cmd .desc {
|
||
color: var(--text2);
|
||
line-height: 1.55;
|
||
padding-top: 1px;
|
||
}
|
||
|
||
.divider {
|
||
height: 0.5px;
|
||
background: var(--border);
|
||
margin: 1.25rem 0;
|
||
}
|
||
|
||
.alert {
|
||
border-radius: 9px;
|
||
padding: 10px 14px;
|
||
font-size: 12.5px;
|
||
line-height: 1.55;
|
||
margin-bottom: 1.25rem;
|
||
border: 0.5px solid;
|
||
}
|
||
.alert-warn { background: var(--amber-bg); border-color: rgba(245,166,35,0.25); color: var(--amber); }
|
||
.alert-danger { background: var(--red-bg); border-color: rgba(245,101,101,0.25); color: var(--red); }
|
||
|
||
.vim-modes {
|
||
display: flex;
|
||
gap: 8px;
|
||
flex-wrap: wrap;
|
||
margin-bottom: 1.25rem;
|
||
}
|
||
.mode-badge {
|
||
padding: 5px 12px;
|
||
border-radius: 6px;
|
||
font-size: 12px;
|
||
font-weight: 500;
|
||
border: 0.5px solid;
|
||
}
|
||
.mode-normal { background: var(--green-bg); color: var(--green); border-color: rgba(62,207,142,0.3); }
|
||
.mode-insert { background: var(--accent-bg); color: var(--accent); border-color: rgba(79,142,247,0.3); }
|
||
.mode-visual { background: var(--amber-bg); color: var(--amber); border-color: rgba(245,166,35,0.3); }
|
||
.mode-command { background: var(--bg3); color: var(--text2); border-color: var(--border-hover); }
|
||
|
||
footer {
|
||
margin-top: 3rem;
|
||
padding-top: 1.5rem;
|
||
border-top: 0.5px solid var(--border);
|
||
font-size: 12px;
|
||
color: var(--text3);
|
||
text-align: center;
|
||
}
|
||
|
||
@media (max-width: 580px) {
|
||
.cmd { grid-template-columns: 1fr; gap: 5px; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<header>
|
||
<div>
|
||
<h1>Linux · Docker · Apache2 · Vim</h1>
|
||
<p>Шпаргалка для быстрого старта</p>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="tabs">
|
||
<button class="tab active" onclick="show('linux', this)">🐧 Linux</button>
|
||
<button class="tab" onclick="show('docker', this)">🐳 Docker</button>
|
||
<button class="tab" onclick="show('apache', this)">🌐 Apache2</button>
|
||
<button class="tab" onclick="show('vim', this)">📝 Vim</button>
|
||
</div>
|
||
|
||
<div class="search-wrap">
|
||
<input type="text" id="search" placeholder="Поиск команды..." oninput="filterCmds(this.value)">
|
||
</div>
|
||
|
||
<!-- LINUX -->
|
||
<div class="section active" id="linux">
|
||
<div class="group">
|
||
<div class="group-title">Навигация и файлы</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>ls -la</code><span class="desc">Показать все файлы с деталями (включая скрытые)</span></div>
|
||
<div class="cmd"><code>pwd</code><span class="desc">Где ты сейчас находишься</span></div>
|
||
<div class="cmd"><code>cd /path/to/dir</code><span class="desc">Перейти в папку</span></div>
|
||
<div class="cmd"><code>cd ..</code><span class="desc">На уровень выше</span></div>
|
||
<div class="cmd"><code>cd ~</code><span class="desc">Домой (в /home/user)</span></div>
|
||
<div class="cmd"><code>mkdir mydir</code><span class="desc">Создать папку</span></div>
|
||
<div class="cmd"><code>mkdir -p a/b/c</code><span class="desc">Создать вложенные папки сразу</span></div>
|
||
<div class="cmd"><code>rm file.txt</code><span class="desc">Удалить файл</span></div>
|
||
<div class="cmd"><code>rm -rf ./folder</code><span class="desc">⚠️ Удалить папку со всем содержимым</span></div>
|
||
<div class="cmd"><code>cp src dest</code><span class="desc">Скопировать файл</span></div>
|
||
<div class="cmd"><code>mv old new</code><span class="desc">Переместить / переименовать</span></div>
|
||
<div class="cmd"><code>cat file.txt</code><span class="desc">Вывести содержимое файла</span></div>
|
||
<div class="cmd"><code>tail -f log.txt</code><span class="desc">Смотреть лог в реальном времени</span></div>
|
||
<div class="cmd"><code>grep "слово" file</code><span class="desc">Найти строку в файле</span></div>
|
||
<div class="cmd"><code>find / -name "*.log"</code><span class="desc">Найти файлы по имени</span></div>
|
||
<div class="cmd"><code>chmod 755 script.sh</code><span class="desc">Выдать права на выполнение</span></div>
|
||
<div class="cmd"><code>chown user:group file</code><span class="desc">Сменить владельца файла</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Процессы и система</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>ps aux</code><span class="desc">Показать все запущенные процессы</span></div>
|
||
<div class="cmd"><code>top</code><span class="desc">Монитор процессов (q — выйти)</span></div>
|
||
<div class="cmd"><code>htop</code><span class="desc">Красивый монитор процессов</span></div>
|
||
<div class="cmd"><code>kill 1234</code><span class="desc">Убить процесс по PID</span></div>
|
||
<div class="cmd"><code>kill -9 1234</code><span class="desc">Убить намертво (если обычный kill не помог)</span></div>
|
||
<div class="cmd"><code>df -h</code><span class="desc">Сколько места на дисках</span></div>
|
||
<div class="cmd"><code>du -sh ./dir</code><span class="desc">Сколько весит папка</span></div>
|
||
<div class="cmd"><code>free -h</code><span class="desc">Сколько памяти</span></div>
|
||
<div class="cmd"><code>uname -a</code><span class="desc">Версия системы и ядра</span></div>
|
||
<div class="cmd"><code>uptime</code><span class="desc">Сколько сервер работает без перезагрузки</span></div>
|
||
<div class="cmd"><code>whoami</code><span class="desc">Под каким юзером ты работаешь</span></div>
|
||
<div class="cmd"><code>sudo su</code><span class="desc">Стать root-ом</span></div>
|
||
<div class="cmd"><code>history</code><span class="desc">История команд</span></div>
|
||
<div class="cmd"><code>Ctrl + C</code><span class="desc">Остановить текущий процесс</span></div>
|
||
<div class="cmd"><code>Ctrl + Z</code><span class="desc">Отправить процесс в фон</span></div>
|
||
<div class="cmd"><code>Ctrl + L</code><span class="desc">Очистить экран терминала</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Сеть и SSH</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>ssh user@ip</code><span class="desc">Подключиться по SSH</span></div>
|
||
<div class="cmd"><code>ssh -p 2222 user@ip</code><span class="desc">SSH на нестандартный порт</span></div>
|
||
<div class="cmd"><code>scp file user@ip:/path</code><span class="desc">Скопировать файл на сервер</span></div>
|
||
<div class="cmd"><code>curl -I https://site.com</code><span class="desc">Проверить HTTP заголовки сайта</span></div>
|
||
<div class="cmd"><code>wget https://url/file</code><span class="desc">Скачать файл</span></div>
|
||
<div class="cmd"><code>netstat -tulpn</code><span class="desc">Какие порты слушают (занятые)</span></div>
|
||
<div class="cmd"><code>ss -tulpn</code><span class="desc">То же самое, но быстрее</span></div>
|
||
<div class="cmd"><code>ping google.com</code><span class="desc">Проверить соединение</span></div>
|
||
<div class="cmd"><code>ufw status</code><span class="desc">Статус файрвола</span></div>
|
||
<div class="cmd"><code>ufw allow 80</code><span class="desc">Открыть порт 80</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Systemd (сервисы)</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>systemctl status nginx</code><span class="desc">Статус сервиса</span></div>
|
||
<div class="cmd"><code>systemctl start nginx</code><span class="desc">Запустить сервис</span></div>
|
||
<div class="cmd"><code>systemctl stop nginx</code><span class="desc">Остановить сервис</span></div>
|
||
<div class="cmd"><code>systemctl restart nginx</code><span class="desc">Перезапустить сервис</span></div>
|
||
<div class="cmd"><code>systemctl enable nginx</code><span class="desc">Автозапуск при старте системы</span></div>
|
||
<div class="cmd"><code>journalctl -u nginx -f</code><span class="desc">Логи сервиса в реальном времени</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- DOCKER -->
|
||
<div class="section" id="docker">
|
||
<div class="alert alert-warn">💡 Большинство команд требуют <code style="background:rgba(245,166,35,0.2);color:var(--amber);font-family:var(--mono);font-size:12px;padding:1px 5px;border-radius:4px;">sudo</code> или добавления себя в группу docker</div>
|
||
<div class="group">
|
||
<div class="group-title">Контейнеры</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>docker ps</code><span class="desc">Список запущенных контейнеров</span></div>
|
||
<div class="cmd"><code>docker ps -a</code><span class="desc">Все контейнеры, включая остановленные</span></div>
|
||
<div class="cmd"><code>docker run -d nginx</code><span class="desc">Запустить контейнер в фоне</span></div>
|
||
<div class="cmd"><code>docker run -it ubuntu bash</code><span class="desc">Запустить интерактивно с bash</span></div>
|
||
<div class="cmd"><code>docker stop myapp</code><span class="desc">Остановить контейнер</span></div>
|
||
<div class="cmd"><code>docker start myapp</code><span class="desc">Запустить остановленный контейнер</span></div>
|
||
<div class="cmd"><code>docker restart myapp</code><span class="desc">Перезапустить контейнер</span></div>
|
||
<div class="cmd"><code>docker rm myapp</code><span class="desc">Удалить контейнер (должен быть остановлен)</span></div>
|
||
<div class="cmd"><code>docker rm -f myapp</code><span class="desc">Удалить контейнер принудительно</span></div>
|
||
<div class="cmd"><code>docker exec -it myapp bash</code><span class="desc">Зайти внутрь работающего контейнера</span></div>
|
||
<div class="cmd"><code>docker logs myapp</code><span class="desc">Логи контейнера</span></div>
|
||
<div class="cmd"><code>docker logs -f myapp</code><span class="desc">Логи в реальном времени</span></div>
|
||
<div class="cmd"><code>docker inspect myapp</code><span class="desc">Вся инфа о контейнере (JSON)</span></div>
|
||
<div class="cmd"><code>docker stats</code><span class="desc">CPU/RAM всех контейнеров в реальном времени</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Образы</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>docker images</code><span class="desc">Список скачанных образов</span></div>
|
||
<div class="cmd"><code>docker pull nginx</code><span class="desc">Скачать образ с Docker Hub</span></div>
|
||
<div class="cmd"><code>docker build -t myapp .</code><span class="desc">Собрать образ из Dockerfile в текущей папке</span></div>
|
||
<div class="cmd"><code>docker rmi nginx</code><span class="desc">Удалить образ</span></div>
|
||
<div class="cmd"><code>docker tag myapp user/myapp:v1</code><span class="desc">Дать образу тег</span></div>
|
||
<div class="cmd"><code>docker push user/myapp:v1</code><span class="desc">Залить образ в Docker Hub</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Docker Compose</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>docker compose up -d</code><span class="desc">Запустить всё из docker-compose.yml в фоне</span></div>
|
||
<div class="cmd"><code>docker compose down</code><span class="desc">Остановить и удалить контейнеры</span></div>
|
||
<div class="cmd"><code>docker compose down -v</code><span class="desc">То же + удалить volumes (данные!)</span></div>
|
||
<div class="cmd"><code>docker compose logs -f</code><span class="desc">Логи всех сервисов</span></div>
|
||
<div class="cmd"><code>docker compose ps</code><span class="desc">Статус сервисов</span></div>
|
||
<div class="cmd"><code>docker compose restart app</code><span class="desc">Перезапустить конкретный сервис</span></div>
|
||
<div class="cmd"><code>docker compose build</code><span class="desc">Пересобрать образы</span></div>
|
||
<div class="cmd"><code>docker compose pull</code><span class="desc">Обновить образы</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Чистка мусора</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>docker system prune</code><span class="desc">Удалить всё неиспользуемое</span></div>
|
||
<div class="cmd"><code>docker volume prune</code><span class="desc">Удалить неиспользуемые volumes</span></div>
|
||
<div class="cmd"><code>docker network ls</code><span class="desc">Список сетей</span></div>
|
||
<div class="cmd"><code>docker volume ls</code><span class="desc">Список volumes</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- APACHE2 -->
|
||
<div class="section" id="apache">
|
||
<div class="group">
|
||
<div class="group-title">Управление сервисом</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>systemctl status apache2</code><span class="desc">Статус Apache</span></div>
|
||
<div class="cmd"><code>systemctl start apache2</code><span class="desc">Запустить Apache</span></div>
|
||
<div class="cmd"><code>systemctl stop apache2</code><span class="desc">Остановить Apache</span></div>
|
||
<div class="cmd"><code>systemctl restart apache2</code><span class="desc">Перезапустить (разрывает соединения)</span></div>
|
||
<div class="cmd"><code>systemctl reload apache2</code><span class="desc">Перезагрузить конфиг (без разрыва)</span></div>
|
||
<div class="cmd"><code>apachectl configtest</code><span class="desc">Проверить конфиг на ошибки перед перезапуском</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Конфиги и сайты</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>/etc/apache2/</code><span class="desc">Главная папка конфигов</span></div>
|
||
<div class="cmd"><code>/etc/apache2/apache2.conf</code><span class="desc">Основной конфиг сервера</span></div>
|
||
<div class="cmd"><code>/etc/apache2/sites-available/</code><span class="desc">Доступные конфиги сайтов (все)</span></div>
|
||
<div class="cmd"><code>/etc/apache2/sites-enabled/</code><span class="desc">Включённые сайты (симлинки)</span></div>
|
||
<div class="cmd"><code>a2ensite mysite.conf</code><span class="desc">Включить сайт</span></div>
|
||
<div class="cmd"><code>a2dissite mysite.conf</code><span class="desc">Выключить сайт</span></div>
|
||
<div class="cmd"><code>a2enmod rewrite</code><span class="desc">Включить модуль rewrite</span></div>
|
||
<div class="cmd"><code>a2dismod rewrite</code><span class="desc">Выключить модуль</span></div>
|
||
<div class="cmd"><code>apache2ctl -M</code><span class="desc">Список включённых модулей</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Логи</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>/var/log/apache2/access.log</code><span class="desc">Все запросы к серверу</span></div>
|
||
<div class="cmd"><code>/var/log/apache2/error.log</code><span class="desc">Ошибки — сюда первым делом</span></div>
|
||
<div class="cmd"><code>tail -f /var/log/apache2/error.log</code><span class="desc">Смотреть ошибки в реальном времени</span></div>
|
||
<div class="cmd"><code>grep "error" /var/log/apache2/error.log</code><span class="desc">Найти все ошибки в логе</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Полезные штуки</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>/var/www/html/</code><span class="desc">Корень сайта по умолчанию</span></div>
|
||
<div class="cmd"><code>apachectl -v</code><span class="desc">Версия Apache</span></div>
|
||
<div class="cmd"><code>apache2 -l</code><span class="desc">Скомпилированные модули</span></div>
|
||
<div class="cmd"><code>a2enmod ssl && a2enmod headers</code><span class="desc">Включить SSL и headers (для HTTPS)</span></div>
|
||
<div class="cmd"><code>certbot --apache -d site.com</code><span class="desc">Бесплатный SSL через Let's Encrypt</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- VIM -->
|
||
<div class="section" id="vim">
|
||
<div class="alert alert-danger">🚨 Главное правило: Vim имеет режимы. По умолчанию ты в NORMAL — нажатие букв выполняет команды, а НЕ пишет текст.</div>
|
||
<div class="vim-modes">
|
||
<span class="mode-badge mode-normal">NORMAL — навигация и команды</span>
|
||
<span class="mode-badge mode-insert">INSERT — ввод текста</span>
|
||
<span class="mode-badge mode-visual">VISUAL — выделение</span>
|
||
<span class="mode-badge mode-command">COMMAND — команды с двоеточием</span>
|
||
</div>
|
||
<div class="group">
|
||
<div class="group-title">Войти в режим ввода текста (из NORMAL)</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>i</code><span class="desc">Начать писать перед курсором</span></div>
|
||
<div class="cmd"><code>a</code><span class="desc">Начать писать после курсора</span></div>
|
||
<div class="cmd"><code>o</code><span class="desc">Создать новую строку ниже и начать писать</span></div>
|
||
<div class="cmd"><code>O</code><span class="desc">Создать новую строку выше и начать писать</span></div>
|
||
<div class="cmd"><code>Esc</code><span class="desc">⬅️ Выйти из любого режима обратно в NORMAL</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Сохранить и выйти (из NORMAL, нажать :)</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>:w</code><span class="desc">Сохранить файл</span></div>
|
||
<div class="cmd"><code>:q</code><span class="desc">Выйти (если нет несохранённых изменений)</span></div>
|
||
<div class="cmd"><code>:wq</code><span class="desc">Сохранить и выйти</span></div>
|
||
<div class="cmd"><code>:q!</code><span class="desc">Выйти БЕЗ сохранения (бросить изменения)</span></div>
|
||
<div class="cmd"><code>:wq!</code><span class="desc">Сохранить и выйти принудительно (read-only)</span></div>
|
||
<div class="cmd"><code>ZZ</code><span class="desc">Сохранить и выйти (быстрый способ)</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Навигация (NORMAL режим)</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>h j k l</code><span class="desc">← ↓ ↑ → (или просто стрелки)</span></div>
|
||
<div class="cmd"><code>gg</code><span class="desc">Перейти в начало файла</span></div>
|
||
<div class="cmd"><code>G</code><span class="desc">Перейти в конец файла</span></div>
|
||
<div class="cmd"><code>:42</code><span class="desc">Перейти на строку 42</span></div>
|
||
<div class="cmd"><code>Ctrl + F</code><span class="desc">Страница вниз</span></div>
|
||
<div class="cmd"><code>Ctrl + B</code><span class="desc">Страница вверх</span></div>
|
||
<div class="cmd"><code>0</code><span class="desc">В начало строки</span></div>
|
||
<div class="cmd"><code>$</code><span class="desc">В конец строки</span></div>
|
||
<div class="cmd"><code>w</code><span class="desc">Следующее слово</span></div>
|
||
<div class="cmd"><code>b</code><span class="desc">Предыдущее слово</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Редактирование (NORMAL режим)</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>dd</code><span class="desc">Вырезать (удалить) строку</span></div>
|
||
<div class="cmd"><code>yy</code><span class="desc">Скопировать строку</span></div>
|
||
<div class="cmd"><code>p</code><span class="desc">Вставить после курсора</span></div>
|
||
<div class="cmd"><code>P</code><span class="desc">Вставить перед курсором</span></div>
|
||
<div class="cmd"><code>u</code><span class="desc">Отменить действие (Undo)</span></div>
|
||
<div class="cmd"><code>Ctrl + R</code><span class="desc">Вернуть отменённое (Redo)</span></div>
|
||
<div class="cmd"><code>x</code><span class="desc">Удалить символ под курсором</span></div>
|
||
<div class="cmd"><code>dw</code><span class="desc">Удалить слово</span></div>
|
||
<div class="cmd"><code>cw</code><span class="desc">Заменить слово (удаляет и входит в INSERT)</span></div>
|
||
<div class="cmd"><code>r</code><span class="desc">Заменить один символ (без входа в INSERT)</span></div>
|
||
<div class="cmd"><code>.</code><span class="desc">Повторить последнее действие</span></div>
|
||
</div>
|
||
</div>
|
||
<div class="divider"></div>
|
||
<div class="group">
|
||
<div class="group-title">Поиск и замена</div>
|
||
<div class="cmd-list">
|
||
<div class="cmd"><code>/слово</code><span class="desc">Найти вперёд (Enter — перейти)</span></div>
|
||
<div class="cmd"><code>?слово</code><span class="desc">Найти назад</span></div>
|
||
<div class="cmd"><code>n</code><span class="desc">Следующее совпадение</span></div>
|
||
<div class="cmd"><code>N</code><span class="desc">Предыдущее совпадение</span></div>
|
||
<div class="cmd"><code>:s/old/new/g</code><span class="desc">Заменить в текущей строке</span></div>
|
||
<div class="cmd"><code>:%s/old/new/g</code><span class="desc">Заменить во всём файле</span></div>
|
||
<div class="cmd"><code>:%s/old/new/gc</code><span class="desc">То же, но с подтверждением каждой замены</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<footer>Linux · Docker · Apache2 · Vim Cheatsheet — для тех кто забывает команды</footer>
|
||
</div>
|
||
|
||
<script>
|
||
function show(id, btn) {
|
||
document.querySelectorAll('.section').forEach(s => s.classList.remove('active'));
|
||
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
|
||
document.getElementById(id).classList.add('active');
|
||
btn.classList.add('active');
|
||
document.getElementById('search').value = '';
|
||
document.querySelectorAll('.cmd').forEach(c => c.classList.remove('hidden'));
|
||
}
|
||
|
||
function filterCmds(q) {
|
||
const query = q.toLowerCase();
|
||
document.querySelectorAll('.cmd').forEach(cmd => {
|
||
cmd.classList.toggle('hidden', query.length > 0 && !cmd.textContent.toLowerCase().includes(query));
|
||
});
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|