VIM скрипт. Как написать функцию, которая сворачивает все функции в документе?

Помогите написать функцию для vim, которая сворачивала бы все функции в документе.

Функции в документе имеют такой вид:

function () {
  // тут тело функции
}


Как я думал:

нужно обойти все строчки циклом, проверяя их сначала на слово 'function', а потом на '{'
В случае нахождения сворачивать блок командой zf%

Обойти все строчки можно так:

function! CloseFunctions()

  let i = 0
  let lenline = line('$')

  while i <= lenline
      let str = getline(i)
      echo str
      let i += 1
  endwhile

endfunction


Но как сделать поиск в текущей строке?
В vim есть метод search(), который ищет во всем документе. А есть ли метод, который ищет в строке?
  • Вопрос задан
  • 2654 просмотра
Решения вопроса 1
@lgick Автор вопроса
Написал:

function! CloseFunctions()

  execute 'normal zE'

  let i = 0
  let lenline = line('$')

  call inputsave()
  let space = input('how many space (dafault: 2)? ')
  call inputrestore()

  if !strlen(space)
    let space = 2
  endif

  while i <= lenline
    let str = getline(i)
    if match(str, '\S') == space
      if match(str, 'function') > 0
        if match(str, '{') > 0
          execute i + 'G'
          execute 'normal $zf%'
        endif
      endif
    endif
    let i += 1
  endwhile

endfunction


Нужно забиндить на клавишу.
При вызове спрашивает: сколько отступов содержат функциональные блоки (по умолчанию 2 отступа).
После этого отыскивает все строки с заданным отступом, затем ищет в найденных слово 'function' и скобку '{'
И закрывает функциональные блоки
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@v_prom
Я так понял, что тебе нужен фолдинг, если да, то почитай это: proft.me/2008/11/17/svorachivanie-folding-v-vim
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы