예를 들어, 숫자 열이 있는 경우:
4
6
8
10
12
8보다 큰 숫자를 계산하는 대신 Vim에서 8보다 큰 모든 숫자를 찾을 수 있는 방법이 있나요? 결과는 새 열입니다.
4
6
8
(10+2)=12
(12+2)=14
답변1
이러한 대체를 수행하려면 특수 대체 표현식을 사용할 수 있습니다 \=
. 확인하다:help sub-replace-special
모든 세부 정보를 확인하세요. 이 특정 대체품의 작동 방식은 다음과 같습니다.
%s/\d\+/\=str2nr(submatch(0)) > 8 ? str2nr(submatch(0)) + 2 : submatch(0)
명령의 대체 부분에서 는 :substitute
완전한 일치를 제공합니다. 전역 함수는 이를 숫자로 변환합니다.\=
submatch(0)
str2nr
로직을 더 읽기 쉽게 만들고 싶다면 이를 함수로 추출할 수 있습니다.
function! IncrementNumber(number_string)
let number = str2nr(a:number_string)
if number > 8
let number += 2
endif
return number
endfunction
이것을 넣고 .vimrc
조정하고 임계값을 8
매개변수 등으로 설정한 다음 파일에서 호출할 수 있습니다.
%s/\d\+/\=IncrementNumber(submatch(0))