파일의 모든 중괄호 사이에 "return 0"을 삽입하시겠습니까?

파일의 모든 중괄호 사이에 "return 0"을 삽입하시겠습니까?

저는 C++로 상당히 큰(~50개 함수) 테스트 라이브러리를 구축하고 있습니다. 함수가 정수를 반환해야 한다는 사실을 잊어버렸습니다. 실제로 반환 유형을 입력하는 것을 전혀 잊어버렸습니다. 얼마나 어리석은 일입니까? 각 함수의 시작 부분에 int 반환 유형을 추가했습니다.

:%s/^[a-z]/int &/g

하지만 지금은 어떻게 추가해야 할지 모르겠습니다 return 0;. 나는 시도했다:

:%s/{\r\r}/{\r\treturn 0;\r}/g

그리고 그것의 변형은 각각 패턴을 찾을 수 없다고 말합니다. 기능 설정은 다음과 같습니다.

int function_name()
{

}

나는 그들이 다음과 같이 보이기를 원합니다 :

int function_name()
{
    return 0;
}

어떤 아이디어가 있나요? ? ?

답변1

vim\n정규식에서 개행을 일치 시켜야 하기 때문에 이 동작이 있습니다 . 그러나 \r( \r그렇지 않으면 개행이 아닌 CR이 됩니다) 명령의 오른쪽 s/LHS/RHS/( \nNUL이 삽입되는 위치)에 삽입합니다.

나는 그 이유를 결코 이해하지 못했습니다. Enter키 입력으로 전송된 \r문자를 NL로 변환해야 한다는 점을 고려하더라도 vim(터미널이 표준 모드에 있을 때 tty 라인 규칙이 수행하는 것처럼) 모든 것을 설명하지는 않습니다. 또한 \n문자를 입력(누름 Ctrl+J) 하면 vimNUL 문자가 삽입되는 것을 볼 수 있습니다 .

:h NL-used-for-Nul이는 NUL이 내부적으로 NL로 저장되기 때문이라고 말하지만 vim(내 생각에는 여전히 NUL로 구분된 문자열을 사용할 수 있음) 인터페이스에서 사용자에게 표시되도록 결정한 이유는 설명되지 않습니다.

어쨌든, 그게 방법이므로 우리는 해야 할 일을 해야 합니다. 다음은 이렇습니다.

:%s/{\n\n}/{\r\treturn 0;\r}/g

(우리는 개행 문자를 일치시켜 이를 개행 문자로 변환된 CR 문자로 대체합니다).

답변2

당신은 그것을 사용할 수 있습니다

:%s/^}/    return 0;\r}/g

여는 중괄호에 대해 신경 쓸 필요는 없습니다. 들여쓰기가 0인 닫는 중괄호를 찾는 것으로 충분합니다.

관련 정보