惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
I
InfoQ
博客园_首页
G
Google Developers Blog
爱范儿
爱范儿
Last Week in AI
Last Week in AI
量子位
阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
月光博客
月光博客
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
N
Netflix TechBlog - Medium
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
С Vim удобно программировать (часть I)
Oldchip · 2026-04-23 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение6 мин

Охват и читатели994

Туториал

Но это требует некоторой доводки.

Автор решил устроить себе среду разработки на Vim, простую, с поддержкой нескольких языков и многофайловых проектов. Просканировал интернет, но такое, чтобы всё полностью устраивало, не нашлось. Одно казалось громоздким, другое - трудно управляемым, в третьем недоставало функциональности. В итоге сделал сам. Рассказываю всем желающим, что получилось (оговорюсь сразу, по-моему, очень даже неплохо!).

Статья состоит из трех частей. В первой описываются настройки, необходимые для работы скриптов, а также настройки, просто делающие Vim более удобным.

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

В третьей части описывается простой пример использования данной разработки, там же я немного коснулся работы с Git (с учетом нашей специфики).

Все плагины и скрипты написаны автором и могут использоваться всеми желающими по своему усмотрению. Автор надеется на осознанное применение всего, что есть в статье, и отказывается нести какую-либо ответственность за последствия применения кем бы то ни было и где бы то ни было приведенных в статье настроек и программного кода. Для чтения статьи требуется некоторое знакомство с Linux, Vim, Vimscript и Bash. Также, если будете читать в третьей части о Git, нужно иметь о нём представление.

Проект на GitVerse:

https://gitverse.ru/shodanovich/replvim/content/master

  1. Базовые настройки Vim.

    В этой части статьи описаны базовые настройки Vim, которые находятся в его конфиге ~/.vimrc. Часть настроек необходима для работы скриптов и плагинов, другая (необязательная) просто делает редактор удобнее.

    1. Запуск Vim в режиме вставки.

Это первое, что я сделал. Чтобы не путать педали. По умолчанию Vim запускается в так называемом нормальном режиме, в котором сосредоточено всё управление и, чтобы начать работать, то есть перейти в режим вставки, надо нажимать еще клавишу, что меня, признаться, напрягает. Поэтому настроил запуск в режиме вставки и перенес нужное мне управление в этот режим (как это сделано в большинстве других редакторов). Чтобы это реализовать, потребуется добавить в файл конфигурации ~/.bashrc (это конфиг для bash) строчки:

# запуск vim в режиме вставки
alias vim="vim -c 'startinsert'"

Первая строка - комментарий, вторая говорит системе: если команда - vim, то запускать то, что справа от знака равенства, т. е. Vim в режиме вставки.
Чтобы два раза не открывать конфиг, добавим в него еще строку

export PATH="$PATH:~/.local/bin"

Это будет путь для запуска скрипта на Bash, создающего проект для редактирования в Vim (об этом речь во второй части).

Чтобы изменения в ~/.bashrc вступили в силу, перезагружаемся или запускаем команду

$ source ~/.bashrc
  1. 2. Установки.

    Как уже говорилось, ~/.vimrc - это конфиг для Vim, определяющий его настройки. Чтобы не загромождать статью, полностью я его здесь не привожу (Полностью ~/vimrc можно посмотреть или скачать с GitVerse по ссылке во вступлении). Опишу установки, необходимые для правильной работы скриптов.

filetype plugin indent on

Благодаря этой опции Vim сможет определить тип файла, настроить автоотступы, запустить скрипты и плагины.

syntax on

Определение синтаксиса и раскраска текста

  1. 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, но у меня эта команда переопределена для вставки из буфера обмена).

  1. 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
endif

let 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//
endif
endfor

Вначале смотрим, определился ли синтаксис (наличие переменной b:current_syntax). Если синтаксис не определился, выходим из скрипта с ошибкой "Данный синтаксис не обрабатывается". Далее определяем первую (line("'<")) и последнюю (line("'>"))строку блока. В цикле устанавливаем курсор на очередную строку блока (execute nom_line) и проверяем синтаксис текущей строки. В зависимости от языка пишем в начале строки нужный символ комментария. Например, для Java - //.
Код элементарный, и читатель, если не найдет здесь комментариев для языка, на котором работает, может легко его модифицировать.

Для отмены комментария переходим снова в визуальный блочный режим, выделяем закомментированные строки и нажимаем Del:

vnoremap <Del> <Del>i

  1. 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).

Продолжение следует.