пытаюсь написать файл синтаксиса

и другие vi-подобные редакторы

Модератор: /dev/random

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

jojahti писал(а):
31.12.2009 20:49
И вот я взял свои файлики и хотел продолжить знакомство с редактором в убунте и он даёт этот бред. Какие ещё ^M!?

))) перекодировать надо было. В винде перевод строк - \r\n, а в линуксе - просто \n. И вот на этот \r он и ругается.
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Ой ё-моё я его победил. Поменял форма на unix - и все дела. )

P.S. О. 0_0 оперативно. )
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Вообщем эмм. Ну вот ищется и подсвечивается имя переменной в объявлении. Причём нормально ищется. И подсвечивается тоже нормально, не менее нормально чем ищется.
syn match cTypeAt "\(\(int\|long\|short\|char\|void\| double\)[[:space :]]\+\)\@<=[^[:space:]^(^).]\+\([[:space:]]\)\@="

А вот должно находить эту же переменную, только в произвольном месте.
Тока оно нифига не находит. Вопрос - почему? Что-то не втыкну.
syn match cTypeAtOt "\(\(int\|long\|short\|char\|void\| double\)\([[:space:]] \+\)\([^[:space:]^(^).]\+\)[[:space:]].*\)\@<=\4"
Неужели условие тащится за последовательностью??


P.S.
Строка - "nt ib b kjommpkkp,"
Паттерн - '\(i\(b\)[[:space:]]*\)\@<=\2'
Не работает. Но если убрать \@<= то работает. Этому есть какое-либо не оккультное объяснение?
Ну чё за брееееед :WALL: :WALL: :WALL: ??

P.S.
/dev/random :help:
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

(:help \@<=) писал(а):

Код: Выделить всё

        The part of the pattern after "\@<=" and "\@<!" are checked for a
        match first, thus things like "\1" don't work to reference \(\) inside
        the preceding atom.  It does work the other way around:
        Example                 matches ~
        \1\@<=,\([a-z]\+\)      ",abc" in "abc,abc"
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Ага.

То есть, обойти я могу этот бред, если не буду хранить переменную во вложенных скобках, а скажем пусть будет в первых атомах, но с параметром \=.

Вот строка:
"oooooooBBoooooooBoooo"

Вот паттерн:
'\(B\)\=\1'
Только он нифига не работает. Похоже всё предусмотрено. ))))
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Чему равно значение переменной \1 - условию или найденному значению?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

jojahti писал(а):
02.01.2010 21:20
Чему равно значение переменной \1 - условию или найденному значению?

Значению.
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Есть некоторое подозрение, что я уже достал, но. :unsure:

"\(char[[:space:]]\([^[:space:]]\)[[:space:]]\)\zs\2"

Оно находит:
сhar d d dd
char dddddd dd dd d
char wtf

Такое ощущение что то, что после второго атома как-то неработает?
Почему такая ерунда наблюдается?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

jojahti писал(а):
03.01.2010 11:01
"\(char[[:space:]]\([^[:space:]]\)[[:space:]]\)\zs\2"

Оно находит:
сhar d d dd
char dddddd dd dd d
char wtf

Вообще-то, оно находит вот что:
char a a a
char q werty
char q qwerty

А не то, что вы написали.

Вы уверены, что когда копировали выражение на форум, нигде не ошиблись?
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Перепроверил, перезашёл. Всё именно так как я и написал.
Какую версию и в какой системе вы юзаете?

У меня это в линуксовском виме. Линуксовский гвим у меня вообще в случае с этим паттерном ничего не выделяет. (цвета для консоли и гуя проставил)

Ещё была разница между виндовским гвимом и линуксовским вимом одной версии, в виндовском гвиме не требуется словечко keepend.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

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

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Ой прошу прощения, это выражение вообще не работает, даже так как у вас написано - не работает. )))) Просто выделял у меня другой паттерн.

Так. Вы вообще чего пытаетесь этим выражением добиться?

Ну вообще я пытаюсь сделать подсветку переменных.
Тоесть
\(имя_типа \(имя_переменной\).\=\)\zs\2
Ну то есть что бы она мне нашла последовательность символов, удовлетворяющую имени переменной, и затем нашла и выделила эту переменную на всей протяжённости документа. Приблизительно так. Но как оказалось, не всё так просто. )

А посредством конкретно этого выражением пытаюсь понять - фихли оно не работает.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

jojahti писал(а):
03.01.2010 11:45
Ну то есть что бы она мне нашла последовательность символов, удовлетворяющую имени переменной, и затем нашла и выделила эту переменную на всей протяжённости документа. Приблизительно так. Но как оказалось, не всё так просто. )

А посредством конкретно этого выражением пыаюсь понять понять фихли оно не работает.

По техническим причинам (чтобы вим не завешивал систему на несколько секунд после каждого ввода символа, пока обрабатывает выражения) выражения могут искать либо только в одной строке, либо в двух строках, идущих подряд. Это не говоря о том, что в вашем выражении ошибки. Например, оно предполагает, что имя переменной всегда из одного символа.

Есть только один способ сделать то, о чём вы говорите - скрипт, периодически сканирующий файл и динамически генерирующий правила подсветки.
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Например, оно предполагает, что имя переменной всегда из одного символа.

Ну ещё проверка на скобки, проверка на окончание переменной, условие когда переменная - переменная, а не часть слова. Такие штуки читабельности не прибавляют.

