
다음과 같은 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 5
Ctr+ V Ctr+ A 설명:
:norm
일반 모드에서 전체 명령을 실행합니다. +가 Ctr필요 V합니다. 그렇지 않으면 커서가 줄의 시작 부분으로 다시 이동합니다.
Ctr+는 A숫자를 1씩 증가시키며, 이 작업은 5번 수행됩니다. 콜론을 누르면 시각적 범위가 자동으로 삽입됩니다.
편집하다: Stephane이 올바르게 지적했듯이 이전 코드는 모든 줄에서 발견된 첫 번째 숫자를 증가시킵니다. 더 나은 해결책은 다음과 같습니다.
%s/\[\zs\d\+\ze\]/\=(submatch(0)+5)
괄호 안의 모든 정수에 5를 더합니다. 및는 일치 항목에서 대괄호를 제외하고 일치하는 숫자를 반환하는 데 사용 \zs
됩니다 .\ze
submatch
답변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
불행히도 이것은 음수를 이해하지 못하기 때문에 그렇게 영리하지 않습니다 .