Новый рабочий каталог

Мы работаем в последнем блоке курса, и в нём мы постепенно соберём рабочую среду разработчика. До сих пор мы работали с двумя проектами: ~/linux-files/project остался учебным деревом файлов, а ~/linux-admin хранил службы и скрипты администрирования. Сейчас мы начнём новый проект, который будет называться ~/linux-workbench. В нём появятся заметки, настройки и документация, и именно он станет основой для следующих уроков.

Старый ~/linux-files/project не трогаем: он остаётся таким, каким был после уроков об архивах. Новый каталог создаём с нуля и осознанно. Сначала проверим, что имя свободно:

ls -d "$HOME/linux-workbench"

Если вывод показывает, что каталог существует, не нужно ничего перезаписывать и тем более удалять. Остановитесь и подумайте, откуда он взялся. Возможно, вы уже пробовали создать его раньше, и тогда можно использовать его, но нужно понимать, что внутри. Если команда выводит ошибку «No such file or directory» — имя свободно, и мы можем спокойно создавать каталог:

mkdir "$HOME/linux-workbench"

Без опции -p эта команда создаст ровно один новый каталог. Если родительского каталога не существует, mkdir сообщит об ошибке, и это хорошо: мы не хотим случайно создать целую цепочку путей. Здесь родитель — домашний каталог, он точно есть, поэтому команда сработает.

Теперь внутри ~/linux-workbench будет лежать наш новый проект. Первый файл в нём — README.md. Это текстовый документ в формате Markdown, который принято класть в корень проекта. Он объясняет, зачем проект нужен и как с ним работать. Создавать и редактировать его мы будем не в nano, а в Vim — текстовом редакторе, который заслужил отдельный урок.

Почему Vim, если есть nano

В курсе мы уже пользовались nano для правки конфигураций. Nano прост: открыл, набрал текст, сохранил, вышел. Зачем же изучать ещё один редактор? Потому что Vim устроен иначе и в этом различии есть смысл. Nano всегда находится в режиме ввода: почти любая клавиша что-то вставляет в текст. Vim же разделяет ввод текста и управление им. Это поначалу кажется лишним усложнением, но на деле даёт другую скорость работы: можно перемещаться по файлу, искать, удалять и отменять изменения, не отрывая рук от основной части клавиатуры.

Кроме того, Vim или совместимый с vi редактор часто встречается на серверах. В минимальных образах его может не быть, поэтому наличие редактора всё равно проверяют. Поэтому уметь открыть файл, внести правку и сохранить её в Vim — полезный базовый навык.

Проверим, установлен ли Vim:

vim --version

Вывод покажет версию и список возможностей. Если команда не найдена, установим пакет:

sudo apt update
sudo apt install vim

После установки снова проверим версию. Уточним сразу: все команды Vim вводятся латинскими буквами. Если включена русская раскладка, клавиши i, w, q и другие будут восприниматься как русские буквы, и команды не сработают. Перед работой в Vim переключитесь на латиницу.

Три режима Vim

Vim работает в нескольких режимах, и для урока нам понадобятся три: обычный, режим вставки и командная строка. Когда Vim открывается, он находится в обычном режиме — normal mode. В этом режиме клавиши не вставляют символы, а управляют редактором: перемещают курсор, удаляют строки, ищут текст. Это непривычно, но так задумано.

Чтобы начать вводить текст, нужно перейти в режим вставки — insert mode. Делается это клавишей i. После этого внизу экрана появляется индикатор -- INSERT -- или -- ВСТАВКА --, и набираемый текст вставляется в файл. Из режима вставки возвращаются в обычный режим клавишей Esc.

Третий режим — командная строка. Он нужен для сохранения, выхода, поиска и других команд, которые вводятся по имени. Из обычного режима командная строка вызывается двоеточием :. После нажатия : курсор переходит вниз экрана, и мы набираем команду, например w для сохранения или q для выхода. Ввод завершается клавишей Enter.

Создаём README.md

Перейдём в каталог проекта:

cd "$HOME/linux-workbench"

Проверим, что файла README.md ещё нет:

ls README.md

Ошибка «No such file or directory» означает, что имя свободно. Откроем файл в Vim:

vim README.md

Если файла нет, Vim создаст его в памяти и покажет пустой экран. Внизу будет написано, что файл новый. Мы находимся в обычном режиме. Нажмём i, чтобы перейти в режим вставки, и наберём текст. Он должен быть коротким и понятным, без обещаний уже готового приложения. Например, такой:

# linux-workbench

## Рабочая среда

Каталог создан для практики курса Linux.
Здесь будет собираться окружение разработчика.

## Назначение

Проект используется для отработки работы с редактором,
настройки оболочки и Git.

## Проверка

Основные действия выполняются в терминале Ubuntu.
Перед запуском проверяются пути и содержимое файлов.

