vim에서 숫자 열의 조건부 편집을 사용하는 방법은 무엇입니까?

vim에서 숫자 열의 조건부 편집을 사용하는 방법은 무엇입니까?

예를 들어, 숫자 열이 있는 경우:

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))

관련 정보