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

Автор решил устроить себе среду разработки на 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).

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