Подтвердить что ты не робот

Выделите аргументы в теле функции в vim

Немного что-то, что можно было бы заимствовать у IDE. Таким образом, идея заключалась бы в том, чтобы выделить функциональные аргументы (и, возможно, узлы переменных имен) внутри тел функций. Это поведение по умолчанию для некоторых C:

plain vim highlighting

Хорошо, если бы я разместил курсор внутри func, я бы хотел, чтобы аргументы foo и bar выделены, чтобы лучше следовать логике алгоритма. Обратите внимание, что аналогичное имя foo в func2 не получило бы подсветки. Эта роскошь может быть опущена, хотя...

func hilighted

С помощью локально ограниченных переменных мне также хотелось бы иметь локально инициализированные переменные highlit:

highlight <code>i</code> inside for

Наконец, чтобы заново осознать роскошь:

luxury again

Не так тривиально писать это. Я использовал C, чтобы дать общее представление. На самом деле я мог бы использовать это для программирования Scheme/ Clojure лучше:

for clojure tooinside let construct

Это должно распознавать привязки let, loop, for, doseq.

Мой vimscript-fu не настолько силен; Я подозреваю, что нам нужно

  • Разберите (не-regexply?) аргументы из определения функции под курсором. Конечно, это будет язык. Мой приоритет будет Clojure.
  • определить область синтаксиса для охвата только данной функции/области действия
  • укажите требуемые синтаксические соответствия

В качестве функции это может быть отображено на ключ (если он очень ресурсоемкий) или CursorMoved, если не так медленно.

Хорошо, теперь. Кто-нибудь написал/нашел что-то вроде этого? У vimscript-гуру есть идея о том, как на самом деле начать писать такой script?

Извините за небольшую оффтопичность и плохое форматирование. Не стесняйтесь редактировать/форматировать. Или проголосовать, чтобы закрыть.

4b9b3361

Ответ 1

Это намного сложнее, чем кажется, и пограничный-невозможно с API vimscript в том виде, в котором он находится, потому что вам просто не нужно разбирать файл; если вы хотите, чтобы он работал хорошо, вам нужно проанализировать файл пошагово. Поэтому регулярные синтаксические файлы ограничены тем, что вы можете делать с регулярными выражениями - при изменении нескольких символов vim может определить, что изменилось при подсветке синтаксиса, не переделывая весь файл.

Обозначение синтаксиса синтаксиса vim ограничено обработкой регулярных выражений, но если вы это сделаете, вы можете свернуть свой собственный парсер в vimscript и создать его синтаксис локального буфера, который ссылается на токены в файле посредством строки и столбца, используя атомы \%l и\%c в регулярном выражении. Это нужно будет повторять после каждого изменения. К сожалению, нет никакого autocmd для "файла изменено", но существует автозапуск CursorHold, который запускается, когда вы простаиваете для настраиваемой продолжительности.

Ответ 2

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