한 줄을 여러 줄로 효율적으로 나누는 방법은 무엇입니까?


11

공백으로 구분 된 각 값을 가진 한 줄의 긴 텍스트 파일로 기록 된 데이터를 수신했습니다. 한 줄을 여러 줄로 나눌 명령 또는 명령 집합이 있습니까?

답변:


21

명령을 사용하여 줄의 연속 된 공백을 줄 바꿈으로 간단히 바꿀 수 :s/\s\+/\r/g있습니다. \s\+평균 하나 이상의 공백 문자, 그리고 \r볼, 줄 바꿈입니다 :help :substitute:help regexp자세한 내용은. 다음과 같은 줄에서 명령을 실행하면

foo bar baz

당신은 얻는다 :

foo
bar
baz

이 경우 hlsearch사용 가능하고 사방 강조 공백 화면을 복잡하게하고 싶지 않아, 당신은 그것을 방지하기 위해 다음과 같은 작은 함수를 작성할 수 있습니다 :

function! SplitLineNicely()
    " Save previous value of last search register
    let saved_last_search_pattern = @/

    " :substitute replaces the content of the search register with the `\s\+` 
    " pattern highlighting all whitespaces in the file
    substitute /\s\+/\r/g

    " Restore previous search register
    let @/ = saved_last_search_pattern
endfunction

"어디서나 강조된 공간으로 화면을 어지럽히고 싶지 않다면"OP 설정에 대해 너무 많이 가정합니다.
romainl

@romainl 더 나은가?
toro2k 2013

1
예, 더 나은 IMO입니다.
romainl

2
그것은되어 \r, 참조 :help s/\r. 리터럴 개행 문자로 대체 할 수 있습니다 <c-v><cr>. 이 문맥 \n에서 널 문자는를 참조하십시오 :help s/\n.
toro2k

1
replaces the content of the register-어느 등록?
stillanoob 19

5

vim의 대체를 사용 하는 것이 작업을 수행하는 더 좋은 방법 중 하나 일 수 있지만 매크로도 사용할 수 있습니다. 커서가 라인 1에 어딘가에 다음 데이터가 있다고 가정하십시오.

1 a b c d e f
~

일반 모드에서 qq시작하면을 통해 매크로 호출 가능 기록을 시작합니다 @q. 이후에 입력 한 내용 qq은 위에서 언급 한 전화를 통해 반복 할 수 있습니다. 우리의 목표는 원활한 반복을 위해 충분히 일반적인 명령을 기록하는 것입니다.

따라서 0커서를 줄의 시작 부분 fspace으로 가져간 다음 커서를 첫 번째 공간으로 이동하도록 입력 할 수 있습니다 . 이를 통해을 입력하면 다음 renter과 같은 결과가 발생합니다.

1 a
2 b c d e f
~

q재사용 가능한 매크로가 반복 될 준비가되었으므로 지금 치는 것이 좋습니다. 다소 임의로, 우리는 줄 바꿈으로 대체하기 위해 4 개의 공백이 남아 있음에 주목합니다. 따라서 타격에 의해, 4@q우리는 반복 q매크로 4 번 결과 :

1 a
2 b
3 c
4 d
5 e
6 f
~

매크로 설정 방법으로 인해 현재 행에만 영향을 미치며 마지막 데이터 입력 오른쪽에 공백이 없으므로 9000 회 이상 명령을 반복하는 것이 안전했을 것 fspace입니다. 데이터가 개행 문자로 대체되는 것을 방지하여 '정말'실패합니다.

따라서 처음부터 반복하려면

qq0fspacerenterq9001@q

우리의 결과를 제공합니다.


1
난 당신이 가지고 사랑 9001빠른 사용자 이름을 입력을 위해 키보드의 키를 누릅니다.
Rich

5

Vim에서 줄을 나누는 가장 쉬운 방법은 일반 모드 명령입니다 gq(일반 또는 시각적 모드에서 두 문자를 빠르게 연속해서 입력하십시오).

비주얼 모드에서는 선택한 항목을 분할하고 일반 모드에서는 gq동작 을 따릅니다 .

예를 들어 gql한 줄을 현재 설정된 너비로 분할합니다. 현재 설정과 다른 것으로 분할 라인의 폭을 설정하려면, 당신이 사용할 수있는 :set textwidth=n, 어디 n당신이 라인, 예를 들어 원하는 문자 수입니다 10작업을 완료 할 때와 일반 폭 변경 돌아 가기.

Kholidfu 의 Youtube 비디오 에서이 정보를 얻었습니다 . 모션을 사용하여 일반 모드에서 선을 연결하고 분할하는 방법을 보여줍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.