Текст набран, и теперь его нужно сохранить. Нажмём Esc, чтобы выйти из режима вставки. Индикатор -- INSERT -- внизу исчезнет, и мы окажемся в обычном режиме. Нажмём :, наберём w и нажмём Enter. Полная команда — :w — сохраняет файл на диск, но не закрывает Vim. Внизу появится сообщение, что файл записан, с именем и количеством строк.

После сохранения можно спокойно продолжать редактировать. Мы же сейчас проверим, что файл действительно записался. Выйдем из Vim командой :q и нажмём Enter. Это выход без сохранения, но поскольку мы только что сохранили файл через :w, Vim закроется сразу. Если бы после сохранения мы внесли ещё правки, Vim не выпустил бы нас просто так: он предложил бы сохранить или выйти без сохранения.

Проверим содержимое файла:

cat README.md

Вывод покажет ровно тот текст, который мы набрали. Первый этап готов: файл создан, сохранён и проверен.

Учимся отменять и возвращать изменения

Теперь откроем файл снова:

vim README.md

На этот раз Vim покажет уже существующий текст. Мы снова в обычном режиме. Попробуем намеренно внести ошибку, чтобы посмотреть, как отменять изменения. Сначала переместим курсор. В обычном режиме работают стрелки, но есть и клавиши h, j, k, l: h — влево, j — вниз, k — вверх, l — вправо. На первых порах можно пользоваться стрелками, а hjkl запомнятся постепенно.

Для быстрого перемещения есть команды 0 и $: 0 переводит курсор в начало строки, $ — в конец. Чтобы прыгнуть в начало файла, используется gg, в конец — G в обычном режиме. Это удобно, когда файл длинный, но в нашем коротком README достаточно и простого перемещения.

Найдём слово Ubuntu в разделе «Проверка». В обычном режиме нажмём /, наберём Ubuntu и нажмём Enter. Курсор окажется на первой букве совпадения. Клавиша n повторяет поиск в том же направлении, а N — в обратном. В нашем тексте совпадение одно.

Нажмём i и введём одну латинскую букву x перед словом, затем Esc. Получится xUbuntu. Это намеренная ошибка, пока только в буфере редактора. Нажмём u: вставка отменится, снова будет Ubuntu. Нажмём Ctrl+r: вставка вернётся. Ещё одно u снова уберёт лишнюю букву.

Удаляем строки и символы

Попробуем другие операции обычного режима. Клавиша x удаляет символ под курсором. Снова найдём /Ubuntu, нажмём Enter и x: первая буква U исчезнет. Сразу нажмём u, чтобы вернуть правильное слово. Для удаления целой строки используется dd. Это удобно, когда нужно быстро убрать строку без выделения.

Мы не будем удалять содержательные строки из README, потому что файл должен остаться осмысленным. Вместо этого проверим удаление на временной строке: добавим в конец файла строку-заготовку, удалим её, затем отменим удаление, чтобы вернуть текст. Так мы не испортим документ.

Переместимся в конец файла клавишей G. Нажмём o: в обычном режиме эта команда создаёт новую строку ниже текущей и включает вставку. Добавим строку:

Временная строка для проверки удаления.

Вернёмся в обычный режим. Перейдём на эту строку и нажмём dd. Строка исчезла. Теперь нажмём u — строка вернулась. Это наглядно показывает, что удаление в Vim — тоже действие, которое можно отменить.

Сохраняем и выходим с пониманием

Мы внесли в файл временную строку, и её нужно убрать, чтобы README остался чистым. Сделаем это удалением dd и больше не будем отменять. Проверим итоговый вид файла перед сохранением: он должен содержать заголовок и три раздела, без временной строки и без орфографической ошибки.

Сохраним файл и выйдем одной командой. В обычном режиме нажмём :, наберём wq и нажмём Enter. Команда :wq — это последовательное выполнение w и q: сначала записать, затем выйти. После неё мы снова окажемся в оболочке.

Проверим, что файл на месте и с правильным содержимым:

cat "$HOME/linux-workbench/README.md"

Вывод должен показать ровно тот текст, который мы задумали. Лишней строки нет, ошибки нет. Это и есть контрольный результат урока.

Если Vim сообщает о swap-файле

Иногда при открытии файла Vim выводит предупреждение о существующем swap-файле. Это может случиться, если предыдущий сеанс Vim был прерван, например окно терминала закрыли без выхода. Vim предлагает варианты: открыть файл заново, восстановить из swap-файла, удалить swap-файл или выйти.

Не нужно сразу удалять swap-файл. Сначала проверьте, не открыт ли этот файл в другом редакторе или в другом терминале. Если да, закройте тот редактор, а потом вернитесь сюда. Если другого редактора нет, можно попробовать восстановить изменения из swap-файла, но для учебного README это скорее всего не понадобится. Главное — не спешить с выбором и не удалять файлы наугад.

Оставляем среду для следующего урока

Теперь у нас есть новый каталог ~/linux-workbench и в нём файл README.md с понятной структурой. Мы не создавали никаких настроек Vim и не подключали плагины: всё работает на чистом Vim. Это осознанный выбор — сначала базовые операции, а конфигурация, если понадобится, позже.

Если во время урока мы пользовались tmux, его состояние осталось прежним: сессия course-work с двумя окнами, в каждом по одной оболочке. Для работы с Vim мы могли открыть окно notes, но это необязательно. Главное, что в конце урока оболочка свободна, файл сохранён, и можно переходить к следующей теме.

Мы создали новый каталог ~/linux-workbench после проверки, что имя свободно, и не трогали старый учебный проект. Внутри каталога появился файл README.md с тремя разделами: «Рабочая среда», «Назначение» и «Проверка». Текст короткий и описывает назначение каталога без обещаний уже готового приложения. Для редактирования мы использовали Vim, предварительно проверив его установку через vim --version.

Vim работает в режимах. Обычный режим управляет файлом, режим вставки вводит текст, командная строка сохраняет и закрывает. Мы научились входить в режим вставки клавишей i, возвращаться через Esc, сохранять без выхода командой :w, выходить через :q, когда нет несохранённых правок, и отбрасывать несохранённые правки через :q! и сохранять с выходом через :wq. Для перемещения использовали стрелки и hjkl, для поиска — / с повторением через n и N. Отмена выполняется клавишей u, возврат отмены — Ctrl+r, удаление символа — x, строки — dd. При появлении предупреждения о swap-файле нужно сначала проверить, не открыт ли файл в другом месте, и только потом принимать решение. Итог урока — сохранённый и проверенный README.md в новом каталоге.

Практика: работа с текстом в Vim

В уроке мы создали каталог ~/linux-workbench и первый файл README.md в Vim. Разобрали три режима — обычный, вставки и командную строку — и научились сохранять, выходить и отменять правки. Теперь проверим это на трёх задачах: сначала разберём смысл режимов, потом составим порядок действий для нового файла, а в конце сами опишем работу с отдельным учебным файлом.

Режимы Vim и сохранение

В Vim одна и та же клавиша может означать разное в зависимости от режима. Проверим, как это работает на короткой последовательности.

11

Ученик открыл Vim командой vim README.md. Он нажал i, набрал слово test, затем нажал Esc. После этого он нажал :, потом w и нажал Enter. Что произойдёт? Предполагается обычный Vim без переопределения клавиш, файл доступен для записи и команда сохранения завершилась без ошибки.

Новый файл в Vim от открытия до проверки

Сейчас нужно расположить действия по порядку. Пока порядок неверный, следующий шаг либо ничего не даст, либо не выполнится.

В каталоге ~/linux-workbench ещё нет файла DRAFT.md. Нужно создать его в Vim, наполнить коротким текстом заметок и убедиться, что содержимое записано. Расставьте шаги так, как их нужно выполнять.

Открыть файл в Vim командой vim "$HOME/linux-workbench/DRAFT.md"
Нажать i и набрать текст заметок
Выполнить cat "$HOME/linux-workbench/DRAFT.md" и убедиться, что в файле ровно тот текст, который набирали
Ввести в обычном режиме :wq и нажать Enter, чтобы записать файл и закрыть Vim
Нажать Esc, чтобы вернуться из режима вставки в обычный режим

Свой файл заметок с правкой через Vim

Теперь нужен отдельный файл, чтобы не трогать README.md из урока. Создадим его с нуля, затем внесём правку и проверим результат.

Учебная среда: каталог ~/linux-workbench уже существует. Файла NOTES.md в нём пока нет. Работаем только в этом каталоге, ничего в других проектах не меняем.

Нужно выполнить следующее:

  1. создать в Vim новый файл ~/linux-workbench/NOTES.md и набрать в нём ровно такой текст (сохраняйте пустые строки, как показано):
# Заметки по курсу

## Инструменты

nano — простой редактор.
Vim — редактор с режимами.
Временная строка для удаления.

## Следующие шаги

Разобраться с панелями tmux.
  1. сохранить файл, оставив Vim открытым;
  2. в том же сеансе Vim удалить строку «Временная строка для удаления.» так, чтобы между строкой про режимы и заголовком «Следующие шаги» осталась ровно одна пустая строка;
  3. сохранить изменения и выйти из Vim;
  4. проверить содержимое файла командой cat и убедиться, что итоговый текст в точности такой:
# Заметки по курсу

## Инструменты

nano — простой редактор.
Vim — редактор с режимами.

## Следующие шаги

Разобраться с панелями tmux.

Опишите последовательность команд и нажатий клавиш так, как вы бы их выполняли в терминале. Укажите, где именно вводятся команды оболочки, а где вы работаете внутри Vim, и поясните, зачем нужны Esc, :w, :wq и, если вы её используете, команда dd.

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.