Контекстно-зависимая перенос слов в vi / vim - PullRequest
1 голос
/ 27 октября 2011

Как можно конкретную перенос слов для определенных тегов.Например, в LaTex я хочу перенос слов для моих абзацев, но не для команд с цифрами (они всегда очень длинные и бегут за пределы экрана).

Или с помощью Javascript, я хочу, чтобы правильный код для кода былнапример, в 50 столбцах, но для комментариев должно быть только 40 столбцов

1 Ответ

1 голос
/ 27 октября 2011

Это не встроенный

Вероятно, вы могли бы написать что-нибудь самостоятельно, используя коварные комбинации `formatexpr` и synID(). Я предлагаю вам сначала посмотреть на помощь последнего, потому что он содержит вдохновляющие образцы:

for id in synstack(line("."), col("."))
    echo synIDattr(id, "name")
endfor

взято из :he synstack

formatexpr обычно устанавливается на что-то вроде

:set formatexpr=mylang#Format()

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


Помните

  • значение по умолчанию formatexpr (если оно отсутствует, formatprg ), вероятно, не подходит для исходного файла (по моему опыту он имеет тенденцию связывать строки, как если бы они были текстовыми параграфами ). Но опять же, вы можете реализовать это любым способом, каким захотите
  • что подсветка синтаксиса может быть не синхронизирована. Я не уверен, что происходит, когда курсор находится, скажем, на 70% большого документа, и вы выдаете ggVGgq . Он может не полностью обновлять подсветку синтаксиса (это означает, что ваша formatexpr функция получит «неправильные» значения synID(). Вы можете обойти это, сказав что-то вроде

     :syntax sync fromstart
    

    это снова может повлиять на производительность выделения в зависимости от размера / сложности источника и сценариев выделения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...