2011-03-30 2 views
4

파일을 통해 텍스트를 찾아서 바꿀 수있는 매우 유용한 플러그인이 있습니다 (EasyGrep vim 스크립트 참조 - 프로그래머에게 매우 유용합니다). 플러그인이나 :%s ...을 사용하여 현재 버퍼의 텍스트 만 바꿀 수도 있습니다. 하지만 현재 함수 본문 내에서 텍스트를 바꾸려면 어떻게해야합니까? 내가 확인을 위해 c 플래그 :%s ...을 사용할 수 있습니다, 물론Vim : 함수 본문 내에서 텍스트 바꾸기

void f0() 
{ 
    int foo = 0; 
    // ... 
} 

// 99 other functions that uses foo as local variable. 

void f100() 
{ 
    int foo = 0; // I want to replace foo with bar only in this function 
    // 1000 lines of code that uses foo goes below 
    // ... 
} 

, 그러나 나는이 작업을 수행하는 빠른 방법이 생각 :

는 다음과 같은 예를 생각해 보자.

감사합니다.

답변

4

이 기능을 V로 표시 할 수 있습니다. 다음에 명령을 입력하면, 자동으로 접두사가 붙고 표시된 영역에서만 실행됩니다.

기능 시작과 기능 끝으로 점프하기위한 명령이 있으므로 시작 기능, V 기능, 끝 기능을 매우 빠르게 대체 할 수 있습니다. 그런 명령을 몰라.

+0

트릭을 수행합니다. 감사. 나는 당신의 답을 옳다고 표시합니다. – maverik

13

%을 사용하거나 선택 항목을 사용하여 전체 파일에 대체를 적용 할 수 있습니다. , Shift+v으로, 예를 들어 비주얼 모드 라인 방식에서

이동 몇 라인을 선택하고 :을 입력

은 선택을 만듭니다. 그 의미 :'<,'> : 현재 선택

를 입력 한 후 s/foo/bar/g와 현재의 선택된 라인 모음으로 foo는 대체됩니다 같은

귀하의 메시지가 보일 것이다. vi} 그것이 {} 사이에 모든 것을 선택합니다 :

함수의 컨텐츠를 선택하는 더 나은 방법은 커서 유형의 함수 내에서 이동하는 것입니다.

선택에 대한 추가 정보는 :help text-objects을 참조하십시오.

+2

'vi}'에 감사드립니다. 정말 유용합니다. 그러나 함수 내에 블록 {...}이있을 때'vi}'는 혼란에 빠지게됩니다. ( – maverik

+0

@maverick : 첫 번째 열에서'['를 사용하여'{'로 이동하는 것과 같은 다른 트릭이 있습니다. 거기에 있다면,'v'로 시각 모드를 입력 한 다음'%'를 누르면 닫히는'}'로 넘어 가서 그 과정에서 함수를 선택합니다. % '를 사용하여 함수를 빠르게 선택할 수 있습니다. –

+0

도중에있는 [{','}'의 수와 상관없이'[m'을 사용하여 함수/메소드의 시작으로 이동할 수 있습니다. a는 텍스트 개체로 기능/방법 몸을 사용하는 내의 .vimrc 파일에 매핑을 만들어' 오전 vnoremap :. 정상 [mV의] M '와 'onoremap 오전 :! 정상 [mV의] M 이제 함수 바디를 선택하는 것은'vam'처럼 간단합니다. –

1

필자는 항상 [[[함수의 시작 부분으로 건너 뛰고 %를 사용하여 함수의 끝으로 이동합니다. 함수의 위와 아래를 각각 표시하기 위해 mtmb을 사용했습니다. 그런 다음 표시된 위 아래의 검색 및 바꾸기 : 't', bs/pattern/newpattern/g. 이것은 항상 나를 위해 일해 왔습니다. 이 매크로를 만들 수 있다고 확신합니다.

시각적 선택 (vi)은 훨씬 쉽고 빠릅니다. 커서 위치를 인식합니다. 따라서 커서가 함수 블록 안에 있으면 vi는 해당 블록의 모든 행을 선택합니다. 전체 기능을 선택하려면 하위 블록 외부에 커서를 놓고 vi를 실행해야합니다. 이것은 현재 창에 맞는 기능 블록에 유용합니다. 현재 창을 넘어서는 기능의 경우 스크롤 업하면 선택이 손실됩니다.

정말 쉽고 빠르기 때문에 나는 시각적으로 vi를 선택하는 것을 좋아하지만, 때때로 예전의 학교 방법을 사용해야합니다.

관련 문제