Vim: Управление несколькими вариантами формулировок

333
user345286

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

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

Мне удалось убедить / убедить / убедить его использовать Linux вместо Windows.

Или в коде:

def count/countEven/somethingElse(input) ... ... 

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

  1. Это делает текст трудным для чтения. Сравните мой рабочий процесс:

    Это дополняется / усиливается возможностью / возможностью делегировать / назначать утомительную / однообразную и сложную / трудную работу компьютерам.

    Как нормальные люди пишут:

    Это усиливается возможностью делегировать монотонную и сложную работу компьютерам.

  2. Мой нынешний подход никоим образом не выделяет эти незавершенные куски текстов: они выглядят как обычная часть текста.

  3. У меня проблемы с определением того, где еще не определился фрагмент текста и начинается «нормальный» текст. Особенно, когда в некоторых из кандидатов на блоки есть пробелы, например:

    ... убедить / спорить в / убедить ...

    Можно предположить, что у меня есть эти четыре варианта:

    убедить в

    убедить убедить

    спорить в

    спорить убедить

    в то время как на самом деле выбор между

    убеждать

    спорить в

    уговаривать

Итак, знаете ли вы какое-либо решение в виде:

  • встроенная функциональность Vim
  • плагин
  • что-то, чтобы положить в мой .vimrc
  • что-нибудь еще

решить проблему объединения всех этих кусков в «коробку», которая не отвлекает от чтения текста?

Если нет, с чего начать поиск в документации Vimscript (никогда не программируемой в нем) для реализации выпадающего меню, как показано ниже?

Заранее спасибо.

PS: возможное решение. Скажи, у меня есть этот текст:

Мне удалось убедить / убедить / убедить его использовать Linux вместо Windows.

С решением это будет выглядеть так:

Мне удалось [3] убедить его использовать Linux вместо Windows.

Основные характеристики:

  1. Он показывает только кандидата на кусок моего выбора, скрывая других
  2. Опционально показывает, сколько еще кандидатов
  3. Это место в тексте выделено, возможно, другим цветом текста.

Чтобы получить доступ к другим кандидатам, мне нужно было бы навести курсор на пункт [3], щелкнуть специальную клавишу, и в нем появилось бы раскрывающееся меню со всеми остальными кандидатами, как с функцией автозаполнения:

I've managed to *persuade[3]* him to use Linux instead of Windows. convince argue into 

Тогда я смогу выбрать (скажем, Ctrl-N или Ctrl-P) вариант, который подходит больше. Возможность удалить кандидата тоже подойдет.

Это только одно из возможных решений.

0

1 ответ на вопрос

1
Ingo Karkat

First, don't forget that Vim is a text editor, whereas your use cases go off quite far in the direction of customized editing. So I guess there won't be much in terms of a ready-made solution.

Plugin suggestion

What I do have is my TextFormComplete plugin, which allows you to write the alternatives in this form:

I've managed to [convince|argue into|persuade] him to use Linux instead of Windows. 

Then, a q| (or <C-x>| in insert mode) on the choices queries you for one choice, and replaces the original with it. That would help you with the final edit, but you can't revise that other than with built-in undo. So, this would allow you to defer choosing an alternative while typing the sentences, but you'd have to decide soon after that.

Implementation pointers

An implementation of your described process sounds possible, but I wouldn't recommend this for an absolute beginner in Vimscript. With the conceal feature (cp. :help conceal), you can indeed hide / collapse the choices from view. The "chosen" one would have to be marked up somehow, e.g. *convince. You could write mappings to easily change the * marker to another choice. Trouble is, conceal is based on syntax highlighting, and would probably interfere with the usual filetype highlighting, e.g. when you try to use choices inside a (Java etc.) comment. You could only sidestep that by clearing all other syntax elements.

Спасибо, Инго, это полезно. TextFormComplete удивительно похоже на то, что я имел в виду, но в нем отсутствуют некоторые функции. Прежде всего, вы не можете продолжать выбирать любимый вариант, как вы сказали. Ваша ссылка на функцию скрытия Vim более полезна, никогда раньше не слышал об этой интересной функции. user345286 9 лет назад 0