ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Статьи (https://forum.antichat.xyz/forumdisplay.php?f=30)
-   -   VIM в качестве IDE (https://forum.antichat.xyz/showthread.php?t=483221)

DartPhoenix 13.03.2021 19:56

В самом начале пути девелопера, осознавшего что все это время он жил неправильно пока не начал использовать 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:

Код:

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

Код:

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

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

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

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

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

Код:

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 добавляем такой скрипт:

Код:

" Просмотр цветовой группы текущего элемента текста. Удалить, когда не будет надобности
map  :call SynStack()
function! 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". Что мы делаем ? Переключаемся на окно с конфигом цветовой схемы - и там пишем

Код:

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

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

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

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

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

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

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

web456web 22.04.2021 01:59

https://cdn.activestate.com/wp-conte...dit-vs-ide.png

Komodo Edit - редактор web-кода (html, php, css)...

jixe 03.05.2021 19:41

Emacs?

DartPhoenix 03.05.2021 19:47

Цитата:

Сообщение от jixe

Emacs?

Кому-как. У меня просто i3 стоит, мне окошки от emacs'а не очень-то и нужны. Какбэ i3+emacs это уже перебор.

Но вообще я как-то попробовал кнопать на нем - не нравятся все эти сочетания клавиш от слова "вообще". Можно допилить и сделать как в vim, но зачем делать как в vim если есть vim


Время: 18:27