![vim에서 모든 줄을 문자 순서로 묶습니다.](https://linux55.com/image/68112/vim%EC%97%90%EC%84%9C%20%EB%AA%A8%EB%93%A0%20%EC%A4%84%EC%9D%84%20%EB%AC%B8%EC%9E%90%20%EC%88%9C%EC%84%9C%EB%A1%9C%20%EB%AC%B6%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
따라서 기본적으로 일부 코드를 복사/붙여넣었고 각 줄 앞에 코드를 더 추가하고 추가해야 합니다. 각 줄은 함수 호출이며 해당 용어에 따라 스위치 문에 추가됩니다.
이제 다음과 같습니다:
switch(n)
{
case 1: retVal = foo("bar"); break;
case 2: retVal = foo("Bar"); break;
foo("bAr");
foo("BAr");
foo("BAR");
}
다음과 같이 표시되어야 합니다.
switch(n)
{
case 1: retVal = foo("bar"); break;
case 2: retVal = foo("Bar"); break;
case 3: retVal = foo("bAr"); break;
case 4: retVal = foo("BAr"); break;
case 5: retVal = foo("BAR"); break;
}
내가 생각 해낸 최고는 다음과 같습니다.
:'<,'>s/I DONT KNOW/case SOMETHING: retVal = & break;/g
무엇이 바뀌어야 I DON'T KNOW
할까요 ? SOMETHING
문제는 제가 정규식에 익숙하지 않고, 무엇을 넣어야 할지 모르겠다는 것입니다. 어떤 아이디어가 있나요?
편집: Muru의 답변을 본 후 게시해야 한다는 것을 깨달았습니다.이것번호가 매겨진 섹션에 대한 링크입니다. 예제 11에서는 정규식을 사용하여 시퀀스 번호를 다시 매기는 방법 중 하나를 보여줍니다(기존 시퀀스가 있다고 가정).
답변1
시각적 모드 선택이 행으로만 제한되어 있다고 가정할 때 foo(...);
제가 생각할 수 있는 최선의 방법은 다음과 같습니다.
:let c=2|'<,'>g//let c=c+1|s/\v\S+/\="case ".c.": retVal = ".submatch(0)." break;"/
더 읽기 쉬운:
let counter = 2
'<,'>g// " for some reason, we need both markers and g// for `let` to work
let counter = counter + 1
s/
\v " `\v` is "very magic"
\S+/ " used for `\S` - all non-whitespace characters
\= " Indicate that replacement is an expression
"case " . " `.` concatenates strings
counter .
": retVal = " .
submatch(0) .
" break;"
/
에서 적응이 Vim 위키아 게시물.
네, 알아요. 이건 너무 추악해요. 더 좋은 방법이 있습니다.
또 다른 방법은 매크로를 사용하는 것입니다: (첫 번째 줄부터 시작, 없이 case
)
qq
k:s/\v(case \d+: retVal = )(.*)\n(\s*)(.*)/\1\2\r\1\4 break;/|exe "norm \<c-a>"
j
q
@q
그런 다음 남은 행만큼 여러 번 사용하십시오 .