가 어떤 명령이 VI이변환 VAR (a, b)에 VAR (b, a)에 VI
flux(1,i)
flux(2,i)
flux(3,i)
flux(4,i)
flux(5,i)
변환 할 수 있는가? 일반적으로
flux(i,1)
flux(i,2)
flux(i,3)
flux(i,4)
flux(i,5)
내가 당신은 대체 사용할 수
flux(a,b)
가 어떤 명령이 VI이변환 VAR (a, b)에 VAR (b, a)에 VI
flux(1,i)
flux(2,i)
flux(3,i)
flux(4,i)
flux(5,i)
변환 할 수 있는가? 일반적으로
flux(i,1)
flux(i,2)
flux(i,3)
flux(i,4)
flux(i,5)
내가 당신은 대체 사용할 수
flux(a,b)
쉼표 주위에 두 그룹을 교환하는 대체 정규식을 수행 여기에 첫 번째 F에 커서로 시작하는 한 가지 방법 당신의 주어진 입력의
:%s/ #global replace
flux( #find 'flux('
\([^,]*\), #match everything until a comma into group 1
\([^)]*\)) #match everything until a ')' into group 2
/ #replace with:
flux( #text 'flux('
\2,\1 #group 2, followed by group 1
)/ #close parenthesis and end match
한 줄에 하나 이상의 자속 호출이있는 경우 끝에 g
을 추가하십시오. 명령 모드에서
flux(b,a)
에 변환 할 :
:%s/\([0-9]\),i/i,\1/g
이것은 < 자리의 모든 모양을 설정합니다>를, 나는에 난, < 자리> .
거의 작동합니다. 하지만 나는이 시나리오를 가지고있다. 'flux (m, i + 1)'~'flux (i + 1, m)' – arunmoezhi
Tim의 대답은 똑같은 아이디어에 바탕을두고보다 견고한 대체 방법이다. – Joni
예, 가능합니다.
:%s/flux(\([^,]*\),\([^)]*\))/flux(\2,\1)/
세분화 :
f1<c-q>4jxlphh<c-q>4jxp
: 이것은 대체 할 m4
을 통해 현재 버퍼를 실행합니다
:%! m4 -Dflux='`flux($2,$1)'"'"
. 은 개행 문자를 포함하거나 중첩 된 괄호를 포함하거나 반복적 인 입력을 올바르게 대체합니다. 중첩 된 괄호가 일치하지 않는 경우 예를 들어,
flux(text that contains parens
and (spans) a newline,flux(q, r))
이
flux(flux(r ,q) ,text that contains parens
and (spans) a newline)
로 대체됩니다, 오류가 발생합니다. 또한 플럭스에 대한 인수에 대한 선행 공백은 무시되지만 이것은 정규식 매칭으로 시도 할 수있는 모든 것의 훨씬 강력한 솔루션입니다.
내가 무엇을 할 수 있습니까? 내 vim에서 이것을 실행 해 보았는데 "Shell이 1, 5 줄을 걸러 냈습니다."라고 말하면 내 문서의 모든 텍스트를 'Unmatched (backtick)'으로 바꿉니다. – Tim
가능한 경우 기본 제공 VI 명령을 사용해야합니다. – Bernhard
이것은'm4'를 통해 버퍼 내용을 실행하고 버퍼의 내용을 출력으로 바꿉니다. 'Unmatched (backtick)'은 쉘에서 오는 오류 메시지입니다. 백 쿼트 앞에 백 슬래시를 포함하지 않았을 수도 있습니다. 다른 인용 스타일을 사용해보십시오 :': $!m4 -Dflux = ''flux ($ 2, $ 1) '' '''('flux' 이전의 작은 따옴표는 역 인용 부호 여야하지만, SO 주석에서 어떻게 빠져 나갈 수 있는지 모르겠습니다.) –
와우 !! 그것은 보석처럼 작동합니다. 나는 VI가이 강력한 것임을 알지 못합니다 – arunmoezhi
4D 배열을 가지고 첫 번째 및 마지막 차원을 전환하려면 4 개의 그룹으로 나누고 '\ 4, \ 2, \ 3, \ 1' ? – arunmoezhi
@arunmoezhi - 작동해야합니다. 또한 2와 3을 분리하지 않을 때 하나의 그룹에 넣을 수 있습니다. 그럼 당신은 3 개의 그룹 밖에 가지지 않을 겁니다. 그리고 당신은 1과 3을 바꿀 것입니다. – Tim