2012-06-14 8 views
23

다음 질문은 Vim에서 텍스트를 다른 것으로 복사하려고 할 때 관련이 있습니다 (예 : 웹 브라우저).vim에서 텍스트 줄 바꾸기

보통 파일 (특히 LaTeX 파일)을 편집 할 때 나는 보통 tw=80 옵션을 가지고 있습니다. 그러나 Vim에서 tw=80 옵션을 사용하여 전자 메일을 작성한 다음 복사하여 웹 브라우저에 붙여 넣으려고한다고 가정 해 보겠습니다. 복사하여 붙여 넣기 전에 80 자 정도의 줄 바꿈이 없도록 텍스트의 포장을 풀고 싶습니다. tw=0을 시도한 다음 gq을 시도했지만 텍스트를 기본 너비 80 자로 줄 바꿈했습니다. 내 질문은, 어떻게 내 전자 메일의 각 단락이 한 줄로 나타나도록 텍스트를 사용하지 않는 것입니까? 거기에 쉬운 명령이 있습니까? 당신의 시작

답변

39

이동 단락 및 입력 :

V 내가 페이지 전체 문서에 대한 J

규범과 결합 :

:%norm vipJ 

이 명령은 단락 만 처리합니다. 나는 이것이 당신이 원하는 행동이라고 생각합니다.

+0

감사! 나는 이것이 가장 쉬운 방법이라고 생각한다. 한 번에 전체 문서에 대해이 작업을 수행하는 것은 무엇입니까? – Ray

+2

@ 레이 내 대답을 편집하고 전체 문서를 실행할 명령을 추가했습니다. –

+1

커스텀 매핑과의 충돌을 피하기 위해서는이 경우'!'-specifier와 함께': normal' 명령을 사용하는 것이 더 좋습니다. –

10

정상 모드 명령을 사용하여 단락 줄을 추가하는 작업은 이미 으로 처리되었으므로 다른 문제에 대해서는 행 지향 Ex 명령을 사용하여 동일한 문제를 해결해보십시오.

커서가 단락의 첫 번째 줄에 있다고 가정합니다. 그런 다음 을 푸십시오. 다음 단락의 마지막 줄까지 간단하게 합쳐서 단락을 구성 할 수 있습니다. 이 작업을 수행하는 편리한 방법은 :join 명령 을 정확하게 실행하는 것입니다. 명령의 라인 범위를 에 대해 작동하도록 정의하려면 현재 시작되는 명백한 시작 라인 외에도 종료 라인을 지정하는 데 필요한 이 필요합니다. 단락 맨 끝과 일치하는 패턴 을 사용하여 찾을 수 있습니다. 즉, 줄 바꿈 문자 다음에 빈 줄인 이옵니다. 모든 문단

:,-/\n$/j 

래핑 할 각 단락의 첫 번째 줄에 다음 명령을 실행 따라서, 전 명령 구문에 대한 상기 정의 번역 우리 얻었다. 주어진 작업 시퀀스를 반복적으로 건너 뛰는 유용한 도구는 :global 명령입니다. :global은 에서 위에서 아래로 줄을 스캔하므로 단락의 첫 줄은 처리되지 않은 나머지 줄 중 첫 번째 비어 있지 않은 줄 입니다. 이 관찰은 우리가 직접적인 정상 모드 상대보다 더 효율적인 명령을 내릴 수있다.

+0

이 명령에는 약간의 버그가 있습니다. 한 줄의 단락이 있으면 다음 단락에 붙어 있습니다. –

+1

@Omar : 대단한 잡기, 고마워요! 이 사건을 해결하기위한 답변이 업데이트되었습니다. –

+0

@ fatih의 답변과 같이하고 있었지만 몇 가지 이유 때문에 매우 짧은 단락에 합류하여 대안을 찾고 여기에 와서 위대한 작품을했습니다. 감사합니다! – dbmrq

4

:%norm vipJ의 문제점은 공백 행으로 구분 되더라도 연속 된 줄이 80 자보다 짧으면 조인하는 것입니다.예 다음의 예를 들면 다음과 같습니다

# Title 1 

## Title 2 

이 될 것입니다 : IB의 대답으로

# Title 1 ## Title 2 

문제가 목록에 있습니다 :

- item1 
- item2 

가된다 :

- item1 - item2 

감사합니다 ~ this forum post 나는 그것을 그 중 하나를 수행하지 않기 때문에 나를 위해 훨씬 더 잘 작동하는 기능에 싸여있는이 달성의 다른 방법을 발견 :

function! SoftWrap() 
    let s:old_fo = &formatoptions 
    let s:old_tw = &textwidth 
    set fo= 
    set tw=999999 " works for paragraphs up to 12k lines 
    normal gggqG 
    let &fo = s:old_fo 
    let &tw = s:old_tw 
endfunction 

편집 : 나는 그것이 작동하지 깨달았다 때문에 방법 업데이트 리눅스 설정. 이 새로운 버전이 MacVim에서 작동하지 않는 경우 fo이 포함 된 줄을 제거하십시오. 테스트 할 방법이 없습니다.

관련 문제