Vim의 각 줄 끝에 텍스트를 추가하는 방법은 무엇입니까?


116

Vim에는 다음과 같은 텍스트가 있습니다.

key => value1
key => value2
key => value1111
key => value12
key => value1122222

각 줄 끝에 ","를 추가하고 싶습니다. 이전 텍스트는 다음과 같습니다.

key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,

누구든지 이것을하는 방법을 알고 있습니까? 이를 위해 시각적 차단 모드를 사용할 수 있습니까?


여기에 비슷한 질문이 있습니다 .
glts

답변:


163

이것은 파일의 모든 줄에 적용됩니다.

:%s/$/,/

전체 파일 대신 줄의 하위 집합을 수행하려는 경우 %.

한 가지 방법은 시각적 선택을 수행 한 다음 :. 그것은 :'<,'>당신 을 위해 채워질 것입니다, 그리고 당신은 그것의 나머지를 입력합니다 (당신은 추가하기 만하면됩니다 s/$/,/)

:'<,'>s/$/,/

4
마지막 행에는 추가 '가 있어야합니다 :'<,'>s/$/,/.
cjg 2014

왜 필요가 g없습니까? ( :'<,'>s/$/,/g)
Thorbjørn EK Christensen

/$/어쨌든 한 번만 일치 하기 때문에 @ ThorbjørnE.K.Christensen .
Bubaya

156

실제로 시각적 블록 모드를 사용하여이를 수행하는 방법이 있습니다. $A시각적 블록 모드에서 누르기 만하면 선택 항목의 모든 줄 끝에 추가됩니다. 를 누르면 추가 된 텍스트가 모든 줄에 나타납니다 Esc.

따라서 이것은 가능한 해결책입니다.

vip<C-V>$A,<Esc>

즉, 일반 모드에서 시각적으로 단락을 선택하고 vip시각적 차단 모드로 전환 한 다음 CTRLV모든 줄 $A에 쉼표를 추가하고 ,를 눌러 Esc확인합니다.

설명서는에 :h v_b_A있습니다. 예제 섹션에는 작동 방식에 대한 설명도 있습니다 :h v_b_A_example..


1
아니요, 이것은 표준 Vim입니다. 비주얼 블록 모드 (사용 C-V) 에서 일부 줄을 선택한 다음 커서를 줄 끝으로 이동하고 $모든 줄 에 추가합니다 A. :h v_b_A정말 철저한을 (를) 좋아할 것입니다.
glts

1
오, 무슨 일인지 알 겠어요! 나는 일반적으로 <Esc> 대신 Ctrl-C를 사용하여 삽입 모드를 종료하고 분명히 Ctrl-C를 사용하면 작동하지 않습니다! 얼마나 이상해.
weronika

3
당신은 사용하여 키 입력을 저장할 수 있습니다 <C-V>ip대신에 vip<C-V>.
Aaron Thoma 2014 년

1
@accolade는 그런 식으로 시각적 차단 모드로 들어 가지 않으며 작동하지 않습니다. 그렇게하면 <CV>가 다시 일어나야합니다.
imagineerThat

그것은 이상합니다-저에게 효과적입니다-기본이 아닌 옵션 때문일 것입니다. (아니요 'virtualedit'-나는 그것을 테스트했습니다.) 깨끗한 vim에서 작동하지 않는다는 것을 확인했습니다. 메모 감사합니다!
Aaron Thoma 2015

44

또 다른 훌륭한 기능을 사용하는 또 다른 솔루션 :

:'<,'>norm A,

을 참조하십시오 :help :normal.


1
@Swiss, 당신은 이 코멘트 를 좋아할 것 입니다.
romainl

1
@Swiss, 당신은 수 또한 같은 udioca는 노출 것:normal. 유익한 정보를 찾았습니다!
Conner

1
이 서브 레딧에 대해 몰랐습니다. 감사.
romainl

33

ex 모드가 가장 쉽습니다.

:%s/$/,

: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma

10

대체 명령은 시각적 선택에 적용 할 수 있습니다. 변경하려는 줄 위에 시각적 블록을 만들고를 입력 :하면 명령 줄이 다음과 같이 초기화 :'<,'>됩니다.. 이는 대체 명령이 다음과 같이 시각적 선택에 대해 작동 함을 의미합니다.

:'<,'>s/$/,/

그리고 이것은 당신이 언급 한 것처럼 각 줄의 끝에 쉼표를 정말로 원한다고 가정하면 예제에서 작동 해야하는 대체입니다 . 후행 공백이 있으면 그에 따라 명령을 조정해야 할 수 있습니다.

:'<,'>s/\s*$/,/

이렇게하면 줄 끝 앞의 공백을 쉼표로 대체하여 후행 공백을 효과적으로 제거합니다.

동일한 명령이 일련의 행에서 작동 할 수 있습니다 (예 : 다음 5 개 행 : :,+5s/$/,/또는 전체 버퍼 :) :%s/$/,/.


3

'key'로 시작하는 줄 끝에 ','를 추가하려면 다음을 사용하십시오.

:%s/key.*$/&,

또는 :g/key/s/$/,. 을 참조하십시오 :help :global.
romainl

2

나는이 <M-DOWN>매핑 (아래쪽 화살표 ALT) <DOWN>.나는 매우 빠르게 라인의 일련의 마지막 명령을 반복 할 수 있도록합니다. 이 매핑을 사용하여 다음을 수행 할 수 있습니다.

A,<ESC>

그런 다음 Alt 키를 누른 상태에서 반복적으로 눌러 각 줄 끝에 쉼표를 추가합니다.
이것은 라인이 무엇을하고 변화를 얻지 못하는지를 아주 잘 제어 할 수 있기 때문에 저에게 잘 작동합니다.
(또한 쉽게 반복 할 수 있도록 유사한 매핑 된 다른 화살표가 있습니다. .)

다음은 vimrc에 붙여 넣을 매핑 라인입니다.

map <M-DOWN> <DOWN>.

1
:%s/$/,/g

$는 줄의 끝과 일치합니다.


2
그것은 $뿐만 아니라 라인에 추가 됩니다 ,.
ZYX

2
/g줄의 모든 항목에서 대체를 수행하는 데 사용됩니다. $한 줄에 하나만 있기 때문에 안전하게 떨어 뜨릴 수 있습니다.
romainl 2012

그래, $에 대한 내 실수. / g는 habbit에서 왔으며 예는 선택 사항입니다.
kalhartt

1

다음 매크로를 사용하여 작업을 수행 할 수도 있습니다.

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