[vim] Vim에서 줄 중간에 텍스트를 여러 줄에 삽입하려면 어떻게해야합니까?

10 줄이 있는데 그 줄에 나오는 단어 앞에 텍스트를 추가하고 싶다고 가정 해 보겠습니다. 줄의 시작 부분에있을 필요는 없습니다.

에서:

sdfsd   foo sdfsd
sfsd    foo fsdf
sdfsdf  foo  sdfsdf

에:

sdfsd   bar(foo sdfsd
sfsd    bar(foo fsdf
sdfsdf  bar(foo  sdfsdf

그것은뿐만 아니라 앞에 추가 할 수도 bar(실제로 서라운드 만 foobar(foo)?

또한 //여러 줄에 주석을 추가하는 빠른 방법 (C 스타일 주석)을 원합니다 .

저는 Vim / GVim 7.2를 사용합니다.



답변

첫 번째로 이동하여 – 를 foo눌러 시각적 차단 모드로 전환하고가있는 모든 줄 이 표시 될 때까지 아래로 누릅니다 . 그런 다음 – 를 눌러 블록의 시작 부분에 삽입합니다. 완료하고를 누르면 삽입 된 문자가 표시된 블록 왼쪽의 각 줄에 추가됩니다.CtrlvfooShiftiEsc

또, 마지막에 눌러 삽입하려면 Ctrlv영향을받는 모든 라인을 표시하고 다음을 눌러 아래로 / 위로 이동 End또는 $라인이 끝날 때까지 선택 영역을 확장 할 수 있습니다. 지금 당신은 누를 수 Shifta처럼 이전에, 모든 라인의 끝에 추가 할 Shifti.

시각적 선택은 일반 이동 명령으로도 수행 할 수 있습니다. 그래서 당신은 여는 중괄호와 종류에 움직일 수 C의 전체 블록을 언급하는 Ctrlv % Shifti // Esc.


답변

첫 번째 질문에 답하려면 아래

:%s/foo/bar(&)/g

를 찾아서 foo일치하는 패턴을 bar(). 이 /g작업을 한 줄에 여러 번 수행합니다.

당신은 단지 매칭이기 때문에 foo, 당신은 간단한 :s/foo/bar(foo)/g. 그러나 위의 방법은 단순한 단어 (예 :)가 아닌 정규 표현식에서 일치 시키기로 결정한 경우 작동 f[a-z][a-z]합니다. 위의 ‘&’는 일치하는 항목을 나타냅니다.


답변

선 집합을 접두사로 지정하려면 두 가지 다른 접근 방식 중 하나를 사용합니다.

한 가지 접근 방식은 블록 선택 (sth에서 언급)입니다. 일반적으로 ctrl-V커서 이동 이 뒤 따르는 직사각형 영역을 선택할 수 있습니다 . 사각형을 강조 표시 한 후을 누르면 사각형 shift-I의 왼쪽에 문자가 삽입되거나 사각형 shift-A의 오른쪽에 추가됩니다. 따라서이 기술을 사용하여 접두사 shift-I를 입력하고를 누르고 접두사를 입력 한 다음 이스케이프 를 누를 줄의 가장 왼쪽 열을 포함하는 사각형을 만들 수 있습니다 .

다른 방법은 (Brian Agnew가 언급 한대로) 대체를 사용하는 것입니다. Brian의 대체는 전체 파일에 영향을줍니다 (명령에서 %는 “모든 행”을 의미 함). 몇 줄에만 영향을 미치려면 가장 쉬운 방법은 shift-V첫 번째 / 마지막 줄에있는 동안 (시각적 라인 모드를 활성화 하는) 치고 마지막 / 첫 번째 줄로 이동하는 것입니다. 그런 다음 다음을 입력하십시오.

:s/^/YOUR PREFIX/

^는 정규식 (이 경우 줄의 시작)입니다. 시각적 선 모드에서 입력하면 s 앞에 자동으로 ‘<,’>가 삽입 된 것을 볼 수 있습니다. 이것은 대체 범위가 시각적 선택이됨을 의미합니다.

추가 팁 : 접두사에 슬래시가 포함 된 경우 백 슬래시로 이스케이프하거나 다른 구두점 문자를 명령의 구분 기호로 사용할 수 있습니다. 예를 들어 C ++ 줄 주석을 추가하려면 일반적으로 다음과 같이 작성합니다.

:s:^:// :

접미사를 추가하는 경우 모든 행이 정확히 같은 길이가 아니면 대체 방법이 일반적으로 더 쉽습니다. ^ 대신 패턴에 $를 사용하면 문자열이 앞에 추가되는 대신 추가됩니다.

접두사와 접미사를 동시에 추가하려면 다음과 같이 할 수 있습니다.

:s/.*/PREFIX & SUFFIX/

. *는 전체 행과 일치합니다. 대체의 &는 일치하는 텍스트 (전체 줄)를 다시 넣지 만 이제 접두사와 접미사가 추가됩니다.

BTW : 코드를 주석 처리 할 때 나중에 주석을 제거하고 싶을 것입니다. 시각적 블록 ( ctrl-V)을 사용하여 슬래시를 선택한 다음 d를 눌러 삭제하거나 대체 (아마도로 만든 시각적 선 선택 shift-V)를 사용하여 다음과 같이 선행 슬래시를 제거 할 수 있습니다.

:s:// ::


답변

: 정상 구조!

:%norm Wibar(

:%norm WEa)

: norm (al)은 명령을 입력 한 것처럼 재생합니다.

W-다음 단어로 이동

i-삽입 모드 시작

bar (- ‘bar (‘시퀀스 유형

또는 한 줄로 :

:%norm Wibar(ctrlvESCEa)

Windows를 실행하는 경우 ctrlq대신 ctrlv.


답변

또 다른 가능성 (아마 테스트 케이스에서는 그다지 유용하지 않지만 다른 상황에서는 유용함)은 마크로 변경하려는 영역을 차단하는 것입니다.

  • 맨 윗줄의 아무 곳에 나 커서를 놓고 'a
  • 마지막 줄의 아무 곳에 나 커서를 놓고 'b
  • 명령 실행 :'a,'b s/foo/bar(&)/

나는 일반적으로 모든 것이 화면에 표시되는 경우 시각적 차단 모드를 좋아하고 시작과 중지가 여러 화면으로 구분되는 경우 일반적으로 표시를 선호합니다.


답변

또 다른 간단한 정규식은 다음과 같습니다.

%s/^/<text you want to prepend>/


답변

C 스타일 주석의 경우 Brian의 regexp 답변을 사용하고 줄 끝 $에서 일치 하고 삽입하십시오.