#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 «огромный», который был скомпилирован с » складыванием».
Комментарии:
2. С беглого взгляда… Вы используете
v:1num
вместоv:lnum
. Я предлагаю вам выбрать лучший моноширинный шрифт.3. @romainl. Ha Ha! Вот и все! 🙂 Спасибо вам!