Vim - 시각적 블록의 각 숫자를 늘리는 방법은 무엇입니까?

Vim - 시각적 블록의 각 숫자를 늘리는 방법은 무엇입니까?

다음과 같은 SQL이 있습니다.

update am.PERMISSIONS set PRM_ORDER = 35 PRM_VISIBLE = b'1' where PRM_ID = 3;
update am.PERMISSIONS set PRM_ORDER = [35] PRM_VISIBLE = b'1' where PRM_ID = 7;
update am.PERMISSIONS set PRM_ORDER = [40] PRM_VISIBLE = b'1' where PRM_ID = 10;
update am.PERMISSIONS set PRM_ORDER = [45] PRM_VISIBLE = b'1' where PRM_ID = 11;
...

대괄호를 사용하여 각 숫자를 5씩 늘리려는 시각적 블록을 선택합니다. 어떻게 해야 합니까?

답변1

괄호 안의 텍스트를 시각적으로 강조 표시합니다.

Ctr+ V2jl

각 숫자를 5씩 증가시킵니다.

:norm 5Ctr+ V Ctr+ A 설명:

:norm일반 모드에서 전체 명령을 실행합니다. +가 Ctr필요 V합니다. 그렇지 않으면 커서가 줄의 시작 부분으로 다시 이동합니다. Ctr+는 A숫자를 1씩 증가시키며, 이 작업은 5번 수행됩니다. 콜론을 누르면 시각적 범위가 자동으로 삽입됩니다.

편집하다: Stephane이 올바르게 지적했듯이 이전 코드는 모든 줄에서 발견된 첫 번째 숫자를 증가시킵니다. 더 나은 해결책은 다음과 같습니다.

%s/\[\zs\d\+\ze\]/\=(submatch(0)+5)

괄호 안의 모든 정수에 5를 더합니다. 및는 일치 항목에서 대괄호를 제외하고 일치하는 숫자를 반환하는 데 사용 \zs됩니다 .\zesubmatch

답변2

숫자를 늘리기 위해 시각적 모드를 종료할 필요가 없습니다.g

5 g Ctrl-a

5 ......... 5 times
g ......... globally
Ctrl-a .... increase numbers

사실 나는 이 요령을 예전에 배웠다.vimgolf도전.

답변3

이 두 명령은 동일하며 모든 숫자가 증가합니다.이내에 시각적 선택(직사각형에서도!)

:'<,'>s/\%V\d\+\%V/\=submatch(0)+1/g

:s/\%V\d\+\%V/\=submatch(0)+1/g

잘게 썰었다::s / \%V \d\+ \%V / \=submatch(0)+1 / g

\%V현재(또는 마지막) 선택 항목 내부의 어느 위치와도 일치하는 너비가 0인 일치자입니다 .

vim 도움말에서:

\%V     Match inside the Visual area.  When Visual mode has already been
        stopped match in the area that gv would reselect.
        This is a /zero-width match.  To make sure the whole pattern is
        inside the Visual area put it at the start and just before the end of
        the pattern, e.g.:
                /\%Vfoo.*ba\%Vr
        This also works if only "foo bar" was Visually selected. This:
                /\%Vfoo.*bar\%V
        would match "foo bar" if the Visual selection continues after the "r".
        Only works for the current buffer.

ctrl-a불행히도 이것은 음수를 이해하지 못하기 때문에 그렇게 영리하지 않습니다 .

관련 정보