Выделение несоответствующих скобок в энергии

Вы должны добавить круглые скобки. Forumela должна выглядеть так: (I3-0,35) * (1-5,79%)

12
задан Michael Kristofik 19 February 2009 в 06:37
поделиться

6 ответов

Если я пойму правильно, и Вы пытаетесь посмотреть на несоответствие круглой скобке в коде C (который был сгенерирован в Python), то я рекомендую установить rainbow.vim от Сайта доктора Chip. Это выделит фигурные скобки в различных цветах в зависимости от уровней добавления отступа и выделит несоответствие фигурным скобкам красного цвета, как Вы запросили. Снимок экрана http://img294.imageshack.us/img294/8586/rainbow.jpg http://img294.imageshack.us/img294/8586/rainbow.jpg

Для установки загрузить rainbow.vim и место в vimfiles/after/syntax/c/ (создайте этот каталог, если он не присутствует).

На Linux это будет ~/.vim/after/syntax/c/rainbow.vim

В Windows это может быть c:\vim\vimfiles\after\syntax\c\rainbow.vim или возможно где-то в другом месте, посмотрите :help runtimepath.

Обратите внимание, что существуют некоторые плагины тот конфликт с rainbow.vim, но не слишком трудно заставить их сотрудничать.

При попытке выделить несоответствие круглой скобке в коде Python, Вы могли бы изменить rainbow.vim для использования кластеров синтаксиса Python вместо C, но это немного более включено, но Вы могли использовать что-то вроде (измененная версия кода радуги доктора Chip):

syn cluster pyParenGroup contains=pythonString,pythonRawString,pythonEscape,pythonNumber,pythonBuiltin,pythonException
syn match pyParenError display ')'
syn region  pyParen     transparent matchgroup=hlLevel0 start='(' end=')' contains=@pyParenGroup,pyParen1
syn region  pyParen1        transparent matchgroup=hlLevel1 start='(' end=')' contains=@pyParenGroup,pyParen2
syn region  pyParen2        transparent matchgroup=hlLevel2 start='(' end=')' contains=@pyParenGroup,pyParen3
syn region  pyParen3        transparent matchgroup=hlLevel3 start='(' end=')' contains=@pyParenGroup,pyParen4
syn region  pyParen4        transparent matchgroup=hlLevel4 start='(' end=')' contains=@pyParenGroup,pyParen5
syn region  pyParen5        transparent matchgroup=hlLevel5 start='(' end=')' contains=@pyParenGroup,pyParen6
syn region  pyParen6        transparent matchgroup=hlLevel6 start='(' end=')' contains=@pyParenGroup,pyParen7
syn region  pyParen7        transparent matchgroup=hlLevel7 start='(' end=')' contains=@pyParenGroup,pyParen8
syn region  pyParen8        transparent matchgroup=hlLevel8 start='(' end=')' contains=@pyParenGroup,pyParen9
syn region  pyParen9        transparent matchgroup=hlLevel9 start='(' end=')' contains=@pyParenGroup,pyParen
hi link pyParenError Error

if &bg == "dark"
    hi default   hlLevel0 ctermfg=red         guifg=red1
    hi default   hlLevel1 ctermfg=yellow      guifg=orange1      
    hi default   hlLevel2 ctermfg=green       guifg=yellow1      
    hi default   hlLevel3 ctermfg=cyan        guifg=greenyellow  
    hi default   hlLevel4 ctermfg=magenta     guifg=green1       
    hi default   hlLevel5 ctermfg=red         guifg=springgreen1 
    hi default   hlLevel6 ctermfg=yellow      guifg=cyan1        
    hi default   hlLevel7 ctermfg=green       guifg=slateblue1   
    hi default   hlLevel8 ctermfg=cyan        guifg=magenta1     
    hi default   hlLevel9 ctermfg=magenta     guifg=purple1
else
    hi default   hlLevel0 ctermfg=red         guifg=red3
    hi default   hlLevel1 ctermfg=darkyellow  guifg=orangered3
    hi default   hlLevel2 ctermfg=darkgreen   guifg=orange2
    hi default   hlLevel3 ctermfg=blue        guifg=yellow3
    hi default   hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
    hi default   hlLevel5 ctermfg=red         guifg=green4
    hi default   hlLevel6 ctermfg=darkyellow  guifg=paleturquoise3
    hi default   hlLevel7 ctermfg=darkgreen   guifg=deepskyblue4
    hi default   hlLevel8 ctermfg=blue        guifg=darkslateblue
    hi default   hlLevel9 ctermfg=darkmagenta guifg=darkviolet
