Обработка синтаксических и разделенных представлений в Vim

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

Единственное, что меня действительно беспокоит, это то, как он справляется с разделенными представлениями.

Я также использую плагин NERDtree, и всякий раз, когда я открываю другой файл в представлении vsplit, происходит следующее:

---------------------------------------------------------
|        |                   |                          |
|NERDTree|    file           |                          |
|        |                   |       file               |
|        |                   |                          |
|        |--------------------                          |
|        |   syntastic       |                          |
---------------------------------------------------------
|                                                       |
|                 syntastic                             |
|                                                       |
---------------------------------------------------------

Есть ли способ избавиться от маленькой дополнительной синтаксической плитки?

Я бы предпочел иметь две маленькие плитки (по одной для каждого файла) или только одну плитку, отображающую информацию для активной в данный момент плитки файла.


person vimgasm    schedule 04.09.2015    source источник
comment
Хорошая рисовка, четкая и впечатляющая!   -  person Francis Niu    schedule 21.03.2017


Ответы (1)


NerdTree часто мешает хорошему рабочему процессу с разделенным окном. Итак, вы думали о том, чтобы не использовать NerdTree?

Несколько проблем с NerdTree:

  • Потерянное пространство. Как часто вам нужно просматривать файловую структуру? 10% времени? Меньше?
  • Vim не имеет понятия «Ящик проекта». Это означает, что NerdTree делает все возможное, чтобы подражать поведению «Ящика проекта», и в конечном итоге терпит неудачу.
  • Разделяет навигацию — делает <c-w>t гораздо менее полезным. Часто приходится использовать больше команд навигации по окнам по сравнению с другими рабочими процессами.
  • NerdTree плохо работает при перестановке расщеплений. Создайте несколько шпагатов, затем выполните <c-w>J или <c-w>H. Посмотрите, как это испортило ваш макет. Это тот случай, когда вы имеете дело с синтаксисом.

Путь Вима

Как указано в сообщении Vimcasts, Масло и уксус — разделенные окна и ящик проекта, Vim предпочитает просто открывать проводник, когда он вам нужен, а затем отключите его, когда он не нужен. Вы также можете использовать NerdTree таким же образом, просто забудьте о постоянно включенном файловом проводнике. Есть и другие способы открытия файлов в vim:

  • Используйте завершение файла через <tab> с такими командами, как :e и :sp
  • Используйте <c-d> вместо <tab>, чтобы получить список завершений
  • Команды :e и :sp принимают подстановочные значения. например :e *.c и :e foo/**/bar.c
  • :find и настройте параметры 'path' и 'suffix'
  • Ctags или cscope для перехода к тегам
  • gf перейдет к файлу под курсором
  • Посмотрите на нечеткие средства поиска, такие как CtrlP, Command-T или Объединить
  • Создайте навигацию для конкретного проекта с помощью Projectionist (Rails — хороший пример этого)

Лично я считаю, что хороший нечеткий поиск файлов начнет исчезать NerdTree из вашего рабочего процесса.

Вим счастлив наполовину. Убедитесь, что вы используете шпагат как можно эффективнее. Есть много раздельных команд, см. :h opening-window. А еще лучше прочитать весь файл справки :h window, там много сокровищ.

person Peter Rincker    schedule 04.09.2015
comment
Я получаю те же проблемы с Syntastic, даже если не использую NerdTree. В тот момент, когда я начинаю разбивать буферы и закрывать разбиения, у меня остаются потерянные буферы быстрого исправления и т. Д. Картина очень похожа на ту, что показана в вопросе выше. Любое надежное решение этой проблемы? - person mbilyanov; 16.11.2015
comment
@symbolix Syntastic, вероятно, использует список местоположений вместо списка Quickfix. Список местоположений очень похож на список быстрых исправлений, однако он привязан к конкретному окну. Если вы закроете это окно, оно, скорее всего, потеряет окно списка местоположений. Вы можете использовать событие буфера, например BufHidden, для вызова :lclose, например autcmd BufHidden * lclose. Лично я редко открываю окно со списком локаций. Я использую такие команды, как :ll, :lnext и :lprev, чтобы просмотреть свои ошибки. - person Peter Rincker; 17.11.2015
comment
Спасибо за предложение. Я собирался приступить к написанию какой-то функции, которая позаботится о закрытии буфера, и при этом также запустить какую-то функцию Syntastic для сброса Syntastic и инициирования :lclose., это хорошая идея? Любые дополнительные предложения? Спасибо. - person mbilyanov; 18.11.2015
comment
Несколько лет спустя это все еще проблематично. - person Stephen Blum; 01.05.2019