Редактирование в Vim
Vim — это не «редактор с горячими клавишами», это язык, на котором с текстом разговаривают напрямую, без посредников-кнопок и без графических нянеек. Мышь пылится в ящике между зарядкой и забытым флеш-накопителем, а я третий час сижу над чужим текстом и ни разу её не тронул. Каждая команда здесь устроена как опкод: один-два символа наружу, а за ними целая семантика, выверенная десятилетиями. Мы работаем быстро не потому, что ускоряем пальцы, а потому, что перестаём о них думать. Ниже — грамматика: сначала простые глаголы, потом те, что пишутся в несколько руках и живут до автоматизма.
Основные команды редактирования
Сменить регистр слов и предложений
Регистр — это тот же бит в байте: перевёл его — и слово из шёпота стало криком. Дёшево и зло: целая строка переворачивается одним жестом, без диалогов, без модалок, без подтверждения.
gUU- поменять регистр на верхний для всей строкиgUw- поменять регистр на верхний 'test' => 'TEST'guw- поменять регистр на нижний для слова~- переключить регистр символа под курсоромVU- перевести выделенную строку в верхний регистрVu- перевести выделенную строку в нижний регистр
Вставка текста
Точка входа обязана быть явной — в дизассемблере ты всегда знаешь, куда прыгает instruction pointer, и здесь то же самое: шесть способов сказать «начни писать именно здесь».
i— перейти в режим вставки перед курсором.I— перейти в режим вставки в начале текущей строки.a— перейти в режим вставки после курсора.A— перейти в режим вставки в конце текущей строки.o— открыть новую строку ниже текущей и перейти в режим вставки.O— открыть новую строку выше текущей и перейти в режим вставки.
Удаление текста
Удаление здесь — не «стереть», а вырезать кусок потока и молча положить его в регистр. Ничего не пропадает: то, что ты снёс, ещё лежит в памяти и ждёт.
x— удалить символ под курсором.X— удалить символ перед курсором.dw— удалить слово.dd— удалить текущую строку.D— удалить все символы от курсора до конца строки.
Изменение текста
Замена — это удаление с немедленным исполнением, один цикл вместо двух. Мелочь, а экономит секунды, а секунды — это и есть вся жизнь, разложенная по кадрам.
r— заменить символ под курсором.cw— изменить слово.cc— изменить текущую строку.C— изменить все символы от курсора до конца строки.
Видео «delete-and-change» не найдено (урок не готов или slug неверный).
Копирование и вставка
Yank — старое слово, но оно точнее любого «скопировать». Копируешь не в абстрактный буфер обмена, а в конкретный регистр, с именем и адресацией.
y— копировать (yank) текст.yy— копировать текущую строку.yw— копировать слово.p— вставить текст после курсора.P— вставить текст перед курсором.
Отмена и повтор
Отмена устроена как стек: u делает возврат, Ctrl-R вытаскивает обратно то, что ты уже похоронил. А . вообще отдельная песня — повтор последней команды, и это самый честный способ автоматизации, какой только существует: ты один раз сделал руками, а машина повторит столько раз, сколько скажешь.
u— отменить последнее изменение.Ctrl-R— повторить отмененное действие..— повторить последнюю команду.
Видео «dot-repeat» не найдено (урок не готов или slug неверный).
Продвинутые команды редактирования
Теперь заглянем под капот: регистры, макросы, подстановки. Это уже не бытовой уровень, это тот слой, где текст перестаёт быть строками и становится потоком, который можно патчить на лету.
Замена текста
:%s — как греп с обратным ходом: нашёл, заменил, не спросив. Жёсткий инструмент, зато без иллюзий.
:%s/old/new/g— заменить все вхожденияoldнаnewв файле.:s/old/new/g— заменить все вхожденияoldнаnewв текущей строке.:s/old/new/gc— заменить все вхождения с подтверждением.
Регистры
Тридцать с лишним именованных ячеек памяти прямо в редакторе. Пока остальные восторгаются буфером обмена, ты работаешь с адресацией, как в ассемблере.
"ay— копировать текст в регистрa."ap— вставить текст из регистраa."aP— вставить текст из регистраaперед курсором.
Макросы
Запись команд в регистр и их точное воспроизведение — примитивный, но абсолютно надёжный интерпретатор. Никаких плагинов, никаких гуру, только твои собственные руки, снятые на плёнку.
q<register>— начать запись макроса в указанный регистр.q— остановить запись макроса.@<register>— воспроизвести макрос из указанного регистра.@@— воспроизвести последний макрос.
Автоисправление
Модные фреймворки обещают тебе интеллект на триста мегабайт. Vim предлагает три строчки, которые правят опечатки до того, как ты их сделал.
:abbr Lunix Linux
:abbr accross across
:abbr hte the
Визуальный режим
Мышь не нужна и здесь: выделение — это диапазон, а диапазон потом принимает любую команду.
v— войти в визуальный режим.V— войти в визуальный режим строк.Ctrl-V— войти в визуальный блоковый режим.d— удалить выделенный текст.y— копировать выделенный текст.>— сместить выделенный текст вправо.<— сместить выделенный текст влево.
Работа с буфером и окнами
Буфер — это файл в памяти, окно — взгляд на него. Держать эти два понятия раздельными учат ещё в школе, но корпоративные IDE почему-то нет.
:e filename— открыть файл.:w— сохранить файл.:q— закрыть файл.:wq— сохранить и закрыть файл.:bd— закрыть текущий буфер.:split— разделить окно по горизонтали.:vsplit— разделить окно по вертикали.Ctrl-W+w— переключиться между окнами.
Возможно использовать '*' для перехода к следующему вхождению слова под курсором
Дополнительно
J- объединить текущую строку со следующей
Видео «join-lines» не найдено (урок не готов или slug неверный).
Заключение
Все эти команды — не «повышение продуктивности», а способ держать руки на рычагах, а не на мышке. Текст упрямый материал, и тот, кто умеет резать его регистрами, а не тащить курсором по буквам, выигрывает не в скорости, а в характере. Освоив сначала грубые жесты, а потом и тонкие, ты обнаружишь неприятную вещь: обратно к перетаскиванию блоков мышью уже не тянет. Это и есть хардкор — не ради спорта, а потому что старая машина честнее новой обёртки.
Полезные ресурсы
- Vim Tutor — интерактивное руководство по Vim.
- Vimcasts — видеоуроки по использованию Vim.
- Vim документация — официальная документация Vim.
Прочитай их не спеша и проверь каждую команду руками — и текст начнёт слушаться тебя, а не наоборот.