2011-10-22 10 views
0

이것은 파일의 일부 텍스트 줄입니다. vi 편집기를 사용하여 특정 텍스트 블록을 제거해야합니다.Vi 편집기에서 여러 줄 바꾸기

오로라 (복수형 : 오로라 또는 오로라)는 고하 중 (북극 및 남극) 지역의 자연광 디스플레이로, 고하 중 분위기의 원자로 정력적 인 하전 입자가 충돌하여 발생합니다).

Most aurorae occur in a band known as the auroral zone[2][2] which is typically 3° to 6° in latitudinal extent and at all local times or longitudes. 

The auroral zone is typically 10° to 20° from the magnetic pole defined by the axis of the Earth's magnetic dipole. During a geomagnetic storm, the auroral zone will expand to lower latitudes. The diffuse aurora is a featureless glow in the sky which may not be visible to the naked eye even on a dark night and defines the extent of the auroral zone. 

나는 위와 같은 입력 파일이 있습니다. 이 파일에서 다음과 같은 텍스트 블록의 특정 항목을 제거해야합니다. 나는 끝에 중반와 경도에있는 대부분의, 오로라로 시작하는 라인을 삭제하고

:g/^Most/,/auroral/,/longitudes./d 

:

Most aurorae occur in a band known as the auroral zone[2][2] which is typically 3° to 6° in latitudinal extent and at all local times or longitudes. 

그래서, 난 작동하지 않는 다음 명령을 사용하고 있습니다.

+1

그것을 삭제할 수 있습니다. 중괄호 수의 균형을 맞추기를 원할 것이기 때문에 게시 된 코드를 사용하여 파일 전체에서 마지막 중괄호까지만 사용할 수 있습니다 (여러 줄로 실행한다고 가정). – OmnipotentEntity

+0

아니요, 구문을 뒤섞고 있습니다. A, Bd는 A 행에서 B 행까지 삭제합니다 (여기서 A와 B는 행 번호 또는 정규 표현식이 될 수 있음). A, B, Cd는 구문 오류가되어야합니다. /A.*B.*C/는 A와 일치하는 정규 표현식이고, B 다음에 C가오고 그 사이에있는 어떤 것도 같은 줄에 있습니다. – tripleee

답변

2

이 당신이 뭘 할 수 있는지에 대한 뚜렷한 한계가 있지만 맥락에서, 당신은 사용할 수 있습니다 다음 while가 가까운 중괄호까지 행의 시작입니다

:g/^while/.,/^}/d 

while 루프를 삭제하려면 줄의 시작 부분에.


당신이 몇 가지 더 추가시겠습니까?

:g/^while/ 부분은 while으로 시작하는 줄을 전체적으로 검색합니다. 다음은 일치하는 각 행에 대해 실행되는 ex 명령입니다. 명령은 .,/^}/d입니다. 즉, 현재 줄 (.)에서 다음 줄로 닫는 중괄호 (/^}/)로 시작하여 삭제 (d)를 실행합니다. 뒤로 검색 또는 상대 동작 (?^{? 또는 .-3 또는 .+10)과 같은 항목을 사용할 수도 있습니다.

당신이 염두에두고 정확히 주석의 난도질 모습에서 이야기하기가 어렵다 (아니 당신의 잘못을 -. 코멘트 유용한 서식을 보존하지 않음)

-------------- 
Stack Over Flow 
c**p 
c**p 
c**p 
cool 
c**p 
c**p 
c**p 
------------ 

내가에서 교체해야 [...] ------------에 흐름을 간단

스택, 그리고 나는 cool가에 영향이 표시되지 않습니다 :

이것은 원래의 대답과 동형입니다.

+0

좀 더 추가 할 수 있습니까? 내 상황이 이와 같습니다. ---------- -------------- 스택 오버 플로우 쓰레기 쓰레기 쓰레기 멋진 쓰레기 쓰레기 쓰레기 : 나는 블록 아래와 같이가 - 스택 오버 플로우에서 다음과 같이 대체해야합니다. ------------ 어떤 부분이 이렇게 차가워지면 어디로 가야합니까? 스택 오버플로 * cool. * ---- -------- –

1

검색 및 바꾸기 대신 블록 { ... }을 삭제하는 것이 더 쉽습니다.

당신은 (내부 또는 bracked openening에서) 블록으로 이동이 아마 당신이 정규 표현식을 사용하여이 작업을 수행 할 것입니다 무언가가 아니다 daB

+0

파일이 매우 커서 특정 블록이 파일의 여러 위치에서 발생하기 때문에 정규 표현식을 사용해야합니다. 나는 모든 사건에 갈 수는 없다. –

+0

코드에 불균형 대괄호가있을 수 있기 때문에 정규 표현식으로하기가 어렵습니다. 따라서 교체 후 엄격한 검사가 불가피합니다. –

관련 문제