스왑 함수 인수


19

코드를 리팩토링 할 때 함수 인수를 바꾸는 것이 유용 할 것입니다.

예를 들어 변경 :

func(foo[0], bar(), baz.spam)

으로

func(baz.spam, foo[0], bar())

함수 괄호와 쉼표를 유지하면서 인수를 왼쪽 / 오른쪽으로 바꾸는 방법이 있습니까?


참고이 예를 들면 : - 당신은 스스로 자신의 인수로 함수 호출이다 인수 계정으로하려면 상당히 관여 func(baz->spam, foo[0], bar(a, b, c))- 가능성이 좀 더 포괄적 인 분석을 포함 할 이러한 경우를 지원.

답변:


23

플러그인없이

| 커서 위치를 나타냅니다

func(foo[0], bar(), |baz.spam)

단계 :

  1. dt) 삭제합니다 baz.spam
  2. Ff 커서를 문자 f로 이동시킵니다. foo[0]
  3. vt,p foo [0]을 삭제하고 baz.spam
  4. $P 괄호 앞에 foo [0]을 붙여 넣습니다.
  5. 다른 1-4 단계를 반복하십시오.

플러그인

  • VIM-논쟁 에 의해 피터 Rincker : 함수 인수를 주변에 이동 텍스트 개체를 제공합니다 (: 기본 매핑 <,>,).
  • 정력 교환 에 의해 톰 맥도날드 : 교환에 두 가지 선택 (: 기본 매핑 편리 매핑을 제공합니다 cx일반 모드와 X비주얼 모드)를.
  • VIM-옆 으로 앤드류 Radev : 이동 함수 인수 (및 기타로 구분별로 어떤 항목) 좌우 (기본 매핑 : NA).
  • 정력 스왑 에 의한 machakann : 재정렬 항목으로 구분 된 (: 기본 매핑을 g<하고 g>).

6
플러그인이 아닌 솔루션은이 경우에 매우 구체적입니다.
elyashiv

3
@elyashiv 아이디어는 모든 함수 인수에 대해 비슷한 기술을 사용할 수 있다는 것입니다. 기본적으로 단어를 잡아 당기고 다른 단어를 시각적으로 선택하여 붙여 넣습니다. Vim은 삭제 된 문자를 레지스터에 잡아 당기고 처음 들어간 곳을 붙여 넣습니다.
akshay

1
vim-sideways +1! 마지막 섹션에서는 cia "인수 변경" 이라는 매우 유용한 기능에 대해 설명합니다 . ❤️
Martijn Courteaux

5

나는 3 가지 방법을 제시한다. 처음 두 가지는 특별한 경우이며 키 입력이 덜 필요합니다. 마지막은 일반적인 것입니다. |커서 위치를 나타냅니다.


인접 인수 교체 (마지막 두 개에서는 작동하지 않음)

function func(foo[0], |bar(), baz.spam, qux->norf)

단계 :

  1. dW 현재 단어 삭제 (인수)
  2. W 다음 인수의 첫 번째 문자로 이동
  3. P 커서 앞에 붙여 넣기

마지막 두 인수 교환

function func(foo[0], bar()|, baz.spam, qux->norf)

단계 :

  1. dt, 다음 쉼표까지 삭제
  2. E 다음 인수의 마지막 문자로 이동
  3. P 커서 앞에 붙여 넣기

두 개의 인수를 바꾸십시오

function func(|foo[0], bar(), baz.spam, qux->norf)

단계 :

  1. vt,d 쉼표까지 시각적으로 삭제
  2. W 당신이 교환하고자하는 논쟁에 도달 할 때까지 여러 번
  3. gP 붙여 넣기 후 붙여 넣기 및 붙여 넣기 내용 뒤에 문자 위에 커서를 놓습니다
  4. dt,다음 쉼표까지 삭제하십시오. 교체 ,)이번이 마지막 인수 인 경우
  5. `< 마지막 시각적 영역의 시작으로 돌아갑니다 (커서는 쉼표에 배치됩니다)
  6. P 커서 앞에 붙여 넣기

편집 : @ aharris88이 지적한 것처럼 OP는 마지막 인수가 첫 번째 인수가되고 다른 인수는 모두 올바르게 이동하기를 원합니다.

인수를 오른쪽으로 회전

function func(foo[0], bar(), baz.spam|, qux->norf)

단계 :

  1. dw 지우다 ,␣
  2. dt) 마지막 인수 삭제
  3. %p 괄호를 열고 마지막 인수를 붙여 넣습니다.
  4. a,␣ 쉼표와 공백을 삽입하십시오
  5. <Esc> 정상 모드로 돌아 가기

또는 일반 모드를 떠나고 싶지 않은 경우 :

  1. "rdw,␣레지스터로 삭제r
  2. dt) 마지막 인수 삭제
  3. %p 괄호를 열고 마지막 인수를 붙여 넣습니다.
  4. "rp 레지스터 내용 붙여 넣기 r

보너스 : 각 경우에 대한 GIF : swap1 , swap2 , swap3회전


이 답변은 인수를 교환하지만 마지막 인수를 처음으로 이동시키는 방법에 대한 질문에는 대답하지 않습니다.
aharris88

@ aharris88, 네 말이 맞아. 내 답변을 편집했습니다.
Gonçalo Ribeiro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.