Несоблюдение СЛОВ

13

<C-p>и <C-n>разрешить завершение слов, найденных в текущем документе.

Я беру некоторые заметки и записи голоса {0,1}^nи (E,D)много раз. Это СЛОВА, состоящие из нескольких слов.

Есть ли способ завершить слова с помощью <C-p>и <C-n>(или другой связанной ins-completionкоманды)?

Гонсалу Рибейро
источник
1
Вам может быть лучше использовать :abbreviateвместо этого. Например, введите :ab 01n {0,1}^nкоманду. Затем каждый раз, когда вы вводите 01nкак независимое слово в режиме вставки, оно будет расширяться до {0,1}^n.
200_success
@ 200_success, спасибо. Я думал о сокращениях, но все же я хотел знать, возможно ли это с ins-completion.
Гонсалу Рибейро

Ответы:

5

Вставить режим завершения с Ctrl-n

Я не знаю, можно ли выполнить завершение WORD вне написания собственной функции (например, omnifunc). Тем не менее, если вы не возражаете против расширения того, что слово соответствует вашим персонажам, вы можете добавить эти символы в «iskeyword»

Например, мой iskeyword по умолчанию

iskeyword=@,48-57,_,192-255

Затем я установил его на это плюс дополнительные символы выше

:set iskeyword=@,48-57,_,192-255,{,},,,(,),^

Это добавляет {, }, ,, (, ), и ^к персонажам , которые составляют слово (в дополнение к тому , что уже сделал)

После этого ввод {Ctrl-nзавершается {0,1}^n(в файле, содержащем только два приведенных вами примера)

Примечание: было бы лучше сделать это :set iskeyword+=только с дополнительным материалом, как показано ниже:

:set iskeyword+={,},,,(,),^

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

Расширение с аббревиатурами

Хотя это и не является частью исходного вопроса, другой похожей функциональностью (ish) является использование функциональности сокращений nvi или Vim. В отличие от завершения ключевого слова, сокращения не должны выглядеть как окончательный текст. Также в отличие от завершения ключевого слова, сокращения расширяются автоматически, а не только когда вы их запрашиваете. В зависимости от вашей цели и использования, это может сэкономить много печатать, и позволит вам печатать много текста без прерывания запроса на завершение.

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

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

Допустим, ваш файл содержит {0,1}^nмного, а других вариантов нет. Ввод текста немного растягивается, так что, возможно, вы захотите просто набрать 01nили myvalueсделать так, чтобы он расширялся {0,1}^n, но только когда 01nили myvalueявляется словом само по себе (то есть, если оно появляется в другом слове, не Измени это).

В nvi вы можете сделать :abbrev 01n {0,1}^n. Вы можете сделать то же самое в Vim, но я рекомендую использовать :iabbrev 01n {0,1}^nограничение только для режима вставки.

Затем, если у вас есть текст (где |представляет курсор)

We find that the value 01n|

И затем вы нажимаете Escили Spaceили Tabили иным образом перемещаете курсоры, текст заменяется, и у вас есть (пример использования пробела)

We find that the value {0,1}^n |

и вы можете продолжать печатать без перерыва.

Это обычно используется для автоматического исправления общих опечаток (например, замена «teh» на «the»), но это может быть одинаково полезно для вашего случая использования, опять же, при условии, что вы не против настроить сопоставления заранее.

Джон ОМ.
источник
Мне кажется, что :set iskeyword+={,},,,(,),^работает как ожидалось.
Карл Ингве Лервог
1
Это действительно так. Когда я попробовал это в прошлый раз, Vim продолжал говорить мне, что это была синтаксическая ошибка. Должно быть, это было где-то еще. Обновление моего ответа.
Джон ОМ.
@ JohnO'M. Не могли бы вы добавить ссылку о том, как abbreviateлучше подходить для этой работы?
Гонсалу Рибейру
@ GonçaloRibeiro сделано. Я надеюсь, что это помогает.
Джон ОМ.