Поздравляю, коллеги: это юбилейная сотая заметка! Если считать "Позвольте представить: Вим", но не считать Путеводитель по рубрике. Или наоборот. И я адресую эту заметку тем, кто с Вимом еще не знаком: она рекламная. О том, что можно. О том, сколько всего можно!
Итак, Вим — это профессиональный текстовый редактор. Редактор, то есть программа для работы с текстом, под которым понимаем последовательность символов; шрифты и прочее вне игры. Профессиональный, то есть для тех, кто умеет им пользоваться и кому нужен максимум.
Всякие user-friendly и WYSIWYG несовместимы с предельной эффективностью. Место водителя в автомобиле доведено до идеала, но необученный человек, скорее всего, даже не тронется с места. А уж рабочее место пилота самолета...
Кстати, какой-нибудь фотошоп вполне себе оконный и дружелюбный, но без вводного курса никто там ничего сделать не сможет. Потому что серьезный инструмент и осваивать надо серьезно.
Далее, часто ли нам надо редактировать голый текст, без шрифтов и картиночек? Кому как. Кроме конфигов, есть еще исходный код программ. А иногда редактировать его надо где-то "там" по ssh или ftp, и оконных удобств не предусмотрено изначально. Есть статьи/книги/диссертации в ТеХ. Есть входные данные для расчетов в текстовой форме. Есть выдача расчетных программ в текстовой форме, причем это и результаты, и диагностика, и отладочная информация. Есть документация, которую можно написать и в Гугл-доках, но проще и удобнее держать ее поблизости. И всё это надо читать, править, анализировать. И желательно не тратить на редактор много ресурсов, потому что их есть куда потратить.
Теперь посмотрим на сам процесс работы с текстом. Иногда (редко) мы начинаем с чистого листа набирать текст. Чаще мы правим уже готовый текст, вставляя новые абзацы, функции, таблицы, строки. Или же редактируем текст, исправляя отдельные слова, строки, конструкции. А то и просто читаем, ищем фрагменты, запоминаем позиции, перемещаемся...
В итоге мы вставляем текст сравнительно редко. Поэтому в Вим есть режимы вставки и замены, но основной режим, который и называется нормальным, использует клавиши как команды. Их много и они очень разные. Это и поиск, и удаление, копирование, вставка, и движения разного рода (прыжок на слово, предложение, абзац, парную скобку и т.п.), форматирование текста (отступы, регистр символов, переносы строк) и многое другое. Вим знает кое-что о вашем тексте, и помогает чем может.
Аналогия. Вы мастер-строитель, и вы отдаете команды помощнику: не "поставь гвоздь острием вот сюда и наноси удары молотком по шляпке", а "забей гвоздь в точку на два дюйма левее". "Обшей стену вагонкой". И даже "построй домик по проекту 42".
В итоге вы делаете именно то, что вам нужно делать, и притом максимально эффективно. Например, мы можем предельно легко запомнить позицию в тексте (положить закладку) и потом вернуться, или сохранить фрагмент текста в регистре — но регистр не один, их много — почему везде, как правило, один??
Например, вам не надо самому искать закрывающую фигурную скобку, а можно скопировать или удалить блок кода просто как "этот блок кода". Вам даже нет необходимости самому залезать в include-файлы, Вим может сделать это за вас.
Как и любой профессиональный инструмент, Вим допускает тонкую настройку под своего хозяина. Вы можете создать свое рабочее место с привязками, сокращениями, автозаменами, меню, обработкой происходящих событий и вообще чем угодно. Даже свой файловый менеджер в Вим есть, и игры, и можно скачать чуть ли не веб-браузер или почтовый клиент. Вим делает всё, что делает профессиональная IDE, причем я не уверен, что последняя сильно проще.
Повторяю: Вим знает кое-что о тексте, с которым работает. Числа в тексте — это числа, и их можно увеличить или уменьшить. Вим знает про предложения и абзацы, комментарии и блоки кода, ключевые слова и include-файлы.
Вот Карта команд нормального режима. Каждая клавиша что-то делает, и это правильно. Не обязательно это всё помнить, но зато если надо - то оно под рукой.
Конечно, если вы запустите Вим, то увидите что-то малопривлекательное: черный (или белый) прямоугольник с мигающим курсором. Надо знать, как добраться до возможностей. А они обширны! Вот неполный список.
- Поиск и замена по регулярному выражению произвольной сложности. Две заметки про поиск: тонкости и спецкоманды. Две заметки про замену: подробности и практика. Магия и регистр. Экспертные тонкости регулярных выражений.
- Фолдинг: сворачивание блоков текста с целью лучшей обозримости. Фолдинг по выражению и по меткам в тексте. Особые методы, могут быть удобны. Тонкости и секреты фолдинга.
- Подсветка синтаксиса для всех языков программирования и разметки, и не только для них. Пример своей раскраски синтаксиса: ничего сложного.
- Сокрытие текста как вариант подсветки: так, можно заменять команды ТеХ типа \lambda на соответствующие символы (λ). На экране, конечно — файл на диске остается неизменным. Можно и просто скрывать, как будто его и нет: полезно, если вы читаете книгу в каком-нибудь формате без специальной читалки и хотите скрыть какие-нибудь тэги.
- Массовые операции по файлам, окнам, вкладкам, пакетная обработка строк и прочие повторные действия. Даёшь Автоматизацию!
- Взаимодействие с make и система обработки ошибок компиляции (грубо говоря, прыжок на первую ошибку и переходы по ошибкам). Вообще, Вим — это IDE.
- Автоматическая расстановка отступов в программном коде. Восстановить отступы по синтаксису можно одним движением кисти: gg=G
- Перекодировка, в том числе смена символа конца строки
- Независимая от системы поддержка письменностей (в том числе восточных и всяких прочих околоевропейских), включая русский, иврит и арабский, греческий и другие языки. Про корейский хангыль вообще было интересно.
- Проверка орфографии. Есть ряд тонкостей помимо простой проверки. Есть даже фонетическая проверка: грубо говоря, должна найти "inaf" или "учица".
- Как работать без переключения на латиницу: есть способ без раскладок клавиатуры, наоборот как бы: системная раскладка все время русская.
- Богатые возможности форматирования текста и, отдельно, комментариев. Можно даже выравнивать текст по ширине. Много средств для работы с табуляцией, которая может быть и такой полезной, и такой раздражающей.
- Множество регистров для хранения скопированного/вырезанного текста. Есть даже регистр-выражение, позволяющий вставить в текст результат sin(arccos(-1.0)/4).
- Шифрование файлов и простое шифрование (сдвигом букв) текста на экране.
- Распознавание объектов в тексте: чисел, слов, предложений, абзацев, блоков кода, комментариев, скобок, строк в кавычках и т.п.
- Неограниченная отмена и даже деревья правок
- Неограниченные возможности настройки: макросы, меню, горячие клавиши (они же привязки), автокоманды (реагирующие на события), распознавание типа файла, сокращения и многое другое. Даже биканье можно отключить. Можно настроить заголовок системного окна. Можно создавать свои :команды и свои операторы: команды, работающие по движению. Вроде d или y.
- Команды для чтения системной справки по слову под курсором. Это может быть man или perldoc или что хотите. Можно и свои файлы справки делать и внедрять в систему справки Вим: это полезно для документирования своих наработок или для создания доки к совершенно другим продуктам.
- Вим как пэйджер, more/less.
- Для программистов на Си много всего, хотя и для других языков это небесполезно: Особые прыжки и Поиск по include-файлам.
- Раскладка Дворака. Да, у вас уже есть и можно учиться.
- Поиск парных конструкций, вроде if-endif. Да, есть и такое: плагин в поставке.
- Работа с файлами. Вполне приличный файловый менеджер.
- Окно предпросмотра. Есть такое: глянуть быстренько, не перемещая курсор, что за файл.
- В Вим полноценный скриптовый язык с функциями (и библиотекой функций), списками-массивами, словарями-хешами (которые и функции могут содержать, почти как объекты), исключениями, блокировкой переменных и другими тонкостями, встроенным отладчиком и профилировщиком (для замера быстродействия). Есть (в новых версиях) новомодные лямбда-выражения и замыкания. Начиная с 9 версии, имеется обновленный язык vim9, более быстрый и современный, и даже с ООП. Есть интерфейсы к разным скриптовым языкам, а с Питоном так идёт в поставке.
- Еще три плагина, которые у вас есть в поставке. Мелочи, но приятные: мышь для левши, меню с ключевыми словами языка bash и поиск запущенного вима с данным файлом.
- Примеры тонкой настройки: исправление раскладки (если вместо reboot получилось куищще); распознавание типа нового файла: открыли вы новый файл, и Виму надо определить, что вы там начали набирать; дата, время, напоминания; или вот своя статистика по тексту.
- Как сохранить файл. Возврат к основам и некоторые тонкости. Возможно и автоматическое сохранение файла, если надо. Вим старается не запортить файл, измененный вне Вим: реакция на изменение открытого файла. Можно автоматически обновлять дату последней правки прямо внутри файла (это уже тонкая настройка, но ничего сложного).
- Подтверждение действий. Обычно Вим либо не делает что нельзя, либо, если настаиваете, делает несмотря ни на что. Можно научить его спрашивать, если хотите. Вы точно хотите перезаписать этот файл? Это уже январь 2023.
- В новых версиях есть терминал и возможность запускать что угодно в окне. Например, отладчик. Есть и другие способы запустить внешнюю программу из командной строки, в том числе выйдя временно в bash.
Обо всём этом я уже рассказывал (см. ссылки), либо скоро выйдут материалы, либо я ещё напишу. По моей рубрике "Секреты Вим" Вы сможете освоить любую тонкость (рано или поздно доберемся до всего).
В общем, Вим позволяет делать именно то, что вам надо. Отлаживать код на Фортране, писать статью в Техе, писать роман о космических пиратах, сочинять стихи на итальянском или делать упражнения на иврите, набрать пару строк хираганой, готовить параметры для расчета, анализировать гигабайтный файл отладочной выдачи, писать заметки для Дзена.
Ваше дело: изучать Вим или Вам это не надо. Но пожалуйста, имейте представление о том, что это такое! Это не устаревшее, неудобное, олдскульное. Это профессиональный инструмент. Как снайперская винтовка.
Если захотите освоить Вим, материалов в сети очень много. Начните с интерактивного учебника (он идет в поставке с Вим): vimtutor. Запустите с командной строки и пройдите небольшой курс. Хорошие книги:
- Learning the vi and Vim Editors. 7th ed. (Arnold Robbins, Elbert Hannah, and Linda Lamb, 2008). По этой книге я изучал Вим, в основном. Очень хорошая!
- Есть она же в виде Pocket Reference. Как справочник.
- Hacking Vim. A cookbook to get the most out of the latest Vim editor (Kim Schulz, 2007). Это не учебник, а сборник рецептов: дельных советов тем, кто Вим уже знает. Кое-что полезное узнал. И вам рассказал.
- Drew Neil - Practical Vim Edit Text at the Speed of Thought, 2nd Edition - 2015. Эта книга — учебник, но совсем простой, с картинками. После первой книги списка уже ни к чему...
Добро пожаловать в наш клуб!
Каналы коллег, которые от души рекомендую.
А вот подборка научно-популярных.
PS: Эта заметка вышла 14 марта 2022 и неоднократно обновлялась. С тех пор вышло много заметок:
- Умные сокращения: не просто механическое раскрытие, а с учётом контекста.
- Переадресация сообщений. Технический нюанс, но полезный.
- Скрытые символы. Можно увидеть невидимое, как в MS Word. Пробелы, табуляции и всё такое.
- Восстановление после сбоев. Всякие своп-файлы и прочее.
- Массовые переименования файлов. Нестандартное применение Вим.
- Опции совместимости. Тонкая настройка поведения. Справочный материал.
- Преобразование данных, printf. И как его использовать для пользы. Август 2023.
- Подсчёт числа предложений и тонкости регулярных выражений.
- Как использовать строку ввода, вроде той, что для :команд и /поиска, для своих целей.
- Настройка вкладок: можно нарисовать заголовки вкладок самому и так, как будет угодно. Например, не с именами файлов, а с их описанием или номерами. Сентябрь 2023.
- Байты, коды, символы: ещё про Юникод, вникнем в теорию.
- vimballs: самоустанавливающиеся плагины. Они еще и самоудаляющиеся. И делать их предельно легко (как и использовать).
- О буферах: подборка команд и разберемся, что к чему.
- Запуск Вим. Проследим, что там в каком порядке происходит и как это можно обратить себе на пользу.
- Настройка сообщений. Можно попросить Вим сообщать больше (или меньше) информации.
- Имя редактируемой функции. Полезная наработка: видеть, какую функцию мы сейчас редактируем.
- Таблицы ЛаТеХ. Довольно сложная штука, но о нас уже позаботились. Внешняя утилита позволяет легко ваять таблицы для ваших статей и диссертов. Один раз только настроить надо.
- Поиск идентификаторов. Всех вхождений во всем проекте. Быстрее и мощнее, чем vimgrep, но с использованием внешних утилит. Ноябрь.
- Переход на вкладку с данным файлом (если он уже открыт).
- Как перевернуть карту (текстовую): задачка несложная, но интересная.
- Из Вим в системный буфер: как правильно это делать, чтобы текст минимально исказился (без лишних пробелов и прочих вспомогательных символов).
- Автодополнения: по словарю, по тезаурусу (словарю синонимов), свои дополнения (омни и пользовательские).
- Модификаторы имен файлов: как откусить путь, расширение, заменить все foo на bar.
- Календари (рассказ скорее про внешнюю утилиту, но в паре с Вим это довольно удобно).
- Деревья правок. Отмена отмен. Полезная вещь, если вы отменили что-то и сделали что-то другое: отмененный текст при линейной отмене потерян навсегда, а технология деревьев позволяет отыскать нужный вариант и вернуться к нему.
- Всплывающие окна: новая возможность в консоли (!) в новых версиях.
- Свойства текста. Новая возможность, полезная.
И как пойдет!
Заглядывайте.
Каналы коллег, которые от души рекомендую.
А вот подборка научно-популярных.