2012-03-23 3 views
3

VimOutliner 파일을 어떻게 Markdown으로 변환 할 수 있습니까?VimOutliner을 (를) BMP로 변환하는 방법?

# Heading 1 

## Heading 2 

### Heading 3 

Body text. 

## Heading 4 

내가 가진 : 즉 , 내가 어떻게 이런 식으로 빈 라인으로 분리 해시 스타일의 제목에 ...

Heading 1 
    Heading 2 
      Heading 3 
      : Body text is separated by colons. 
      : Another line of body text. 
    Heading 4 

...이 같은 탭 indeted 윤곽을 켭니다 매크로 정의를 시도했지만 Vim (그리고 코더가 아닌)에게 상당히 새로운 것이므로 지금까지 성공적이지 못했습니다. 어떤 도움을 주셔서 감사합니다!

(PS - Markdown에 관해서는 VOoM 플러그인에 대해 알고 있지만, 해시 문자가없는 문서의 경우 초기 윤곽선을 선호합니다. 또한 VimOutliner가 여러 수준의 제목을 강조 표시하는 것을 좋아합니다. .)

답변

4

이 기능을 vimrc에 넣고 필요에 따라 :call VO2MD() 또는 :call MD2VO()을 사용하면됩니다.

function! VO2MD() 
    let lines = [] 
    let was_body = 0 
    for line in getline(1,'$') 
    if line =~ '^\t*[^:\t]' 
     let indent_level = len(matchstr(line, '^\t*')) 
     if was_body " <= remove this line to have body lines separated 
     call add(lines, '') 
     endif " <= remove this line to have body lines separated 
     call add(lines, substitute(line, '^\(\t*\)\([^:\t].*\)', '\=repeat("#", indent_level + 1)." ".submatch(2)', '')) 
     call add(lines, '') 
     let was_body = 0 
    else 
     call add(lines, substitute(line, '^\t*: ', '', '')) 
     let was_body = 1 
    endif 
    endfor 
    silent %d _ 
    call setline(1, lines) 
endfunction 

function! MD2VO() 
    let lines = [] 
    for line in getline(1,'$') 
    if line =~ '^\s*$' 
     continue 
    endif 
    if line =~ '^#\+' 
     let indent_level = len(matchstr(line, '^#\+')) - 1 
     call add(lines, substitute(line, '^#\(#*\) ', repeat("\<Tab>", indent_level), '')) 
    else 
     call add(lines, substitute(line, '^', repeat("\<Tab>", indent_level) . ': ', '')) 
    endif 
    endfor 
    silent %d _ 
    call setline(1, lines) 
endfunction 
+0

감사합니다. 한편 나는 이미 당신이 제안한 정규 표현식의 두 번째 부분을 스스로 알아 냈다. 그러나 첫 번째 부분은 여전히 ​​골치 거리였다. – marttt

+0

한 가지 잊은 점 : 동일한 작업을 ** Markdown에서 VimOutliner로 어떻게 변환합니까? 나는 VIM의 정규식을 알게되어서 완전히 올바르다 고 생각하지 않는다. 감사! – marttt

+0

본문 줄에 올바른 들여 쓰기를 복원하기 쉽도록 다시 작성했습니다. 또한 여러 명령을 실행하는 대신 함수를 호출하는 것이 더 간단합니다. – Raimondi

관련 문제