Проблема со сворачиванием функций bash в vim - PullRequest
4 голосов
/ 05 января 2009

У меня есть файл сценария bash, который начинается с определения функции, например:

#!/bin/bash
# .....
# .....
function test {
...
...
}
...
...

Я использую vim 7.2, и я установил g:sh_fold_enabled=1 так, чтобы сворачивание было включено с помощью bash. Проблема в том, что сворачивание функционального теста не завершается правильно, то есть длится до конца файла. Это выглядит примерно так:

#!/bin/bash
# .....
# .....
+-- 550 lines: function test {----------------------------------------
~
~

Сама функция занимает всего около 40 строк, и я хочу, чтобы что-то было похоже на это («изображения» говорят больше, чем тысячи слов, они говорят ...):

#!/bin/bash
# .....
# .....
+-- 40 lines: function test {----------------------------------------
...
...
...
~
~

Кто-нибудь знает хорошее решение этой проблемы?

Ответы [ 3 ]

1 голос
/ 15 января 2009

Я провел некоторое исследование и нашел способ решить эту проблему: чтобы остановить vim от сворачивания функций до конца файла, мне пришлось добавить оператор пропуска в область синтаксиса для shExpr (в файле sh.vim, обычно размещается где-то вроде /usr/share/vim/vim70/syntax/):

syn region shExpr ... start="{" skip="^function.*\_s\={" end="}" ...

Это изменение не позволяет файлу синтаксиса думать, что { и } принадлежат группе shExpr, когда они фактически принадлежат группе функций. Или, во всяком случае, я так понял.

Примечание. Это исправление работает только для следующего синтаксиса:

function test
{
....
}

и не для этого:

function test {
....
}

Быстрое и грязное исправление последней ошибки - удаление shExpr из кластера @shFunctionList.

0 голосов
/ 13 августа 2016

Кажется, есть простое решение для Reddit .

Цитировать автора в посте:

Опции, которые я использую:

syntax=enable

filetype=sh

foldmethod=syntax

let g:sh_fold_enabled=3

g:is_sh=1

РЕДАКТИРОВАТЬ: Обходной путь

vim -u НЕТ -c 'let g: sh_fold_enabled = 7' -c ': установить fdm = синтаксис' -c 'sy на 'file.sh

g: sh_fold_enabled = 4, по-видимому, был согласованный уровень сгиба в обсуждении. Это решение отлично работает для меня. Мне не нужно было редактировать файл синтаксиса.

Редактировать: g: sh_fold_enabled = 5 на самом деле правильный. Не 4. Кроме того, как показано на плакате на Reddit, эти команды должны идти перед любыми другими настройками в vimrc, кроме плагинов.

0 голосов
/ 06 января 2009

Должно просто сработать, но, похоже, в файле синтаксиса есть ошибка. Область сгиба фактически начинается со слова «функция» и пытается перейти к закрывающему «}», но выделение области «{...}» занимает закрывающее «}», и сгиб продолжает поиск другого один. Если вы добавите еще один '}', вы увидите это в действии:

function test {
    ...
}
}
...