다음과 같은 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
나는 실제로 이 비법을 배웠다윔 골프도전.
답변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
불행하게도 이것은 음수를 이해하지 못하기 때문에 그다지 스마트하지 않습니다 .