Определите складку VIM для рамок стека

#vim #callstack

Вопрос:

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

Кадры стека имеют такой шаблон:

   ...
  Normal logfile information that is not part of the frame
   0# first line of the frame                  <fold>
   1# next line of the frame                   <fold>
   ...                                          ...
  99# main                                     <fold>

  More information that is not part of the frame
  ...
 

Я использую «foldmethod=руководство» и перехожу к строкам, которые начинаются с 0# и печатаю zf} (в которых говорится, что нужно сложить до следующей пустой строки). Если я создам макрос, чтобы сделать это по всем 0# линиям, то он будет делать именно то, что я ожидаю. Мой файл журнала будет правильно выглядеть следующим образом:

   ...
  Normal logfile information that is not part of the frame
   0# first line of the frame                  <fold>

  More information that is not part of the frame
  ...
 

Вместо этого я хочу сделать это автоматически, используя foldmethod=expr . Мой подход таков…

У меня есть файл синтаксиса vim для моих файлов журналов, и я определяю эти три строки:

 set foldexpr=(getline(v:1num)[0]=="^\s*\d #")?1:0
set foldmethod=expr
set foldenable
 

Я также пытался set foldexpr=getline(v:1num)=~'^\s*\d #' и set foldexpr=getline(v:1num)=~'^\s*\d \#'

Шаблон, который я использую (для определения уровня свертки «1»), является:

  • начало строки
  • 0 или более пробелов
  • 1 или более цифр
  • символ хэша/фунта/октоторпа Во всех остальных строках должен иметь уровень свертки «0».

После загрузки в vim, используя :set я могу видеть эти параметры, как и ожидал:

  foldexpr=(getline(v:1num)[0]=="^s*d #")?1:0
 foldmethod=expr
 

Никакой радости. Никаких складок. Как я могу это отладить? Что я делаю не так?

Спасибо!

редактировать: У меня есть vim 7.4 «огромный», который был скомпилирован с » складыванием».

Комментарии:

1. vi.stackexchange.com

2. С беглого взгляда… Вы используете v:1num вместо v:lnum . Я предлагаю вам выбрать лучший моноширинный шрифт.

3. @romainl. Ha Ha! Вот и все! 🙂 Спасибо вам!