대체 명령에 대한 미리보기를 얻는 방법?


9

나는 종종 큰 파일 전체에 걸쳐 일치하는 검색과 대체 검색이 아닌 대체를 수행해야하는 경우가 많다.

예를 들어, 같은 함수 호출이 있다고 가정 해보십시오 okFunction(arg1, arg2 arg3). 인수는 물론 모든 함수 호출에 따라 다릅니다. 이제 필요없는 더 나은 기능을 발견했다고 가정 해보십시오 arg2. 쉽게 전체 파일을 조정할 수 있습니다

:%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc

개념적으로는 간단하지만이 긴 패턴으로 구문이 올바른지 확실하지 않습니다. 이 c플래그는 실제로 여기에 도움이되지만 문제는 확인을 요청할 때 vim이 일치하는 항목을 표시하지 않는다는 것입니다. 그것은 대체 식을 보여 주지만 평가 결과는 보여주지 않을 것입니다. 으로 교체를 확인하면 yvim은 즉시 다음 경기로 넘어 가며 실수를 저지른 적이 없습니다.

문제를 부분적으로 해결 하는 vim-over 플러그인을 찾았 지만 명령을 입력 할 때 화면에 모든 수학이 표시되는 경우에만 가능합니다. Enter 키를 누르면 동작은 위에서 설명한 것과 동일하며 미리 볼 수 없습니다.

대체 명령에 대한 확인을 요청할 때 vim이 대체 표현식을 평가할 수있는 방법이 있습니까?


2
그것은 vim-bug tracker의 위시리스트 아이템입니다 (죄송합니다)
Christian Brabandt

2
가치있는 것을 위해 나는 보통없이 첫 번째 줄에서 대체를 사용하여 대체하지 않고 %결과가 내가 기대 한 결과인지 확인한 다음 대체를 사용합니다 %(키를 몇 번만 누르면 됩니다 :<up><c-b>%). 분명히 미리보기 옵션이 그보다 훨씬 효율적입니다. 패치를 구할 수는 없지만 이런 종류의 옵션으로 vimscript 함수에서 대체를 래핑 할 수는 있지만 많은 작업처럼 들립니다 ...
statox

2
@ChristianBrabandt 그것을 찾았습니다 . 아직 분류되지 않은 우선 순위는 ...
Vitor Eiji

2
@VitorEiji는 내가 생각한 것이 아닙니다. 그러나 현재 가능하지 않기 때문에 실제로 중요하지 않습니다. Neovim은 'inccommand'옵션을 제공합니다. 작동하지 않을 수도 있습니다 (또는 실제로는 그렇지 않습니다)
Christian Brabandt

은 대체를 미리 본다. 그래도 어떻게하는지 모르겠습니다.
Geremia

답변:


2

한 가지 해결 방법은 매크로입니다. 모든 문제 영역을 강조 표시하고 한 번에 한 줄씩 대체하십시오. 그런 다음 원하는지 여부를 결정하십시오. n다음 지역으로 가면 .

귀하의 경우 구체적으로 :

  1. 영역 검색 : /\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))
  2. 매크로 기록을 시작하십시오 qq.
  3. 대다 :s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/g
  4. 매크로 기록 중지 q
  5. 실행 취소 ( u)하거나 다음 검색 결과 ( n)로 이동하십시오.
  6. 매크로를 적용하십시오 @q.
  7. 필요에 따라 5 단계와 6 단계를 반복하십시오.

분명히 당신이 찾고있는 것이 아니지만 이것은 일반적으로 내가하는 일입니다.


멋지다! 나는 당신이 /그것을 검색 할 때 시각적 선택처럼 행동 한다는 것을 결코 깨닫지 못했습니다 .
the_velour_fog

@the_velour_fog " /... 시각적 선택으로 동작합니다." 실제로 그렇지 않습니다. 이것이 작동하는 이유 :s//는 현재 행에서 작동 n하고 다음 행으로 이동 하기 때문 입니다.
텀블러 41

1
패턴을 지정하지 않으면 :s/pattern/replacement마지막 검색 문자열이 사용되므로 3 단계에서 실제로 :s//betterFunction(\1, \3)/g일부 입력을 저장하도록 적용 할 수 있습니다 .
Haegin

@ Tumbler41 아, 명확히 해 주셔서 감사합니다. 예 , 이 기본 검색 기술을 수행 한 다음 매크로적용합니다. 일반적으로 arglist를 먼저 채우고 매크로:vimgrep /pattern/ ##적용 하면 패턴이 실제로 일치하고 매크로가 너무 지루한 경우 신속하게 처리 할 수 ​​있습니다. 복귀 :argdo %s/.../..../gc및 작업을 통해 비행 시작
the_velour_fog
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.