Выделите аргументы в теле функции в vim - PullRequest
54 голосов
/ 19 февраля 2012

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

plain vim highlighting

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

func hilighted

Используя локальные переменные, я также хотел бы, чтобы локально инициализированные переменные выделяли:

imagei inside for">

Наконец, чтобы продемонстрировать роскошь:

luxury again

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

for clojure too inside let construct

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

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

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 28 февраля 2012

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

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

1 голос
/ 23 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...