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