2016-01-02 5 views
1

Я пытаюсь, чтобы моя установка Vim автоматически сворачивала заявления импорта, когда я открываю файл Scala. Это похоже на то, что делает Intellij при открытии файла. В настоящее время у меня есть следующие строки в файле .vimrc от wiki.Складывание Scala импорт в Vim

set foldmethod=syntax 
set foldenable 
syn region foldImports start=/(^\s*^import\) .\+/ end=/^\s*$/ transparent fold keepend 

Однако когда я открываю .scala файл не фолд импорта, но тело объектов. Я также использую vim-scala plugin. Спасибо за помощь!

enter image description here

ответ

1

Вы были очень близки к тому, чтобы это работало. Есть несколько фанковых факторов, которые мы должны учитывать.

  • установка foldmethod в syntax (кстати это не документировано на узнать Vimscript Hardway..so :help foldmethod был ключом, чтобы понять это)

СИНТАКСИСА складного синтаксис

Сложность определяется элементами синтаксиса, которые имеют аргумент «fold». |: syn-fold |

Уровень сгиба определяется вложенными складками. Вложенность складок ограничена «foldnestmax».

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

:syn sync fromstart 

Главное внимания является sync fromstart это полезный помощник, если у вас есть регулярное выражение, которое будет соответствовать всему файлу и только хотите, чтобы поймать заголовок. В вашем случае вы должны быть в состоянии игнорировать это, а только что-то, о чем нужно знать.

  • сверху вниз регулярное выражение сканирования

Поскольку блок импорта достаточно предсказуем, мы можем упростить start и end выглядеть примерно так:

syn region foldImports start="import" end=/import.*\n^$/ fold keepend 

Поскольку region просто ищет некоторые строки, чтобы начать сопоставление, мы можем просто использовать "import" (или /import/), а затем для конечного значения мы хотим использовать немного больше автомобилей продуманное заявление. Главное то, что мы хотим иметь конца быть последней линии импорта с пустой строкой после него (/import.*\n^$/)

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

+0

Стоит отметить, что если вы отключите опцию 'syntax on' в вашей'.vimrc' приведенный выше код будет работать. Однако, если он включен, он не будет складываться правильно. – Petesta

+0

Вышеуказанное утверждение неверно. Проблема заключается в плагине под названием [vim-autoclose] (https://github.com/Townk/vim-autoclose). Если вы удалите его из среды выполнения Vim, складки работают так, как ожидалось. – Petesta

Смежные вопросы