endif

Править:

Как тест, я загрузил gvim70.zip и vim70rt.zip из ftp://ftp.vim.org/pub/vim/pc/ (это версии Windows Vim 7.0). Я разархивировал эти два файла в новый каталог и работал gvim.exe от vim/vim70/gvim.exe. У меня нет конфигурации энергии сохраненной в "C:\Documents and Settings", так выполнение этой энергии совпадает с выполнением 'ванильной' конфигурации. Я затем загрузил pyprint.py из amk.ca/python/simple/pyprint.html как часть примера кода и скопированный вышеупомянутый код в файл, названный code.vim. В gVim я вошел :e pyprint.py. Это открылось в окне белого фона без подсветки синтаксиса. Я затем вошел :syntax on, который включил подсветку синтаксиса по умолчанию. Я добавил секунду ) символ на строке 8. Наконец, я вошел :source code.vim, который сделал второе ) символ быть выделенным в красном.

Я также выполнил этот тест на Linux (с Vim 7.2) путем ввода следующей последовательности команды:

cd ~
mv .vimrc old_dot_vimrc
mv .gvimrc old_dot_gvimrc
mv .vim old_dot_vim
vim pyprint.py
:e pyprint.py
" Add extra bracket here!
:syntax on
:source code.vim

Снова, вторая скобка выделяется, и все остальное кажется нормальным.

4
ответ дан 26 October 2019 в 10:47
поделиться

Можно заставить энергию делать противоположное: сделайте a

:set showmatch

и это выделит соответствие parens. Вы будете знать, когда Вы будете несбалансированными, когда это не выделяет что-то.

Я также предполагаю, что Вы знакомы с командой '%', которая возвращает Вас к элементу соответствия.

8
ответ дан 26 October 2019 в 10:47
поделиться

Временное решение:

:imap ( ()<C-[>i

Это сделает его так каждым разом, когда Вы вводите левый paren, это автоматически вставит право и поместит Вас в положение ввода промежуточного.

4
ответ дан 26 October 2019 в 10:47
поделиться

Не уверенный, если это будет более или менее сбивать с толку Вас, но Вы могли бы посмотреть на lisp.vim файл синтаксиса (особенно часть, где g:lisp_rainbow обрабатывается) видеть, как можно выделить соответствие parens.

Если Вам удается выделить все соответствие parens, у Вас мог бы быть остаток parens (т.е. несопоставленный parens) имеют Ошибку по умолчанию при выделении. Это - то, что файл шепелявости, кажется, делает.

Править: Как насчет этого:

syn match parenError ")"
syn region matchingParens transparent start="(" end=")" contains=matchingParens
hi parenError guifg=red

Если Вы :syn clear и выполненный они, это, кажется, работает. Обратите внимание что порядок syn команды выполняются вопросы. На :h :syn-priority, правило, подобранное в последний раз, является тем, которое вступает в силу, который может быть, почему Ваши правила выделили весь конец-parens в файле.

РЕДАКТИРОВАНИЕ № 2:

То, что на самом деле делает c.vim, выделяет любого {} в (), закрывается ли все правильно или нет. Попытайтесь ввести ({}) в режиме C это все еще выделяется {} как ошибка.

Я не думаю, что этот подход может использоваться для тестирования непосредственно на a ( с несопоставленным ), потому что :syn region не заботится, является ли шаблон конца там или нет.

Таким образом, необходимо найти что-то определенным для Python, который никогда не должен принадлежать внутри (). Затем соответствие против "(\_[^)]*the_forbidden_something". Я не знаю, что Python достаточно знает, каково это могло бы быть.

Если ничто иное, можно сделать:

syn match openParen "(\_[^)]*\%$"

который соответствует открытому paren без закрытия parens до конца. Это перестало работать, если это находит какое-либо закрытие paren вообще, что означает, что это даже не поймает (()<EOF>.

2
ответ дан 26 October 2019 в 10:47
поделиться

Вы попытались использовать matchit.vim? Это поддерживает все виды соответствий, и это должно работать в Python.

1
ответ дан 26 October 2019 в 10:47
поделиться

Как обходное решение, я нашел этот сценарий отступа на веб-сайте энергии, который, предположительно, делает лучшее задание форматирования кода Python. При окончании строки несбалансированным parens это располагает следующую строку с отступом для выстраивания в линию с открытым paren.

0
ответ дан 26 October 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: