vi에서 두 줄을 어떻게 연결합니까?


169

아래와 같이 텍스트 파일에 두 줄이 있습니다.

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

vi와 같이 두 줄을 아래에 추가하고 싶습니다.

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

두 번째 줄이 삭제되고 두 번째 줄의 내용이 첫 번째 줄에 추가되었습니다.

vi에서 명령 모드를 사용하여 어떻게 할 수 있습니까?

답변:


310

Shift+ J는 현재 행에서 행 변경 문자를 제거하므로 행의 어느 위치에서나 "J"를 누르면 현재 행과 다음 행을 원하는 방식으로 결합 할 수 있습니다.


9
상부 케이스 J 커서 라인 소문자 이동 가입

4
소문자 J가 아닌 대문자 J였습니다. 따라서 Shift-J.
Jonathan Leffler

28
"현재 행에서 행 변경 문자를 제거합니다"는 J가하는 일을 설명하기에 매우 어색한 방법이며 실제로 정확하지도 않습니다. J는이 행을 다음 행에 "결합"합니다. 이 과정에서 줄 바꿈을 제거하고 다른 방법으로 공백을 조작합니다.
Laurence Gonsalves

5
ㅋ. GJ에서 vim마지막 줄로 이동 한 후 다음 줄에 연결하려고 시도합니다. 결합 명령이 의미가없는 유일한 위치입니다. 그래, 나는이 재미 :-) 발견
알록 Singhal이

2
여전히이 편집기를 사용하여 두 줄을 결합하기 위해 StackOverflow로 이동해야한다는 것을 알 수 없습니다!
Manitra Andriamitondra

59

Vi 또는 Vim?

어쨌든 다음 명령은 'nocompatible'모드의 Vim에서 작동합니다. 즉, 거의 순수한 vi라고 생각합니다.

:join!

정상적인 명령으로 사용하려면

gJ

'gJ'를 사용하면 공백을 추가하거나 제거하지 않고 그대로 라인을 결합합니다.

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

결과:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

'J'명령을 사용하면 다음이 가능합니다.

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT

type>와 사이에 공백이 _ID있습니다.


2
g/pattern/joinVIM 에서는 작동하지만 g/pattern/J그렇지는 않지만 지적하십시오 . 미래의 일부 사람들을 도울 수 있습니다.
jisaacstone

나는 패턴과의 결합을 좋아하지만 공백으로 두 줄을 결합합니다. 어쨌든 공백없이 패턴으로 두 줄을 연결 하시겠습니까?
David.Chu.ca

g / 패턴 / 가입! 그렇게하는 것 같습니다.
포트 보이즈

1
좀 더 복잡 할 수 있습니까? :-)
Johannes Overmann

22

이것은해야합니다 :

J


6
'J'는 선을 결합하는 동안 추가 공간을 제공합니다.
Maxim Kim

3
@MaximKim : 그리고 이것이 이유 입니다. 참고 :h J어떻게 기능을 비활성화하는 방법을 알려드립니다.
ereOn

2
gJvim이 라인을
연결할

17

vi에서는 J( Shift+ J) 또는 :join대부분 원하는대로해야합니다. 공백을 조정합니다.특히, 대부분의 경우 두 개의 결합 된 줄 사이에 공백이 생겨 두 번째 줄이 들여 쓰기되면 들여 쓰기가 결합 전에 제거됩니다.

Vim에서는 gJ( G, Shift+ J) 또는 을 사용할 수도 있습니다 :join!. 공백을 조정하지 않고 선을 결합합니다.

Vim에서 자세한 내용 :help J을 참조하십시오.


사용하여 한 가지주의 gJ와는 J입니다 모두 장하여 합류 지점에 커서 만 :join!하고 :join말아.
SergioAraujo

4

" \n"를 ""로 바꾸십시오 .

문서의 모든 줄에 대해 vi / Vim에서 :

%s/>\n_/>_/g

모든 교체를 확인하려면 다음을 수행하십시오.

%s/>\n_/>_/gc


1

첫 번째 줄에서 Shift+ 4( "$")를 누른 다음 Shift+ j( "J")를 누릅니다 .

도움이 필요하면 vi로 이동 한 다음을 누르십시오 F1.


3
$ 행의 끝으로 이동하지만, J 필요하지 않습니다

1
J가 라인에 참여하기 위해 라인의 끝에있을 필요는 없습니다.
Jonathan Leffler

1
실제로 $를 누를 필요는 없습니다.
Laurence Gonsalves

1
@laurence .pressing $는 커서가 새 라인 차터 바로 옆에 위치하고 이것이 필수입니다.
Vijay

1

Vim에서는을 사용할 수도 있습니다 gJ.

ََ


1

해당 줄에 커서를 두지 않고 두 줄을 연결하는 다른 방법은 다음과 같습니다.

:6,6s#\n##

6은 다른 회선이 결합 될 회선 번호입니다. 줄 번호를 표시하려면:set nu .

다음 줄을 연결해야하는 커서에있는 경우 :

:s#\n##

두 줄 모두 한 줄에 하나만 존재 하기 때문에 glike 가 필요하지 않습니다 .:s#\n##g\n


Shift+V마지막 줄을 제외한 모든 줄을 선택하고, :'<,'>s/\n/, /이 예에서는 줄 끝에 쉼표와 공백을 넣는 동안 줄을 연결하는 것이 더 쉽습니다 . 무언가를 선택하고 :일반 모드로 입력 '<,'>하면 명령 행에 자동으로 나타납니다.
Evgeni Sergeev

선호하는 구분 기호를 사용하여 선택된 다중 회선 결합에 적합합니다. 일반 모드 또는 시각적 모드에서 오타 하나를 찾았습니까?
vusan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.