obsidian/linux_docker_apache_vim_cheatsheet.html
Vadym Samoilenko 7251967b64 Initial vault commit: second brain for Oliver projects
- 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>
2026-04-14 18:44:21 +01:00

511 lines
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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 &amp;&amp; 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>