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

При написании и редактировании в 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) вариант, который подходит больше. Возможность удалить кандидата тоже подойдет.

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

1 ответ1

1

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

Предложение плагинов

У меня есть плагин TextFormComplete, который позволяет вам написать альтернативы в этой форме:

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

Тогда q| (или <C-x>| в режиме вставки) для вариантов запрашивает один вариант и заменяет его оригиналом. Это помогло бы вам с окончательным редактированием, но вы не можете изменить это, кроме как со встроенной отменой. Таким образом, это позволит вам отложить выбор альтернативы при вводе предложений, но вам придется принять решение вскоре после этого.

Указатели реализации

Реализация описанного вами процесса звучит возможно, но я бы не рекомендовал это для абсолютного новичка в Vimscript. С помощью функции скрытия (ср. :help conceal) вы действительно можете скрыть / свернуть выбор из поля зрения. "Выбранный" должен быть как-то отмечен, например, *convince . Вы можете написать сопоставления, чтобы легко поменять маркер * на другой выбор. Проблема в том, что conceal основан на подсветке синтаксиса и, вероятно, будет мешать обычному выделению типов файлов , например, когда вы пытаетесь использовать варианты внутри комментария (Java и т.д.). Вы можете обойти это, только очистив все остальные элементы синтаксиса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .