저는 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/
( \n
NUL이 삽입되는 위치)에 삽입합니다.
나는 그 이유를 결코 이해하지 못했습니다. Enter키 입력으로 전송된 \r
문자를 NL로 변환해야 한다는 점을 고려하더라도 vim
(터미널이 표준 모드에 있을 때 tty 라인 규칙이 수행하는 것처럼) 모든 것을 설명하지는 않습니다. 또한 \n
문자를 입력(누름 Ctrl+J) 하면 vim
NUL 문자가 삽입되는 것을 볼 수 있습니다 .
: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인 닫는 중괄호를 찾는 것으로 충분합니다.