Vim, LaTeX, перенос слов и контроль версий - PullRequest
10 голосов
/ 26 апреля 2010

Я пишу документ LaTeX в vim, и у меня есть жесткая обертка в 80 символов, чтобы облегчить чтение. Однако это вызывает проблемы с отслеживанием изменений в управлении версиями. Например, вставив «Lorem ipsum» в начале этого текста:

1 Dolor sit amet, consectetur adipiscing elit. Phasellus bibendum lobortis lectus
2 quis porta. Aenean vestibulum magna vel purus laoreet at molestie massa
3 suscipit. Vestibulum vestibulum, mauris nec convallis ultrices, tellus sapien
4 ullamcorper elit, dignissim consectetur justo tellus et nunc. 

Результат:

1 Lorum ipsum dolor sit amet, consectetur adipiscing elit. Phasellus bibendum
2 lobortis lectus quis porta. Aenean vestibulum magna vel purus laoreet at
3 molestie massa suscipit. Vestibulum vestibulum, mauris nec convallis ultrices,
4 tellus sapien ullamcorper elit, dignissim consectetur justo tellus et nunc.

Когда я рассматриваю это изменение в git, оно говорит мне, что все строки абзаца изменились из-за переноса, даже если произошло только одно семантическое изменение. Одним из способов решения этой проблемы является размещение каждого предложения в отдельной строке. Это выглядит так же в визуализированном документе, но теперь источник труднее читать, потому что каждая строка имеет разную длину строки:

1 Lorum ipsum dolor sit amet, consectetur adipiscing elit.
2 Phasellus bibendum lobortis lectus quis porta.
3 Aenean vestibulum magna vel purus laoreet at molestie massa suscipit.
4 Vestibulum vestibulum, mauris nec convallis ultrices, tellus sapien ullamcorper elit, dignissim consectetur justo tellus et nunc.

(Если я мягко завернусь в 80, все равно все будет выглядеть плохо, просто по-другому.)

Можно ли разместить мой текст на диске с одной новой строкой в ​​предложении, но отобразить и отредактировать его в vim, как если бы текст каждого абзаца представлял собой одну длинную строку с мягким переносом в 80 символов? Я предполагаю, что это требует некоторого vim-foo, а не настройки git или LaTeX.

Ответы [ 4 ]

16 голосов
/ 26 апреля 2010

Нет необходимости вводить странные политики редактирования: функция git, которую вы ищете, использует git diff --color-words для просмотра изменений.

1 голос
/ 27 апреля 2010

Я думаю, что альтернативный способ - изменить ширину окна vim, как я обычно делал:

  1. сначала поместите «set wrap» в .vimrc, чтобы включить функцию «wrap»;

  2. Для запуска vim в виртуальном терминале я всегда устанавливаю ширину окна терминала как 80 символов (например, "urxvt -geometry 80x38"). Таким образом, каждый раз, когда я редактирую файл в vim в виртуальном терминале, он автоматически переносится, если строка содержит более 80 символов.

  3. Если вы предпочитаете gvim (gtk-vim, gnome-vim), вы можете просто установить размер окна gvim, добавив строку в .gvimrc, например, "set lines = 38 columns = 80".

Надеюсь, это поможет. : -)

0 голосов
/ 28 марта 2018

Я сам задавался вопросом о таких вещах, и в конце концов мне просто пришлось попробовать несколько разных подходов, чтобы увидеть, что работает. Одна вещь, которой я определенно не доволен, это тяжелые перерывы (которые могут быть достигнуты set textwidth=80) по нескольким причинам:

  • Всякий раз, когда я возвращаюсь, чтобы отредактировать предыдущий текст, жесткий разрыв строки будет в неправильном месте. Он либо превысит мой предел в 80 символов, либо будет слишком далеко от моего ограничения в 80 символов. Конечно, я могу исправить это в Vim, используя различные варианты оператора gq (например, gqip, gqap, визуальный режим и затем gq), но это утомительно, и я часто скучаю по своей целевой области с gq. Это для меня самый большой недостаток с тяжелыми перерывами. (Если вы используете gq для исправления абзацев, вы можете использовать set nojoinspace, чтобы избежать раздражающих двойных пробелов после каждого периода.)
  • У меня часто Vim и PDF открываются бок о бок. Всякий раз, когда я хочу что-то отредактировать в определенном месте моего PDF-файла, я просто ищу фрагменты текста. Вы будете удивлены тем, как мало мест в тексте вы используете два довольно общих слова в определенном порядке, так что это действительно работает очень хорошо. Если у вас нет серьезных разрывов в середине предложения, которое разрывается между словами, которые вы ищете. Это довольно часто задерживает мой рабочий процесс при использовании жестких перерывов.
  • Я часто ориентируюсь в предложениях, используя f, F, t или T. Это работает только в пределах одной строки.
  • Существует также проблема, упомянутая в OP, что Git не очень хорошо справляется со сложными параграфами. Конечно, вы можете сделать DIFF выглядеть хорошо, тем не менее, это не является большой проблемой.

Для меня использование мягких разрывов (и наличие, например, одного предложения или абзаца в строке) не является «странной политикой редактирования», которую я принимаю, чтобы удовлетворить Git. Это (возможно, странная) политика редактирования, которую я использую для удобства и эффективности при редактировании. В частности, мягкие разрывы строк, возникающие в середине слов, я согласен, выглядит некрасиво, но это можно отключить, используя set linebreak.

Если, кроме того, вы используете один абзац на строку, вы должны получить примерно тот же «вид», что и с жесткими перерывами (что правильно поддерживается с помощью gq), и вы можете перемещаться от предложения к предложению с помощью ( и ). С одним предложением на строку вы получите более рваный правый край, но с преимуществами, которые предлагает Git и Vim, имея одно предложение на строку. Попробуйте оба варианта и посмотрите, что вы предпочитаете (я сам еще не решил).

0 голосов
/ 23 июля 2012

Вот так я решаю проблему. Сначала вы можете использовать команду vim (в обычном состоянии) для поиска в вашем текстовом файле строк, длина которых превышает 80 символов:

/\%81v.\+/

вы можете определить его как макрос, чтобы не запоминать команды. Затем вы вводите в нормальном состоянии

nF a

(то есть немного "n", заглавная "F", пробел "", немного "a", "Enter" и an). Это поможет вам мягко прервать свою линию после некоторого слова. Вы можете записать эти пять нажатий клавиш в виде макроса (как: в обычном состоянии нажмите «qa», чтобы начать запись, и просто выполните шаги «nF a», а затем нажмите Esc и «q», чтобы остановить. «потому что мы сохранили макрос в« a ». Чтобы воспроизвести макрос 100 раз (это не повредит, если вы играете его слишком много раз; он просто автоматически останавливается при завершении всей работы), нажав« 100 @ a »в обычном статус)

Решает ли это вашу проблему?

...