Выборочная подсветка синтаксиса в Vim - PullRequest
6 голосов
/ 12 ноября 2010

как выделить строки, начинающиеся с sql_ и заключенные в кавычки?

Мой лог-файл:

MGPostgreSQLConnection.OpenQuery; "sql_p_factory_history"-ExecTime: 47ms
2010-11-12T17:28:18+01:00;custom; MGPostgreSQLConnection.OpenQuery; "sql_p_factory_history"-ExecTime+FetchTime: 47ms
2010-11-12T17:28:18+01:00;custom; MGPostgreSQLConnection.OpenQuery; "sql_factory"-ExecTime: 47ms
2010-11-12T17:28:18+01:00;custom; MGPostgreSQLConnection.OpenQuery; "sql_factory_contactperson"-ExecTime+FetchTime: 62ms

Мой vimrc (Конечно, это не работает):

au BufRead,BufNewFile *.log syn match "sql_*"
au BufRead,BufNewFile *.log hi sql guifg=white guibg=red

Ответы [ 4 ]

6 голосов
/ 12 ноября 2010

Вы были почти там!Эта версия (работает и) не выделяет кавычки.

au BufRead,BufNewFile *.log hi sql guifg=white guibg=red ctermfg=white ctermbg=red
au BufRead,BufNewFile *.log syn match sql /"\zssql_\w*\ze"/

screen-shot

Для получения дополнительной информации см. Следующее:

  • :help :syn-match "для сопоставления синтаксиса, эм, синтаксис
  • :help /\zs" устанавливает начало совпадения там
  • :help /\ze "устанавливает конец совпадения там
  • :help /\w "символ слова

Отладка:

Команда :verbose :syn должна дать вам что-то вроде этого:

--- Syntax items ---
[...]
sql            xxx match /"\zssql_\w*\ze"/

и :verbose :hi:

        Last set from ~/.vimrc
[...]
sql            xxx cterm=bold ctermfg=7 ctermbg=1 guifg=white guibg=red

* xxx должен быть того же цвета, что вы указали (и выглядеть как выделение на моем снимке экрана).Если вы их не видите, убедитесь, что ваш .vimrc (или _vimrc в Windows) получен:

:scriptnames
1: /home/javh/.vimrc
[...]

Конечно, это работает только тогда, когда:

:echo has('syntax')

... возвращает 1 (или :version включает +syntax).

2 голосов
/ 12 ноября 2010

Синтаксис для syn match: syn match highlight_group reg_exp.

Итак, попробуйте:

au BufRead,BufNewFile *.log syn match Todo /"sql_\w\+"/

Почему бы вам не прочитать справку по :syn?Помощь Vim настолько хороша, что вы быстро найдете ответы на все вопросы:)

:help :syntax
0 голосов
/ 12 ноября 2010

Другой способ сделать это без syntax match - это использовать команду :match или команду matchadd() напрямую.

Вкратце:

" to enable
:match Todo /"\@<=sql_\w\+"\@=/
" reference:
" \@<= is such a beautiful duck, :help /\@<= for more help
" :help /\@= for the \@= part, also.
"
" to cancel
:match none
" :help :match / :help :2match / :help :3match

или

" to enable
:call matchadd('Todo', '"\zssql_\w\+\ze"')
" or
:let foobarbaz = matchadd('Todo', '"\zssql_\w\+\ze"')
"
" to disable
:call matchdelete(foobarbaz)
" or
:call clearmatches()
0 голосов
/ 12 ноября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...