development

Vim에서 여러 줄의 편집을 어떻게 반복합니까?

big-blog 2020. 7. 30. 09:25
반응형

Vim에서 여러 줄의 편집을 어떻게 반복합니까?


나는 Vim에서 종종 앞에 숫자를 추가하여 명령을 반복 할 수 있다는 것을 알고 있습니다. 예를 들어, 다음을 통해 5 줄을 삭제할 수 있습니다.

5dd

예를 들어 명령을 적용 할 행 범위를 지정할 수도 있습니다.

:10,20s:hello:goodbye:gc

'수직 편집'을 어떻게 수행 할 수 있습니까? 예를 들어 주어진 줄의 모든 줄의 시작 (공백을 건너 뛰면 명령 줄에 Shift-I 다음에 쉼표를 입력하면 얻을 수있는 것)에 특정 기호, 쉼표를 삽입하고 싶습니다. 범위. 이를 어떻게 다운 기간 (down-down-down-down-down-down-down-period)없이 달성 할 수 있습니까?


:10,20s/^/,/

또는 매크로를 사용하여 다음을 기록하십시오.

q a i , ESC j h q

함께 사용 :

@ a

설명 : q a매크로 등록 기록 시작 a, q끝이 기록. 사용할 수 있는 레지스터 az있습니다.


Ctrl- v시각 모드를 블록 단위로 입력합니다. 그런 다음 ( hjkl일반적으로 -wise) 이동할 수 있으며 여러 줄에 무언가를 삽입하려면 Shift-를 사용하십시오 i.

따라서 텍스트의 경우 :

abc123abc
def456def
ghi789ghi

당신이 충돌하는 경우 Ctrl- v커서와 함께 1 이상, 명중 j두 개의 열이 내려 가고 두 번, 다음 Shift- i,ESC이 같을 것이다 텍스트 :

abc,123abc
def,456def
ghi,789ghi

(멀티 라인 인서트에는 약간의 지연이 있으며를 누른 후에는 렌더링되지 않습니다 ESC.)


이것이 : norm (al) 명령의 목적입니다 :

: 10,20 정상 I,

이미 '.'을 사용중인 경우 마지막 명령을 많이 반복 하면 이것이 지금까지 가장 편리한 솔루션이라는 것을 알았습니다 . 그것은 당신이 사용하여 시각적 블록의 각 줄에 마지막 명령을 반복 할 수 있습니다

" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>

가장 쉬운 방법은

1) 한 줄의 매크로를 기록하고 'a'라고 부릅니다. 이 경우 한 가지 유형

qa I, ESC jq

2) 매크로를 적용하려는 선 블록을 선택하십시오.

3) 'norm'함수를 사용하여이 행 블록에 대해 매크로 'a'를 실행하십시오.

:'<,'>norm@a

가장 쉬운 방법은 매크로를 기록한 다음 원하는만큼 매크로를 반복하는 것입니다. 예를 들어 모든 줄의 시작 부분에 쉼표를 추가하려면 다음을 입력하십시오.

q a I , ESC j q

5 번 반복하려면

5 @ a

블록 비주얼 모드를 사용 합니다 . 이를 통해 여러 줄에 걸쳐 삽입 / 편집을 수행 할 수 있습니다 (일명 '수직 편집').


이미 답변 한 것처럼 매크로 외에도 쉼표를 다양한 행 (예 : 10 ~ 20 행)에 삽입하는 경우에는 다음과 같이 할 수 있습니다.

:10,20s/\(.*\)/,\1

즉, \ (및 \)와 함께 번호가 매겨진 그룹 일치를 만들고 대체 문자열에서 \ 1을 사용하여 "일치하는 내용으로 바꾸기"라고 말할 수 있습니다.


편집자가 .운영자에 이미 저장 한 상태에서 다음을 수행하십시오.

  1. 시각 모드를 사용하여 연산자를 적용 할 텍스트를 선택하십시오.
  2. 그런 다음 명령을 실행하십시오. :norm .

참고 URL : https://stackoverflow.com/questions/355907/how-do-i-repeat-an-edit-on-multiple-lines-in-vim

반응형