Но это требует некоторой доводки.
Автор решил устроить себе среду разработки на Vim, простую, с поддержкой нескольких языков и многофайловых проектов. Просканировал интернет, но такое, чтобы всё полностью устраивало, не нашлось. Одно казалось громоздким, другое - трудно управляемым, в третьем недоставало функциональности. В итоге сделал сам. Рассказываю всем желающим, что получилось (оговорюсь сразу, по-моему, очень даже неплохо!).
Статья состоит из трех частей. В первой описываются настройки, необходимые для работы скриптов, а также настройки, просто делающие Vim более удобным.
Вторая часть посвящена настройке запуска программ из Vim. Она, в свою очередь, состоит из двух частей: первая описывает запуск на исполнение одиночного файла, вторая - многофайловый проект.
В третьей части описывается простой пример использования данной разработки, там же я немного коснулся работы с Git (с учетом нашей специфики).
Все плагины и скрипты написаны автором и могут использоваться всеми желающими по своему усмотрению. Автор надеется на осознанное применение всего, что есть в статье, и отказывается нести какую-либо ответственность за последствия применения кем бы то ни было и где бы то ни было приведенных в статье настроек и программного кода. Для чтения статьи требуется некоторое знакомство с Linux, Vim, Vimscript и Bash. Также, если будете читать в третьей части о Git, нужно иметь о нём представление.
Проект на GitVerse:
https://gitverse.ru/shodanovich/replvim/content/master
-
Базовые настройки Vim.
В этой части статьи описаны базовые настройки
Vim, которые находятся в его конфиге~/.vimrc. Часть настроек необходима для работы скриптов и плагинов, другая (необязательная) просто делает редактор удобнее.Запуск
Vimв режиме вставки.
Это первое, что я сделал. Чтобы не путать педали. По умолчанию Vim запускается в так называемом нормальном режиме, в котором сосредоточено всё управление и, чтобы начать работать, то есть перейти в режим вставки, надо нажимать еще клавишу, что меня, признаться, напрягает. Поэтому настроил запуск в режиме вставки и перенес нужное мне управление в этот режим (как это сделано в большинстве других редакторов). Чтобы это реализовать, потребуется добавить в файл конфигурации ~/.bashrc (это конфиг для bash) строчки:
# запуск vim в режиме вставки alias vim="vim -c 'startinsert'"
Первая строка - комментарий, вторая говорит системе: если команда - vim, то запускать то, что справа от знака равенства, т. е. Vim в режиме вставки.
Чтобы два раза не открывать конфиг, добавим в него еще строку
export PATH="$PATH:~/.local/bin"
Это будет путь для запуска скрипта на Bash, создающего проект для редактирования в Vim (об этом речь во второй части).
Чтобы изменения в ~/.bashrc вступили в силу, перезагружаемся или запускаем команду
$ source ~/.bashrc
-
2. Установки.
Как уже говорилось,
~/.vimrc- это конфиг дляVim, определяющий его настройки. Чтобы не загромождать статью, полностью я его здесь не привожу (Полностью~/vimrcможно посмотреть или скачать сGitVerseпо ссылке во вступлении). Опишу установки, необходимые для правильной работы скриптов.
filetype plugin indent on
Благодаря этой опции Vim сможет определить тип файла, настроить автоотступы, запустить скрипты и плагины.
syntax on
Определение синтаксиса и раскраска текста
-
3. Сопоставления.
Написаны они так, чтобы
- командовать редактором в основном из режима вставки и
- не отходить далеко от оригинальных команд Vim.
Это мой произвольный выбор. Читатель может применить свои буквосочетания.
Разберём некоторые сопоставления." удалить строку
inoremap <C-d> <Esc>ddi
Расшифровываем слово “inoremap” справа налево: “map” - сопоставление, “nore” - без рекурсии (везде это вставляю, чтобы Vim не запутался), “i” - режим вставки. Далее, <C-d> - это одновременное нажатие Ctrl+d. Этому нажатию сопоставляется последовательность команд - <Esc> - переход в нормальный режим; dd - удаление текущей строки; i - переход обратно в режим вставки. Как видите, синтаксис нехитрый.
Продолжаем разбирать маппинг. Выделение фрагмента и работа с ним:" Ctrl-v - режим визуальный посимвольный
inoremap <C-v> <Esc>v
" удаление того, что выделено, с переходом в режим вставки
" (далее по Ctrl-p можем вставить фрагмент в другом месте; получится перенос) vnoremap <Del> <Del>i
" копирование выделенного фрагмента с переходом в режим вставки
" (далее по Ctrl-p можем вставить фрагмент)
vnoremap y yi
vnoremap - это сопоставление в визуальном режиме; есть ещё nnoremap - сопоставление в нормальном режиме, и мы его также будем использовать.
" очистить строку
inoremap <C-d> <Esc>ddi
" удалить до конца строки по Ctrl-стрелка вправо
inoremap <C-Right> <Esc><Right>d$i " $ здесь - перейти в конец строки
" удалить до конца слова
inoremap <C-S-Right> <Esc>dei
Аналогично можно сделать сопоставление - удаление от текущего символа до начала строки или слова. Оставляю это читателю для самостоятельной работы.
" Ctrl-y копируем строку в буфер
inoremap <C-y> <Esc>yyi
" Вставка строки (блока) из буфера с переходом в режим вставки
inoremap <C-p> <Esc>pi
" запись всех табов
inoremap <C-w> <Esc>:wa<Enter>i
" выход из редактора (из всех табов)
inoremap <C-q> <Esc>:qa<Enter>
В данной порции кода всё понятно благодаря комментариям. Последние два сопоставления удобно использовать, если редактируется несколько файлов в разных вкладках, для сохранения изменений и выхода из редактора.
" Отмена
inoremap <C-u> <Esc>ui
Можно отменить до 1000 последних действий; если этого недостаточно, откорректируйте строку
set history=1000
"Ctrl-f поиск из режима вставки
inoremap <C-f> <Esc>/
Эта команда не возвращает нас в режим вставки автоматически. Дальнейшее управление поиском осуществляем из нормального режима (n - искать далее, p - искать предыдущее). В режим вставки переходим вручную (i).
Если вы с помощью сопоставления не переопределили стандартную команду, то она продолжает действовать, и ей можно пользоваться. Например, я часто использую автодополнение Ctrl-n (Есть еще Ctrl-p, но у меня эта команда переопределена для вставки из буфера обмена).
-
3. Полезные мелочи.
1. 3. 1. Комментарии
Для вставки комментариев на каком-либо языке воспользуемся двумя сопоставлениями.
"Переход в визуальный блочный режим
inoremap <C-b> <Esc><C-v>
" Вставляем комментарий и переходим в режим вставки
vnoremap <Ins> <Esc>:source ~/.vim/ftplugin/comment.vim<Enter>iПоследовательность действий: устанавливаем курсор на первый символ блока, переходим в визуальный блочный режим (
C-b) и выделяем стрелками или фигурными скобками строки для комментария. НажимаемIns, и срабатывает скрипт~/.vim/ftplugin/comment.vim,который мы сейчас разберем.
" ~/.vim/ftplugin/comment.vim" Знак комментария в выделенном блокеif !exists("b:current_syntax") echoe "Данный синтаксис не обрабатывается" finish endiflet start_line = line("'<") let end_line = line("'>")for nom_line in range(start_line, end_line) execute nom_line if b:current_syntax == 'ruby' || b:current_syntax == 'python' normal I# elseif b:current_syntax == 'asm' || b:current_syntax == 'vim' normal I" elseif b:current_syntax == 'java' normal I// endifendfor
Вначале смотрим, определился ли синтаксис (наличие переменной b:current_syntax). Если синтаксис не определился, выходим из скрипта с ошибкой "Данный синтаксис не обрабатывается". Далее определяем первую (line("'<")) и последнюю (line("'>"))строку блока. В цикле устанавливаем курсор на очередную строку блока (execute nom_line) и проверяем синтаксис текущей строки. В зависимости от языка пишем в начале строки нужный символ комментария. Например, для Java - //.
Код элементарный, и читатель, если не найдет здесь комментариев для языка, на котором работает, может легко его модифицировать.
Для отмены комментария переходим снова в визуальный блочный режим, выделяем закомментированные строки и нажимаем Del:
vnoremap <Del> <Del>i
-
3. 2. Сокращения
Смысл сокращений в том, чтобы закодировать длинные или часто повторяющиеся строки текста с помощью какого-то буквосочетания. Затем в тексте мы можем набрать это своё сочетание и получить в редактируемом файле нужную строку.
Разбираем плагин
~/.vim/plugin/abbrev.vim.
autocmd FileType java iabbrev main public static void main(String[] args) { autocmd FileType java iabbrev ppp System.out.print autocmd FileType ruby iabbrev get get '/' do end
Он, как и все плагины из каталога ~/.vim/plugin, срабатывает каждый раз при старте редактора; это как бы продолжение ~/vimrc.
Для пример разберем первую строку плагина. autocmd FileType java - обработка события "Тип файла java". В этом случае срабатывает сокращение в режиме вставки (iabbrev) и слово main заменяется на строку public static void main(String[] args) {
В редакторе, чтобы это сокращение сработало, набираем main+пробел (или Enter).
Продолжение следует.
Комментарии (20)

JoshMil
23.04.2026 13:31Имхо, vim есть в стандартной установке любого линукс. И при некоторой практике просто привыкаешь и начинаешь его подпиливать мал по малу. Так и выходит в итоге потом что ты на нем местами код пишешь. Так что все логично.

winorun
23.04.2026 13:31Нету Vim в стандартной установки любого linux. Вернее есть, но это огрызок, да еще и в режиме совместимости с vi. А в vi в отличии от vim стрелки не работают, нет бара, автодополнения и т.д.

apevzner
23.04.2026 13:31Запуск Vim в режиме вставки.
Как известно, у редактора vi есть всего два режима. В одном он пищит, в другом портит текст.
Зачем же сходу отламывать полезный режим?

checkpoint
23.04.2026 13:31Не перестаю удивляться зачем людям столько фичь в текстовом редакторе. Много лет назад я заучил до автоматизма с десяток команд редактора vi и этого мне более чем достаточно для решения любой задачи редактирования текстовых файлов.

winorun
23.04.2026 13:31Например надо инклуд вставить который не помнишь ни где лежит ни как назывется ctrl+x, ctrl+f выручает. А в vi не работает. Еще например когда забыл как слово пишется, помогает автодополнение по буферу. Сниперы опять же. Да много мелочей которые улучшают набор и редактирования текста.
P.S. А для решения любой задачи редактирования текстовых файлов в vi хватает трех команд, но Вы же тоже ими не ограничились

checkpoint
23.04.2026 13:31Например надо инклуд вставить который не помнишь ни где лежит ни как назывется
Например, мы хотим найти где объявлена функция printf. Для этого воспользуемся командой grep вызвав её прямо из редактора vi со вставкой результата в редактируемый файл, жмем:
:r! grep -r ’ printf(’ /usr/includeУдаляем лишнее.
Команды ! и r - это классика, их знает каждый пользователь редактора vi.

SpiderEkb
23.04.2026 13:31Тут речь не про редактирование текстовых файлов, но про написание кода. А это поболе чем просто редактировать текст.

checkpoint
23.04.2026 13:31Я пишу код. Бывает, что очень много. LLM не использую. B c моей точки зрения написание кода это редактирование текста.

SpiderEkb
23.04.2026 13:31Не только. Кроме всякой подсветки синтаксиса, автодополнений и прочего есть еще, например, окошко outline
где показывается структура модуля с которым работаешь.
Есть работа с удаленным сервером. Я вот пишу под IBM i - там без возможности работать с удаленным сервером очень скучно - не все используемые объекты есть на локале, какие-то инклуды могут быть на удаленном сервере (и тот же VSCode + IBM i Development Pack позволяет их посмотреть без загрузки на локал).
Бывает что нужно работать с экранными формами которые пишутся на DDS (Data Defenition Specifications)
И для них есть preview (что тоже очень удобно)
Есть работа с гитом, например, get line history - история изменений конкретной строки кода
Есть git graph
Если работаешь с документацией в adoc, опять же, есть режим preview
Т.е. на 99% все можно делать внутри одного IDE. Просто установкой нужного набора плагинов.
Сколько времени уйдет на то, чтобы хоть как-то приблизить VIM к такому набору возможностей?

winorun
23.04.2026 13:31Для редактирования кода лучше все же использовать neovim, у него есть несколько приятных мелочей. А Vim хорош для администрирования системы.
Советую также ознакомится с книгой Дрю Нейла «Практическое использование Vim». Режим vim не просто так в IDE добавляют, точка иногда очень сильно помогает при рефакторинге.
tenzink
Непонятно только, если автору настолько не нравится "нормальный" режим, зачем вообще брать vim? Есть же много других отличных редакторов, построенных вокруг режима "вставки".
amcured
А еще непонятно, зачем в 2026 брать голый VIm, когда даже самые кондовые олды попереходили на всякие SpaceVim/LunarVim, да хоть просто NeoVim, где вся настройка происходит по ходу пьесы.
Nagdiel
Использовать готовую сборку или конфигурировать с нуля - это дело вкуса и поставленных перед собой целей. Но вот выбирать сейчас классический vim (именно в контексте создания легковесной IDE) я бы и в самом деле не стал. Основным разработчиком Vim на протяжении более 30 лет, вплоть до своей смерти в августе 2023 года, был Bram Moolenaar (rip). Сейчас проект поддерживают, но он скорее находится в режиме поддержки, чем активного развития. В основном сообщество действительно пересело на NeoVim, который является логичным развитием vim-философии и привносит ряд принципиальных улучшений, таких как конфиги на Lua, встроенный LSP, клиент-серверная архитектура.
tenzink
Я использую "голый" vim с несколькими плагинами и небольшим конфигом, но я и не пытаюсь его использовать как IDE. Для этого VS Code + vim mode
amcured
Мне в виме привычнее и удобнее.
Emergy
Я много лет сидел на "голом" VIM'е, с несколькими плагинами. Когда пересел на VScode, продуктивность выросла на порядки. Сейчас в основном VScode, частенько AstroNvim (особенно очень удобно на телефоне в Termux) и просматриваю в сторону Zed. Последний очень нравится. Особенно VIM mode из коробки. Но он пока не соответствует моим требованиям. Статья ни о чем если честно. С режимом вставки по дефолту - точно не Vim way. Хотя бы просто перейти к позиции вставки - это уже кучка команд в нормальном режиме. Зачем вставка по дефолту, я не понимаю.
Nagdiel
Я вот тоже изрядно удивлен предлагаемым подходом. Всегда считал, что модальность - главная фишка vim, а остальное это уже приятный бонус. Понимаю, зачем включают в Emacs Evil-mode, но вот зачем делать наоборот, особенно сейчас, когда расширяемых легковесных редакторов более чем достаточно, не ясно. Было бы интересно услышать мотивацию автора по выбору vim и почему, выбрав vim для своих задач, он пошел именно по такому пути, отказавшись по сути от модальности в редакторе.
balaclava_boris
буквально сделал из Вима emacs. Это что получается, doom emacs наоборот?