В самом начале пути девелопера, осознавшего что все это время он жил неправильно пока не начал использовать 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. Получаем некое вырвиглазное зрелище. Вырвиглазное оно потому что нормальный человек вместо red и green напишет тот цветовой код, который ему больше нравится. А ненормальный... ему и так хорошо В результате за часик можно намутить себе вполне приличную и приятную на глаз тему оформления. Теперь к тому, почему при переключении этих тем могут происходить чудеса. А дело все в том что VIM при переключении этих тем не отменяет настройки, которые были сделаны предыдущей темой. И если в старой схеме есть подсветка int а в новой нет - то переключившись на новую - мы будем все еще иметь подсветку, которая была в старой. Эта проблема примитивно решается каким-то глобальным списком всех сделанных цветовых настроек, которые будут сбрасываться в дефолт. Можно сделать и похитрее - но на начальном этапе вроде-как это не требуется. Тем более ничто не мешает (кроме чувства эстетики и стремления к прекрасному) сделать таким образом одну тему на все случаи жизни. ============================= Пока как-то так.
Кому-как. У меня просто i3 стоит, мне окошки от emacs'а не очень-то и нужны. Какбэ i3+emacs это уже перебор. Но вообще я как-то попробовал кнопать на нем - не нравятся все эти сочетания клавиш от слова "вообще". Можно допилить и сделать как в vim, но зачем делать как в vim если есть vim