Анализатор производительности для vim - PullRequest
18 голосов
/ 12 октября 2011

Фон

Я собираюсь построить анализатор производительности для vim, который мог бы незаметно отобразить более эффективное решение для конкретной, повторяющейся задачи, которую выполняет пользователь. Подсказка может отображаться в рычании, статусной строке и т. Д.

Не смеши, но идея пришла от Клиппи: http://en.wikipedia.org/wiki/Office_Assistant Конечно, я не хочу создавать еще одну забавную вещь, такую ​​как энергичность, я о серьезном анализе эффективности, который может быть особенно полезен для новичков vim.

Вопрос

Имеет ли это смысл и есть ли теория, охватывающая такой анализ?

Ответы [ 3 ]

8 голосов
/ 12 октября 2011

Вне моей головы:

  • Это потребует достаточного количества классификации AI / нечетких.Трудно проанализировать, что «пытается сделать» пользователь (часто пользователь не совсем понятен и отвлекается: «О, исправьте эту опечатку, пока я здесь; выровняйте этот комментарий ... хорошо, теперь на другом»задача) По иронии судьбы, я думаю, что, если делать что-то «Vim Pro», это будет легче (но тогда было бы бесполезно это определять, потому что оно уже оптимально!)

  • Также, TIMTOWTDI;Вы не можете просто пойти и сказать «вот лучший путь».Это зависит от вкуса, расположения рук, раскладки клавиатуры, доступности плагинов.

  • Я думаю, что на сегодняшний день лучший способ научиться таким вещам - это

    • чтение документации
    • после переполнения стека [vim]

Скептицизм остался позади, я вижу хороший рынок для плагина с подсказкой -подобные функции:

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

  • Вы могли бы показать положение маркеров на полях (чтобы люди стали более осведомлены о них, особенно <,> и тому подобное).Плагин, который делает это сейчас, это ShowMarks : на скриншоте, отметьте отметки для a и b, но также (изящно!) Места для { и ( и подобные текстовые движения (я видел >, . и другие только сейчас) . 1

    enter image description here

  • :set relativenumber уже помогает пользователям думать о 13j вместо jjjjjjjjjjjjj - но посмотрите мои предпочтения здесь Перемещение точки междув характере при быстром поиске

  • я мог видеть, что плагин подсветки синтаксиса происходил, когда включающие текстовые объекты (слово, слово, предложение, абзац или идентификатор, паренблок, скобка) выделялись приоттенки цвета фона. Если мы подумаем о способе наложения полезной подсказки (какой ключ использовать для движения текстового объекта), вы получите очень хорошую подсказку, IMO.

  • Я мог видеть подсказку для нажатия 'o', чтобы переместить курсор на другой конец визуального выделения

  • стандартный matchit уже весьма полезен для намека на соответствующие скобки (хотя в реальном стилевом стиле он не намекает на то, что вы можете использовать %, чтобы туда попасть)

  • другие вдохновляющие возможности использования функции +signs: errormarker.vim (которая использует всплывающие подсказки в дополнение к размещению графического знака);Я вижу, что это находило хорошее применение (если только указать на определенные темы документации) enter image description here

Что касается подсветки текстовых объектов, я подозреваю, что она может уже существовать.Я собираюсь взглянуть сейчас


1 Я думаю, чтобы получить больше оценок, мне нужно было сделать (?)

 :let g:showmarks_include+="<>[]"
 :ShowMarksOn

Я также рекомендую установить Updatime на что-то быстрое (скажем, 500 мс)

4 голосов
/ 12 октября 2011

Я нахожу вашу идею очень интересной. При правильном тоне такая функция, вероятно, будет полезна, и не только для новичков.

Но я вижу кучу трудностей:

  • Покажите ли вы «правильный путь» для выполнения предыдущего задания или более короткий путь без учета его правильности? Например, новый пользователь Vim может сделать Vjjjd, чтобы удалить 4 строки, вы предлагаете V3jd или 4dd или, возможно, dip, если это подходит, или какое-либо другое решение?
  • Как бы вы определили «правильный путь» в любом случае? С помощью консенсуса здесь, в SO или в каком-либо списке рассылки, или путем запроса группы авторитетных экспертов Vim?
  • Как бы вы определили задачу, которую вы анализируете? Каковы границы для задачи?

Как бы то ни было, это изящная идея.

0 голосов
/ 10 декабря 2013

Мое личное мнение о том, что с подобным клиппом инструментом очень трудно обращаться.Как упомянуто выше, я думаю, что самая сложная часть - это понять намерения пользователей при написании текста.Если вы уберете это и сможете добавить семантику к своим намерениям, ваша жизнь может стать намного проще!

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

Я думал о программировании обобщенного внешнего интерфейса vi, чтобы применить его ко всем видам редакторов / текстовых полей (например, pidgin).

Один изРезультатом этого мыслительного процесса является то, что язык ввода должен быть несколько регулярным (или максимально свободным от контекста).следовательно, ввод экземпляра vi может быть представлен конечным автоматом.Это не полностью доказано, а скорее смутное предположение!Очевидно, что нужно приложить больше усилий, чтобы команды повторения (например, 13j) не могли включить язык в контекстно-свободные грамматики.

Если язык ввода vi регулярный, вы можете получить возможность использовать ограниченную модель-проверка, чтобы вычислить последовательность переходов состояний в этом графе состояний, которые приводят к требуемому результату.Я думаю, что в настоящее время наиболее эффективными способами проверки ограниченных моделей являются контрпримеры и сведение проблемы к экземпляру sat (просто Google для этого).

Я хотел бы услышать ваше мнение по этому поводу, поэтому, пожалуйста, прокомментируйте иесли есть что-то еще, мы можем попытаться поговорить об этом.

edit

Я думаю, вы можете попытаться выполнить стандартную работу оптимизатора, как это делают компиляторы.

однако не такособенно макросы q[a-z] @[a-z] могут быть трудно найти и заменить.Я бы предположил, что это NP завершено.

...