VIM в качестве IDE
Салом КулХацкер!

VIM в качестве IDE, изображение №1
В самом начале пути девелопера, осознавшего что все это время он жил неправильно пока не начал использовать VIM, подстерегают страшные вещи. Одна из них - первичная настройка VIM в качестве IDE. Вооружившись клавой он заходит в гугл - и там ему советуют поставить, значит NerdTree чтобы православно переключаться между файлами - и cscope, чтобы иметь возможность использовать все эти автодополнения кода.

Но тут возникает вопрос. Я же не все время сижу и нашлепываю что-то на C++. Иногда мне надо и html нашлепать и python тоже, и вообще таксказать latex я тоже юзаю. Как жить дальше ?

Сегодня меня наконец достали этим вопросом и я так подумал-подумал и нашлепал вот такой краткий ликбез.

1) Vim на самом деле умеет замечательно распознавать типы файлов. Он магическим образом узнает где тут html а где latex (ну не таким уж и магическим - но не важно). А еще у него есть такая замечательная возможность: использовать для разных файлов свой конфиг.

Для этого, внутри директории с настройками (для Linux это ~/.vim) необходимо создать путь after/ftplugin. Внутри ftplugin можно создавать такие конфиги. Имя этого конфига должно совпадать с типом файла, для которого он предназначен и расширением .vim. Так, для просмотра манов - это man.vim, для Си - это c.vim, LaTex - tex.vim, ассемблер - asm.vim и.т.д.

Вот внутри этих файлов совершенно не напрягаясь и не мудрствуя лукаво можно назначать сочетания клавиш для того чтобы скомпилить/запустить все что угодно.

Для примера - вот что у меня находится в c.vim:

Code:

map <F5> :wall \| make<Cr>:!cscope -R -b<Cr>:cscope add cscope.out<Cr><Cr>:cl<Cr>
А вот tex.vim

Code:

map <F5> :!pdflatex <C-R>%<CR>
Соответственно для разных файлов кнопалка F5 работает по разному. HTML открывает в браузере, компиляет c++, собирает PDF из tex и так далее.

==========================

2) Цветовые схемы. Многие из тех кто пытался найти схему под себя сталкивались с тем что это сделать не так просто как хотелось - бы. Некоторые просто не подходят, некоторые другие работают непредсказуемо. Тоесть при переключении одной на другую появляются всякие чудеса, некоторый текст оказывается темно-синим на черном фоне что доставляет особое удовольствие.

Казалось-бы штука незначительная - но напрягает. А решается она точно так же. В каждом конфиге из п.1 просто прописываем нужную тему. А саму тему создаем сами: ~/.vim/colors/MyCoolName.vim

Начало можно спереть из какой-нибудь другой темы, скажем так:

Code:

highlight clear
if exists("syntax_on")
  syntax reset
endif

set background=dark
set t_Co=256
let g:colors_name="DartPhoenix"

let python_highlight_all = 1
let c_gnu = 1

hi Normal                ctermfg=253         ctermbg=234         cterm=None
hi Cursor               ctermfg=253         ctermbg=57          cterm=None
hi SpecialKey            ctermfg=70          ctermbg=None        cterm=None
hi Directory            ctermfg=57          ctermbg=254         cterm=None
hi ErrorMsg             ctermfg=160         ctermbg=245         cterm=None
hi PreProc                ctermfg=243         ctermbg=None        cterm=Bold
hi Search                ctermfg=234         ctermbg=3           cterm=Bold
hi Type                    ctermfg=166         ctermbg=None        cterm=Bold
hi Statement            ctermfg=172         ctermbg=None        cterm=Bold
hi Comment                ctermfg=240         ctermbg=None        cterm=None
hi LineNr                ctermfg=244         ctermbg=233         cterm=None
hi NonText                ctermfg=105         ctermbg=None        cterm=Bold
hi DiffText                ctermfg=165         ctermbg=244         cterm=None
hi Constant                ctermfg=76          ctermbg=None        cterm=None
hi Todo                 ctermfg=162         ctermbg=None        cterm=Bold
hi Identifier            ctermfg=142         ctermbg=None        cterm=Bold
hi Error                ctermfg=None        ctermbg=196         cterm=Bold
hi Special                ctermfg=172         ctermbg=None        cterm=Bold
hi Ignore               ctermfg=221         ctermbg=None        cterm=Bold
hi Underline            ctermfg=147         ctermbg=None        cterm=Italic

hi FoldColumn            ctermfg=132         ctermbg=None        cterm=None
hi Folded               ctermfg=132         ctermbg=None        cterm=Bold

hi Visual               ctermfg=248         ctermbg=238         cterm=None
а потом - мутить уже свои настройки.

В формате ничего страшного нет, пишем hi НазваниеЭлемента и далее цвета ctermfg, ctermbg, cterm... с этим проблем быть не должно.

Вопрос: где взять название элемента и как это вообще делается.

В конфиг vimrc добавляем такой скрипт:

Code:

" Просмотр цветовой группы текущего элемента текста. Удалить, когда не будет надобности
map <F4> :call <SID>SynStack()<CR>
function! <SID>SynStack()
  if !exists("*synstack")
    return
  endif
  execute 'syntax on'
  redraw
  echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
Скрипт публичный, я его только модифицировал чтобы он обновлял по F4 текущую схему и можно было видеть сразу же произведенные настройки. Это можно сделать и автоматом - но мне лишний раз надавить F4 не сложно, поэтому я не запаривался.

Итого открываем две консоли с vim. Одну с новенькой цветовой схемой - вторую с кодом на c++ например. В окне с кодом перемещаем курсор к слову int, например, и нажимаем F4 (есессно ничто не мешает назначить сею функцию на другую кнопку). В зависимости от настроек vim где-то должна вылезти подсказка "cType". Что мы делаем ? Переключаемся на окно с конфигом цветовой схемы - и там пишем

Code:

hi cType               ctermfg=red         ctermbg=green       cterm=Underline
Сохраняем, переключаемся обратно на окно с кодом и нажимаем F4.

Получаем некое вырвиглазное зрелище.

VIM в качестве IDE, изображение №2
Вырвиглазное оно потому что нормальный человек вместо red и green напишет тот цветовой код, который ему больше нравится. А ненормальный... ему и так хорошо

В результате за часик можно намутить себе вполне приличную и приятную на глаз тему оформления.

Теперь к тому, почему при переключении этих тем могут происходить чудеса. А дело все в том что VIM при переключении этих тем не отменяет настройки, которые были сделаны предыдущей темой. И если в старой схеме есть подсветка int а в новой нет - то переключившись на новую - мы будем все еще иметь подсветку, которая была в старой. Эта проблема примитивно решается каким-то глобальным списком всех сделанных цветовых настроек, которые будут сбрасываться в дефолт. Можно сделать и похитрее - но на начальном этапе вроде-как это не требуется. Тем более ничто не мешает (кроме чувства эстетики и стремления к прекрасному) сделать таким образом одну тему на все случаи жизни.

=============================

Пока как-то так.

:)
:)