Редактирование XML-файлов с длинными строками очень медленно в vim. Что я могу сделать, чтобы это исправить? - PullRequest
46 голосов
/ 23 мая 2009

Я редактирую много xml-файлов с помощью vim. Проблема в том, что из-за длинных строк навигация / редактирование в vim чрезвычайно медленная. Есть ли что-то, что я могу сделать (кроме отключения подсветки синтаксиса / плагинов типов файлов и отступов типов файлов), чтобы иметь возможность редактировать эти файлы безо всякой задержки?

Действительно расстраивает то, что тривиальная вещь, такая как подсветка синтаксиса, так плохо обрабатывается vim. Я не помню, чтобы это было проблемой с любым другим редактором. Мне действительно нравится использовать vim, и я надеюсь, что есть способ это исправить.

Ответы [ 13 ]

58 голосов
/ 11 августа 2010

Проблема в том, что подсветка синтаксиса VIM медленная для длинных строк. Простое исправление, которое лишь незначительно ухудшает функциональность, - ограничить подсветку синтаксиса первыми x столбцами. Нечто подобное в вашем .vimrc:

set synmaxcol=120
12 голосов
/ 06 марта 2014

Это 2014, я использую Vim версии 7.4. подсветка синтаксиса и комбинация длинных строк по-прежнему приводят к тому, что vim ведет себя недопустимо медленно. Поскольку это первый ответ, полученный от Google, я хотел отказаться от своих «текущих» решений.

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

    :syntax off :syntax on

    или связать его: nnoremap <leader>ts :syntax off<cr>:syntax on<cr>

  • Я также обнаружил, что поиск моего .vimrc даст тот же результат

    :source $MYVIMRC

    и обязательная карта: nnoremap <leader>sv :source $MYVIMRC<cr>

EDIt ---- 07/31/14

Дальнейшие исследования привели меня к ограничению синтаксиса максимальным столбцом. Это сработало очень хорошо, и у меня не было никаких проблем, так как я добавил ниже в свой vimrc.

set synmaxcol=250

это щедро ограничивает синтаксис первыми 250 столбцами.

10 голосов
/ 29 августа 2012
:set nocursorline

должно помочь.

7 голосов
/ 23 мая 2009

Вы отключили перенос строк? По моему опыту, перенос строк может немного замедлить работу при работе с очень длинными строками.

set nowrap
7 голосов
/ 23 мая 2009

Как насчет красивой печати вашего XML-файла (если длина строки - настоящая проблема)? Вы можете сделать это, например используя xmllint, который является частью пакета Gnome libxml2 (и есть также версия, доступная для Windows).

Вы можете красиво печатать на месте, выполнив

xmllint --format -o xmlFile.xml xmlFile.xml
4 голосов
/ 31 июля 2012

Самое простое и эффективное решение, которое я нашел, - просто отключить подсветку синтаксиса:
syntax off

Кажется, это виновник в работе с длинными очередями. Кроме того, исходя из моего опыта работы с vim и xml, размер файла, кажется, не имеет значения - именно длинные строки вызывают эти замедления.

Еще один обходной путь, который я нашел полезным, - обернуть области длинными линиями в сгибы :

  <!--{{{ long lines -->
  <text>A reeealy long line</text>
  <!--}}}-->

Закрытие складок избавит vim от разбора синтаксиса этих строк. Конечно, этот подход не всегда практичен, но он работал очень хорошо, когда у меня было всего несколько длинных строк, или они были в определенной области файла.

Часто Vim все еще заметно медленнее, но в большинстве случаев производительность становится приемлемой.

3 голосов
/ 23 мая 2009

Неа. Это подсветка синтаксиса думаю, AFAIK. Подход Regex, который использует Vim, на самом деле не является оптимальным решением для редактирования XML-файлов.

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

2 голосов
/ 24 мая 2009

Есть плагин, LargeFile для работы. Он отключает некоторые события, подсветку синтаксиса и даже отмену. Вы не упомянули о размере файлов XML, но плагин настраивается. Вы можете установить размер «большого файла» в мегабайтах, чтобы «небольшие файлы» можно было нормально обрабатывать.

1 голос
/ 23 октября 2015

Закомментируйте строку

syn sync match xmlSyncDT grouphere  xmlDocType +\_.\(<!DOCTYPE\)\@=+

в вашем файле xml.vim (с ").

Проблемы такого рода можно устранить в сеансе vim, набрав :syntime on, выполнив что-то, демонстрирующее медлительность, а затем :syntime report. В моем случае он сообщил, что xmlSyncDT заняло более 10 секунд в моем 6-мегабайтном XML-файле с 4000-символьными строками только для отображения последней страницы файла. Как я заметил, комментирование вышеприведенной строки не повлияло на выделение синтаксиса, за исключением того, что теперь для отображения экрана теперь не требуется больше доли секунды.

1 голос
/ 23 мая 2009

Я часто заменяю> <на> \ r <-> :s/>\s*</>\r</g, а затем заново делаю весь файл на gg=G.

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