Лого на страниците (малко).

Заглавна страница > Четива > Четива за глотометрията > cream в режим „expert“ > 25. Макроезик

Система Orphus

Ако забележите грешка, маркирайте израза с мишката и натиснете Control+Enter. Благодаря!

Александър Иванов

cream в режим „expert“

25. Макроезик

При работа с някаква програма често се налага многократно да се повтаря някаква поредица от команди. Близко до ума е тази поредица от команди да се „пакетира“ и да се изпълнява като една „макрокоманда“. И в много програми тази възможност беше създадена отдавна. Макрокомандите полека-лека започнаха да оформят „макроезик“. Разбира се, аз говоря за праисторически времена от преди няколко десетилетия.

По-късно информатиците започнаха да вграждат в програмите истински интерпретатори на програмни езици, но терминът макроезик остана. Така в програмите от офис пакета на Microsoft има вграден бейсик (Visual Basic for Applications — VBA), в OpenOffice.org и в братчето му LibreOffice също се използва вариант на бейсик — OpenOffice.org Basic, а в много програми с отворен код се използват и интерпретаторите на пайтън (Python) или пърл (Perl) като макроезик. Vim не прави изключение — в него е разработен собствен интерпретатор за макроезик, който наричат Vimscript (или VimL), а може да се използват и много интерпретатори за други програмни езици.

Особеност на макроезиците е, че са специализирани да работят с елементи („обекти“) от съответната програма — така в примера от предишния раздел командата let е на макроезика на vim, а префиксът @ показва на интерпретатора, че се „прихваща“ регистър на програмата vim. Може да се прихваща още и текстов буфер, и ред, и маркирания текст, и т. н.

За да се изучи вграденият програмен език на vim, се изискват известно време и усилия. Но в интернет са достъпни и множество сценарии (англ. scripts — така наричат програмите за интерпретатори), написани на Vimscript, които можем да използваме без кой знае каква подготовка. Ще дам пример за това с функцията CopyMatches — тя копира резултата от търсенето в паметта за временно съхраняване.

Забележка: Функцията, която предоставям тук, аз свалих преди известно време от страницата Copy search matches – Vim Tips Wiki. Ама… това е страница от уикипедията, тя междувременно беше редактирана и разширена, а функцията CopyMatches също е редактирана. Така че моите обяснения са за по-стария вариант на функцията, който аз предоставям тук. След това експериментирайте и с новия вариант на функцията — той много хубаво си работи, но има дребни различия. Намерете функцията и я копирайте в паметта за временно съхраняване на системата (Ctrl+C). Отворете нов текстов буфер в cream (в текстовия режим на cream използвайте Ctrl+N, а в режима „експерт“ — командата :new) и копирайте в него текста на функцията. Запишете я във файл с име CopyMatches.vim — разширението .vim е задължително. То показва на редактора, че файлът съдържа програмен текст или настройки за vim.

Затворете файла и го отворете отново. Ще видите, че различни части от текста са различно оцветени — по разширението редакторът е разпознал типа на файла и „оцветява синтаксиса“ — има се предвид синтаксисът на програмния език. Това помага на хората, които пишат програми. Ако започнете да пишете програми (а защо не?), много ще сте благодарни за „оцветяването на синтаксиса“.

За да направите обаче тази функция действаща, трябва да използвате командата :source (съкращава се до :so):

:so CopyMatches.vim

Редакторът изчита файла като програма (не като текст!) и е готов да изпълни функцията. Така ние фактически добавяме още една команда към командния език на редактора. И тази възможност е много, ама много хубава!

Как се използва тази функция, съм показал в примерите — вж. Конкорданс.

А накрая — нещо още по-сладко: vim дава възможност да си пишете такива „макропрограмки“ и на други интерпретаторни езици като пайтън (Python), пърл (Perl), руби (Ruby), Tcl и пр., тоест, ако знаете друг програмен език, няма да е нужно да изучавате Vimscript в подробности. В примерите показвам една полезна функция, написана на пайтън.

Страница: А. И.
Електронна поща
Дата на публикуване: 15.V.2014
Последна редакция: 19.II.2018
Съобразено с
html5/css3