внутреннее завершение кода в vim - PullRequest
5 голосов
/ 17 октября 2011

Существует тип завершения, которого нет в файлах справки vim (в частности: insert.txt), но который я инстинктивно ощущаю в необходимости довольно часто. Допустим, в моем файле есть слова «Awesome» и «SuperCrazyAwesome». Я нахожу экземпляр Awesome, который действительно должен быть SuperCrazyAwesome, поэтому я прыгаю в начало слова, перехожу в режим вставки и затем должен набрать «SuperCrazy».

Я чувствую, что должен быть в состоянии набрать "S", создать "SCrazy", а затем просто нажать горячую клавишу завершения или две, чтобы он нашел то, что находится слева от курсора ("S"), что справа («Сумасшедший»), повторно сопоставьте его со всеми словами в файле («/ S \ w * Crazy /») и предоставьте мне всплывающее меню выбора завершения, или просто сделайте замену, если есть только одно совпадение.

Я бы хотел использовать для этого систему фактического завершения. Существует «определенное пользователем» завершение, которое использует функцию и имеет хороший пример в подсказках для замены из заданного списка. Тем не менее, я не могу отследить многие детали, которые мне понадобятся, чтобы это произошло, включая:

  1. Как получить список всех слов в файле из функции vim?
  2. Могу ли я перечислить слова из всех буферов (с именами файлов), как это делается в vim?
  3. Как в режиме вставки получить текст в слове до / после курсора?
  4. Может ли завершение заменить все слово, а не только до курсора?

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

Ответы [ 2 ]

0 голосов
/ 17 декабря 2011

Я написал нечто подобное несколько лет назад, когда работал со сторонними библиотеками с довольно длинными CamelCasePrefixes в каждой функции, отличной для каждого компонента.Но это было в эпоху До Git Hub, и я считал ее потерянной драгоценностью, но поисковая система говорит, что я не полная задница, и отправил ее в вики Vim.

Вот она: http://vim.wikia.com/wiki/Custom_keyword_completion

Только не спрашивайте меня, что означает «MKw».Понятия не имею.

Это потребует некоторой адаптации к вашим потребностям, так как он ищет только слово до курсора, но идея есть.Работает только для текущего буфера.Итерация по всем буферам будет вялой, поскольку она не создает никакого индекса.Для этих целей я бы пошел с внешним grep.

0 голосов
/ 17 октября 2011

Хотя в прошлом он не совсем соответствовал вашему желаемому методу, я написал https://github.com/mjbrownie/swapit, который может выполнить вашу задачу, если вы ищете похожие ключевые слова.В этом сценарии ситуация может упасть, если у вас есть сотни совпадений.

Это в основном полезно для 2-10 возможных последовательных совпадений.

Вы бы определили список

: SwapListawesomes Awesome MoreAwesome SuperCrazyAwesome FullyCompletelyAwesome UnbelievblyAwesome

и перемещаться по совпадениям с помощью клавиш декремента инкремента (c + a) (c + x)

Есть также несколько других плагинов типа Cycling, таких как слова подстановкичто я знаю о vim.org и github.

Преимущество здесь в том, что вам не нужно группировать слова вместе с регулярным выражением.

...