))) перекодировать надо было. В винде перевод строк - \r\n, а в линуксе - просто \n. И вот на этот \r он и ругается.
пытаюсь написать файл синтаксиса
Модератор: /dev/random
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
))) перекодировать надо было. В винде перевод строк - \r\n, а в линуксе - просто \n. И вот на этот \r он и ругается.
Re: пытаюсь написать файл синтаксиса
Ой ё-моё я его победил. Поменял форма на unix - и все дела. )
P.S. О. 0_0 оперативно. )
P.S. О. 0_0 оперативно. )
Re: пытаюсь написать файл синтаксиса
Вообщем эмм. Ну вот ищется и подсвечивается имя переменной в объявлении. Причём нормально ищется. И подсвечивается тоже нормально, не менее нормально чем ищется.
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
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
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
(: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"
Re: пытаюсь написать файл синтаксиса
Ага.
То есть, обойти я могу этот бред, если не буду хранить переменную во вложенных скобках, а скажем пусть будет в первых атомах, но с параметром \=.
Вот строка:
"oooooooBBoooooooBoooo"
Вот паттерн:
'\(B\)\=\1'
Только он нифига не работает. Похоже всё предусмотрено. ))))
То есть, обойти я могу этот бред, если не буду хранить переменную во вложенных скобках, а скажем пусть будет в первых атомах, но с параметром \=.
Вот строка:
"oooooooBBoooooooBoooo"
Вот паттерн:
'\(B\)\=\1'
Только он нифига не работает. Похоже всё предусмотрено. ))))
Re: пытаюсь написать файл синтаксиса
Чему равно значение переменной \1 - условию или найденному значению?
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
Есть некоторое подозрение, что я уже достал, но.
"\(char[[:space:]]\([^[:space:]]\)[[:space:]]\)\zs\2"
Оно находит:
сhar d d dd
char dddddd dd dd d
char wtf
Такое ощущение что то, что после второго атома как-то неработает?
Почему такая ерунда наблюдается?
"\(char[[:space:]]\([^[:space:]]\)[[:space:]]\)\zs\2"
Оно находит:
сhar d d dd
char dddddd dd dd d
char wtf
Такое ощущение что то, что после второго атома как-то неработает?
Почему такая ерунда наблюдается?
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
Вообще-то, оно находит вот что:
char a a a
char q werty
char q qwerty
А не то, что вы написали.
Вы уверены, что когда копировали выражение на форум, нигде не ошиблись?
Re: пытаюсь написать файл синтаксиса
Перепроверил, перезашёл. Всё именно так как я и написал.
Какую версию и в какой системе вы юзаете?
У меня это в линуксовском виме. Линуксовский гвим у меня вообще в случае с этим паттерном ничего не выделяет. (цвета для консоли и гуя проставил)
Ещё была разница между виндовским гвимом и линуксовским вимом одной версии, в виндовском гвиме не требуется словечко keepend.
Какую версию и в какой системе вы юзаете?
У меня это в линуксовском виме. Линуксовский гвим у меня вообще в случае с этим паттерном ничего не выделяет. (цвета для консоли и гуя проставил)
Ещё была разница между виндовским гвимом и линуксовским вимом одной версии, в виндовском гвиме не требуется словечко keepend.
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
Так. Вы вообще чего пытаетесь этим выражением добиться?
Re: пытаюсь написать файл синтаксиса
Ой прошу прощения, это выражение вообще не работает, даже так как у вас написано - не работает. )))) Просто выделял у меня другой паттерн.
Ну вообще я пытаюсь сделать подсветку переменных.
Тоесть
\(имя_типа \(имя_переменной\).\=\)\zs\2
Ну то есть что бы она мне нашла последовательность символов, удовлетворяющую имени переменной, и затем нашла и выделила эту переменную на всей протяжённости документа. Приблизительно так. Но как оказалось, не всё так просто. )
А посредством конкретно этого выражением пытаюсь понять - фихли оно не работает.
Так. Вы вообще чего пытаетесь этим выражением добиться?
Ну вообще я пытаюсь сделать подсветку переменных.
Тоесть
\(имя_типа \(имя_переменной\).\=\)\zs\2
Ну то есть что бы она мне нашла последовательность символов, удовлетворяющую имени переменной, и затем нашла и выделила эту переменную на всей протяжённости документа. Приблизительно так. Но как оказалось, не всё так просто. )
А посредством конкретно этого выражением пытаюсь понять - фихли оно не работает.
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
jojahti писал(а): ↑03.01.2010 11:45Ну то есть что бы она мне нашла последовательность символов, удовлетворяющую имени переменной, и затем нашла и выделила эту переменную на всей протяжённости документа. Приблизительно так. Но как оказалось, не всё так просто. )
А посредством конкретно этого выражением пыаюсь понять понять фихли оно не работает.
По техническим причинам (чтобы вим не завешивал систему на несколько секунд после каждого ввода символа, пока обрабатывает выражения) выражения могут искать либо только в одной строке, либо в двух строках, идущих подряд. Это не говоря о том, что в вашем выражении ошибки. Например, оно предполагает, что имя переменной всегда из одного символа.
Есть только один способ сделать то, о чём вы говорите - скрипт, периодически сканирующий файл и динамически генерирующий правила подсветки.
Re: пытаюсь написать файл синтаксиса
Например, оно предполагает, что имя переменной всегда из одного символа.
Ну ещё проверка на скобки, проверка на окончание переменной, условие когда переменная - переменная, а не часть слова. Такие штуки читабельности не прибавляют.
Результат один - это выражение не работает. Почему?
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
Я уже объяснил. Во-первых, вы забыли про \+, во-вторых, вим не работает с выражениями, простирающимися более, чем на две строки редактируемого документа (а ваше должно искать переменные даже в разных его концах), и в-третьих, два экземпляра найденных выражений не могут начинаться с одного и того же символа, а значит, даже после приведения к идеальному виду ваше выражение сможет найти не более одного упоминания каждой переменной.
Re: пытаюсь написать файл синтаксиса
Да я понял ваши объяснения и замечания, и принял к сведению. Я очень внимательно читаю, что вы пишете. ))
Просто хотел выяснить непонятки с экспериментальным паттерном. Но с ним я уже разобрался. )
Мхххмм. Периодическое сканирование как то ммм. Не катит.
А что, если генерировать скрипт в тот момент, как дописываешь строку. Но что-то в эвентах я конца ввода строки не вижу.
Что-то вим меня начинает напрягать. А что с емаксом, насколько там отличается работа со встроенным языком?
Я се хочу редактор кода, в котором можно натворить что угодно. ))))
Можно конечно писать свой, но я для этого ещё слишком маленький.
Просто хотел выяснить непонятки с экспериментальным паттерном. Но с ним я уже разобрался. )
Мхххмм. Периодическое сканирование как то ммм. Не катит.
А что, если генерировать скрипт в тот момент, как дописываешь строку. Но что-то в эвентах я конца ввода строки не вижу.
Что-то вим меня начинает напрягать. А что с емаксом, насколько там отличается работа со встроенным языком?
Я се хочу редактор кода, в котором можно натворить что угодно. ))))
Можно конечно писать свой, но я для этого ещё слишком маленький.
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
Нажатие энтера
Лисп. С основами функционального программирования знакомы?
Я потихоньку на досуге пишу )) но не уверен, что когда-нибудь закончу.
Re: пытаюсь написать файл синтаксиса
Нажатие энтера
И так. Значит оно там есть.
Лисп. С основами функционального программирования знакомы?
Неа. Так ради интереса пошаманил с gcl. Порадовало. Но на убунте гкл не работает. И не компилируется. Корректно пашут только старые версии. По лиспу русской литературы почти нету. А в той что есть, идёт какой-то мегазадвиг про тайные языки в разных культурах. Ну и пр.е. Помоему про руны там же было. )
А какая разница, какой язык? Вон в виме явно не предусмотрено то, что я пытаюсь натворить при помощи шаблонов. )
Тут уже парсер намечается.
Файл синтаксиса это же посути куча шаблонов через которые прогоняет получившийся текст вим. Мне посути нужно добавить в правила ключевое слово, которое соответствует шаблону. Тем более правилаа мона писать где угодно писать. ЫЫыыы. Новый виток млин. Аааааа!!
Но как уничтожить правило при необходимости? )
Я потихоньку на досуге пишу )) но не уверен, что когда-нибудь закончу.
(с) Каждый программист должен написать свой редактор, свой язык и переписать на нём свой редактор. )))
Re: пытаюсь написать файл синтаксиса
matchstr()
Как в качестве аргмента передать ей содержимое буфера?
Как в качестве аргмента передать ей содержимое буфера?
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
echo s:word |" выводит то, что надо
syn keyword Type s:word |" не работает
syn match Type "'".s:word."'" |"говорит что в конце мусор
Однако если ввести группы на подсветку вручную то всё путём. Что я делаю неправильно?
syn keyword Type s:word |" не работает
syn match Type "'".s:word."'" |"говорит что в конце мусор
Однако если ввести группы на подсветку вручную то всё путём. Что я делаю неправильно?
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
А ну да.
А почему если в конфиге не переменную подсунуть а сразу то что надо - оно фурычит?
Почему некоторые вещи в скрипте не работают?
А почему если в конфиге не переменную подсунуть а сразу то что надо - оно фурычит?
Почему некоторые вещи в скрипте не работают?
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
Потому, что он ожидает, что в этом месте будет шаблон. Не строка, не выражение, а именно шаблон. Где-то в начале я упоминал, что это не одно и то же, даже когда шаблон ограничивается кавычками.
Re: пытаюсь написать файл синтаксиса
Нда уж. Как то всё кривовато выглядит.
Синтаксис я могу просто зачистить. А затем переинициализировать. Но это как-то корявоватенько.
А мона как-нить очистить заданную ранее группу?
Ну тоесть сделать точно тоже что и syn keyword Type s:word , но наоборот. )
Синтаксис я могу просто зачистить. А затем переинициализировать. Но это как-то корявоватенько.
А мона как-нить очистить заданную ранее группу?
Ну тоесть сделать точно тоже что и syn keyword Type s:word , но наоборот. )
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
Код: Выделить всё
To clean up specific syntax groups for the current buffer: >
:syntax clear {group-name} ..
This removes all patterns and keywords for {group-name}.
Re: пытаюсь написать файл синтаксиса
Ой. И правда. Оно там присутствует. Я просто иногда экран с помощью забываю прокручивать.
Re: пытаюсь написать файл синтаксиса
А как будет <> не равно??
аааа точно !=
аааа точно !=
Re: пытаюсь написать файл синтаксиса
matchstr() Как мне перебрать по очереди все совпадения? Можно задавать по символам, но это не то.
- /dev/random
- Администратор
- Сообщения: 5289
- ОС: Gentoo
Re: пытаюсь написать файл синтаксиса
У matchstr() есть параметр, задающий, какое по счёту совпадение нужно вернуть. Уточните в справке.