Vim에서 줄 바꿈 삭제


271

Vim의 줄 끝에서 줄 바꿈을 삭제하여 다음 줄이 현재 줄에 추가되도록하는 방법이 있습니까?

예를 들면 다음과 같습니다.

Evaluator<T>():
    _bestPos(){
}

줄을 복사하여 이전 줄에 붙여 넣지 않고이 모든 것을 한 줄에 넣고 싶습니다. 커서를 각 줄의 끝 부분에 놓고 키를 누르고 다음 줄이 커서가있는 것과 같은 줄로 이동할 수 있어야합니다.

최종 결과 :

Evaluator<T>(): _bestPos(){ }

Vim에서 가능합니까?


vim의 삽입 모드에서 줄 끝에 Del은 나를 위해 일했습니다. 그러나 모든 터미널에있는 것은 아닙니다.
Victor Sergienko

답변:


584

첫 번째 줄에있는 경우 (대문자)를 누르면 J해당 줄과 다음 줄이 합쳐져 줄 바꿈이 제거됩니다. 이것을 카운트와 결합 할 수도 있으므로를 누르면 3J3 개의 라인이 모두 결합됩니다.


29
다른 답변에서 언급했듯이 gJVim이 사용할 때 추가 할 수있는 공백을 추가하지 않아도됩니다 J.
Michael Mior

5
당신은 또한 당신이 사용에 참여하고자하는 모든 라인을 선택할 수 있습니다 V(비주얼 라인 모드)를 눌러 J또는gJ
SBU

커서 위치의 사용을 유지하려면 :join:join!그 커서 위치를 유지하는 선에 가입하고 합류 지점에서 어떤 공간을 유지하지 않습니다. 당신은 또한처럼 매핑 할 수 있습니다 : nnoremap <Leader>j :joing<cr>nnoremap <Leader>gj :join!<cr>.
SergioAraujo

82

확실히. Vim은 \ n 문자를 줄 바꿈으로 인식하므로 검색하고 바꿀 수 있습니다. 명령 모드에서 다음을 입력하십시오.

:%s/\n/

1
고맙지 만 전 세계 검색 및 교체를 원하지 않습니다.
derekerdmann

16
%를 제거하면 처리됩니다. 그런 다음 커서가있는 줄에서만 발생합니다. 또는 : 11,15s / \ n / (11-15 줄) 또는 :, + 7s / \ n / (이 줄과 다음 7 줄) 또는 : -3, s / \ n /와 같은 범위를 지정할 수 있습니다. (이전 세 줄과 이것 하나) ... 아이디어를 얻었습니다
Tristan

1
또는 V-isual 블록을 선택 하고 대체 할 수 있습니다.
Victor Sergienko

51

정상 모드에서 상단 라인에있는 동안 Shift+를 누르십시오 j.

개수를 앞에 추가 할 수도 있으므로 3J맨 위 줄에서 해당 줄을 모두 합칩니다.


34

다른 답변에서 언급했듯이 (대문자) J및 검색 + 바꾸기는 \n일반적으로 줄 바꿈 문자를 제거하고 줄을 연결하는 데 사용할 수 있습니다.

그러나 마지막 줄에서 후행 줄 바꿈 문자 제거하려면 Vim 에서이 작업을 수행해야합니다.

:set noendofline binary
:w

1
문제는 파일 중간에 두 줄을 연결하는 것입니다.이 답변은 파일 끝에서 줄 바꿈을 제거합니다.
derekerdmann

3
이것은 나를 위해 일했습니다. vim을 사용하여 한 줄 파일 끝에 줄 바꿈을 제거하려고했습니다.
Locane

:set noendofline없이는 왜 작동하지 binary않습니까?
darw

32

J여분의 선행 간격 (있는 경우)을 삭제하고 단일 공백으로 라인을 결합합니다. (일부 예외 : after 뒤에 /[.!?]$/공백이 삽입 될 수 있습니다 /^\s*)/.

해당 동작을 원하지 않으면 gJ개행을 제거하고 공백으로 영리한 작업을 수행하지 마십시오.


10

다음은 모두 커서가 첫 번째 줄에 있다고 가정합니다.

노멀 매핑 사용 :

3Shift+J

Ex 명령 사용 :

:,+2j

의 약어입니다

:.,.+2 join

다음 바로 가기로 입력 할 수도 있습니다.

3:j

더 짧은 Ex 명령 :

:j3

2
사이에 공백이 없습니다:j!3
SergioAraujo

10
set backspace=indent,eol,start

당신의 .vimrc에 사용할 수 backspacedelete\n삽입 모드 (줄 바꿈).

set whichwrap+=<,>,h,l,[,]

X(1 열에있을 때) 일반 모드에서 이전 LF를 삭제할 수 있습니다 .


2

아마도 귀하의 설정에 따라 다르지만 일반적으로 A<delete>

A줄의 끝 부분은 어디에 있습니까 ? 아마도 nocompatible모드 가 필요 합니다 :)


3
"보통 A <delete>를 사용하여이 작업을 수행합니다." 그렇기 때문에 여기에 왔습니다. 더 나은 방법을 찾기 위해;). vim의 요점은 손을 홈 줄에서 움직이지 않는 것입니다.
Luc

2
<CURSOR>Evaluator<T>():
    _bestPos(){
}

첫 줄에 커서

이제 일반 모드에서

shift+v
2j
shift+j

또는

V2jJ

: 정상 V2jJ


1

줄 바꿈을 제거하려는 행에서 A (행 끝에 추가, 삽입 모드로 전환)를 누른 다음 삭제를 누릅니다.


슬프게도, 그것은 나를 위해 작동하지 않는 것 같습니다; 내가 놓친 PuTTY 설정 일 수 있습니다.
derekerdmann

2
아마 vi 백 스페이스 옵션 ::help 'backspace'
glenn jackman

1

다른 쉘 도구를 사용하지 않는다면

tr -d "\n" < file >t && mv -f t file

sed -i.bak -e :a -e 'N;s/\n//;ba' file

awk '{printf "%s",$0 }' file >t && mv -f t file

7
그것은 과잉의 종류입니다, 당신은 생각하지 않습니까?
derekerdmann

아뇨. 왜 과잉이라고 생각합니까? Vim 내부에서하는 것은 수동입니다. 매번 수동으로 수동으로 수행할지, 아니면 하나의 라이너를 실행하여 신속하게 수행할지 여부에 따라 다릅니다. Vim은 편집자입니다. 그리고 파일을 처리 할 수있는 도구는 기본적으로 "편집자"입니다.
ghostdog74

5
여전히 vim에서 파일을 열고 사용하는 것이 더 쉽습니다 ggVGJ.
너무 많은 PHP

물론 데이터를 변경해야 할 때마다 손으로 쉽게 할 수 있다면 그렇게하십시오. 어서 또한 큰 파일로 시도하십시오.
ghostdog74

많은 파일을 처리하지 않습니다. 몇 줄의 코드를 압축하는 중입니다.
derekerdmann

1

문제는 보이지 않는 여러 문자 0A (\ n)가 누적 될 수 있다는 것입니다. 100 행에서 끝까지 정리하려고한다고 가정하십시오.

ESC 입력 및 : (터미널 사령관)

:110,$s/^\n//

vim 스크립트에서 :

execute '110,$s/^\n//'

설명 : 110에서 끝까지 새 줄로 시작하는 행을 검색하고 (비어 있음) 제거하십시오.

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