Результат один - это выражение не работает. Почему?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

Я уже объяснил. Во-первых, вы забыли про \+, во-вторых, вим не работает с выражениями, простирающимися более, чем на две строки редактируемого документа (а ваше должно искать переменные даже в разных его концах), и в-третьих, два экземпляра найденных выражений не могут начинаться с одного и того же символа, а значит, даже после приведения к идеальному виду ваше выражение сможет найти не более одного упоминания каждой переменной.
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Да я понял ваши объяснения и замечания, и принял к сведению. Я очень внимательно читаю, что вы пишете. ))

Просто хотел выяснить непонятки с экспериментальным паттерном. Но с ним я уже разобрался. )

Мхххмм. Периодическое сканирование как то ммм. Не катит.
А что, если генерировать скрипт в тот момент, как дописываешь строку. Но что-то в эвентах я конца ввода строки не вижу.

Что-то вим меня начинает напрягать. А что с емаксом, насколько там отличается работа со встроенным языком?
Я се хочу редактор кода, в котором можно натворить что угодно. ))))
Можно конечно писать свой, но я для этого ещё слишком маленький. :D
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

jojahti писал(а):
03.01.2010 12:38
Мхххмм. Периодическое сканирование как то ммм. Не катит.
А что, если генерировать скрипт в тот момент, как дописываешь строку. Но что-то в эвентах я конца ввода строки не вижу.

Нажатие энтера ;)


jojahti писал(а):
03.01.2010 12:38
Что-то вим меня начинает напрягать. А что с емаксом, насколько там отличается работа со встроенным языком?

Лисп. С основами функционального программирования знакомы?


jojahti писал(а):
03.01.2010 12:38
Можно конечно писать свой

Я потихоньку на досуге пишу )) но не уверен, что когда-нибудь закончу.
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Нажатие энтера

И так. Значит оно там есть. :sleep:

Лисп. С основами функционального программирования знакомы?

Неа. Так ради интереса пошаманил с gcl. Порадовало. Но на убунте гкл не работает. И не компилируется. Корректно пашут только старые версии. По лиспу русской литературы почти нету. А в той что есть, идёт какой-то мегазадвиг про тайные языки в разных культурах. Ну и пр.е. Помоему про руны там же было. )

А какая разница, какой язык? Вон в виме явно не предусмотрено то, что я пытаюсь натворить при помощи шаблонов. )
Тут уже парсер намечается. :D
Файл синтаксиса это же посути куча шаблонов через которые прогоняет получившийся текст вим. Мне посути нужно добавить в правила ключевое слово, которое соответствует шаблону. Тем более правилаа мона писать где угодно писать. ЫЫыыы. Новый виток млин. Аааааа!!

Но как уничтожить правило при необходимости? )

Я потихоньку на досуге пишу )) но не уверен, что когда-нибудь закончу.

(с) Каждый программист должен написать свой редактор, свой язык и переписать на нём свой редактор. )))
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

matchstr()
Как в качестве аргмента передать ей содержимое буфера?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

jojahti писал(а):
03.01.2010 17:28
matchstr()
Как в качестве аргмента передать ей содержимое буфера?

getline(1,"$") вернёт список со строками буфера. Объединение списка в одну строку - join(). Можно вместо этого пробежаться по списку в цикле "for item in list" и обработать каждую строку отдельно.
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

echo s:word |" выводит то, что надо
syn keyword Type s:word |" не работает

syn match Type "'".s:word."'"
|"говорит что в конце мусор

Однако если ввести группы на подсветку вручную то всё путём. Что я делаю неправильно? :)
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

:exec
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

А ну да.
А почему если в конфиге не переменную подсунуть а сразу то что надо - оно фурычит?
Почему некоторые вещи в скрипте не работают?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

jojahti писал(а):
03.01.2010 20:12
А почему если в конфиге не переменную подсунуть а сразу то что надо - оно фурычит?

Потому, что он ожидает, что в этом месте будет шаблон. Не строка, не выражение, а именно шаблон. Где-то в начале я упоминал, что это не одно и то же, даже когда шаблон ограничивается кавычками.
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Нда уж. Как то всё кривовато выглядит.

Синтаксис я могу просто зачистить. А затем переинициализировать. Но это как-то корявоватенько.
А мона как-нить очистить заданную ранее группу?
Ну тоесть сделать точно тоже что и syn keyword Type s:word , но наоборот. )
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

:yawn:

Код: Выделить всё

To clean up specific syntax groups for the current buffer: >
  :syntax clear {group-name} ..
This removes all patterns and keywords for {group-name}.
]
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

Ой. И правда. Оно там присутствует. :tongue: Я просто иногда экран с помощью забываю прокручивать. :rolleyes:
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

А как будет <> не равно?? :unsure:
аааа точно !=
Спасибо сказали:

Аватара пользователя
jojahti
Сообщения: 310

Re: пытаюсь написать файл синтаксиса

Сообщение jojahti »

matchstr() Как мне перебрать по очереди все совпадения? Можно задавать по символам, но это не то.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 5105
ОС: Gentoo

Re: пытаюсь написать файл синтаксиса

Сообщение /dev/random »

У matchstr() есть параметр, задающий, какое по счёту совпадение нужно вернуть. Уточните в справке.
Спасибо сказали: