[vim] Vim : 여러 줄에 같은 문자를 삽입

때로는 여러 줄에 걸쳐 특정 시각적 텍스트 블록을 편집하고 싶습니다.

예를 들어 다음과 같은 텍스트를 사용합니다.

name
comment
phone
email

그리고 이렇게 보이게

vendor_name
vendor_comment
vendor_phone
vendor_email

현재 내가 지금 할 방식은 …

  1. 를 누른 V다음 j4 번 을 눌러 블록의 4 행을 모두 선택하십시오 .
  2. 와 들여 쓰기 >.
  3. 로 한 글자 뒤로 이동합니다 h.
  4. 로 시각 모드 차단으로 이동합니다 Ctrlv.
  5. j4 번 눌러 4 행을 선택하십시오 . 이 시점에서 공백의 4×1 시각적 블록 (4 행 1 열)을 선택했습니다.
  6. 를 누릅니다 C. 이것은 하나의 열만큼 왼쪽으로 들여 쓰기되어 있습니다.
  7. " vendor_"따옴표없이 입력 하십시오. 추가 공간을 다시 확보해야합니다.
  8. 를 누릅니다 Esc. 이것은 Esc삽입 모드를 종료 하는 데 사용 하는 횟수 중 하나입니다 . Ctrlc첫 번째 줄만 편집합니다.
  9. 1 단계를 반복하십시오.
  10. 로 다른 방법으로 들여 쓰기하십시오 <.

단어 앞에 공백이 하나 이상 있으면 들여 쓰기 할 필요가 없습니다. 를 사용하여 시각적 블록을 지우지 않아도 공백이 필요하지 않습니다 c.

그러나 분명히해야한다면 들여 쓰기로 필요한 공백을 만들지 않고 위에서 수행 한 작업을 수행 할 수 있습니까?

또한 이유와 삽입 모드 밖으로 종료에 의해서만 작업을 한 번에 여러 줄을 편집 않는 Esc이상 Ctrlc?


보다 복잡한 예는 다음과 같습니다.

name    = models.CharField( max_length = 135 )
comment = models.TextField( blank = True )
phone   = models.CharField( max_length = 135, blank = True )
email   = models.EmailField( blank = True )

name    = models.whatever.CharField( max_length = 135 )
comment = models.whatever.TextField( blank = True )
phone   = models.whatever.CharField( max_length = 135, blank = True )
email   = models.whatever.EmailField( blank = True )

이 예에서는에 대해 수직 비주얼 블록을 수행 .한 다음 삽입 모드 (예 : type) 동안 다시 삽입합니다 .whatever.. 바라건대 이제이 방법의 단점을 볼 수 있습니다. 수직 위치에서 모두 동일한 텍스트 열만 선택하는 것으로 제한됩니다 .



답변

  1. 받는 커서를 이동 n에서 name.
  2. 비주얼 블록 모드 ( Ctrlv)로 들어갑니다.
  3. j세 번 누릅니다 (또는 3j).
  4. I(자본 i)를 누릅니다 .
  5. 을 입력하십시오 vendor_. 참고 :를 누를 때까지 (6.) 모든 줄이 업데이트 될 때까지 첫 번째 줄 의 화면 만 업데이트 Esc됩니다.
  6. 를 누릅니다 Esc.

방법을 시연하는 미니 스크린 캐스트

소문자 는 텍스트 객체 의 시작으로 해석 되기 때문에 I소문자 대신 대문자를 사용해야합니다 . 예를 들어 태그 블록 ( ) 내부에서 선택하는 경우 자체적으로 유용합니다 .iiit

'it'텍스트 객체의 유용성을 보여주는 미니 스크린 캐스트


답변

또 다른 방법은 .( dot) 명령을와 함께 사용하는 것입니다 I.

  1. 시작하려는 위치로 커서를 이동하십시오
  2. 프레스 I
  3. (예를 들어, 당신이 원하는 접두사에 입력 vendor_)
  4. 를 누릅니다 esc.
  5. 누르면 j줄을 아래로 이동
  6. .접두사를 자동으로 다시 삽입하여 마지막 편집을 반복하려면 입력 하십시오.
  7. j와 사이를 빠르게 교체.

이 기술은 종종 적은 수의 추가에 대해 시각적 블록 모드보다 빠르며 범위 내의 모든 한 줄에 텍스트를 삽입 할 필요가 없으면 여분 j의 키 를 눌러 쉽게 건너 뛸 수 있다는 이점이 있습니다. .

많은 수의 연속 된 추가의 경우 블록 접근 또는 매크로가 우수 할 수 있습니다.


답변

  1. 을 사용하여 수정하려는 줄을 선택하십시오 CtrlV.
  2. 프레스:

    • I: 선택한 항목 앞에 삽입합니다.
    • A: 선택한 후 추가합니다.
    • c: 선택한 내용을 바꿉니다.
  3. 새 텍스트를 입력하십시오.

  4. Esc선택한 모든 줄에 변경 사항을 적용하려면 누릅니다 .

답변

매크로를 사용하여 내 작업을 기록한 다음 반복합니다.

  1. name 의 첫 글자에 커서를 놓습니다 .
  2. qqq 버퍼에 기록을 시작하려면 누르십시오 .
  3. 히트는 i삽입 모드를 입력로 이동합니다 vector_ 다음 공격 Esc모드 삽입 떠날.
  4. 이제 0라인의 시작 부분으로 돌아갑니다.
  5. 이제 j내려갑니다.
  6. 이제 q다시 기록을 중지하십시오.

이제 멋진 매크로가 생겼습니다.

3@q나머지 행을 수행하려면 매크로를 세 번 실행하도록 입력 하십시오.


답변

:%s/^/vendor_/

아니면 뭔가 빠졌습니까?


답변

2016 년 1 월 업데이트

허용되는 답변이 훌륭한 솔루션이지만 실제로는 키 입력이 약간 적으며 허용되는 답변에 따라 원칙적으로 더 잘 확장됩니다.

  1. 받는 커서를 이동 n에서 name.
  2. 비주얼 블록 모드 ( ctrlv)로 들어갑니다.
  3. 프레스 3j
  4. 를 누릅니다 I.
  5. 을 입력하십시오 vendor_.
  6. 를 누릅니다 esc.

시각적 인 그림

제공된 답변보다 키 입력 횟수가 적습니다 (3 단계 비교). 수행 할 j 작업 수만 계산합니다.

라인 번호가 활성화되어 있고 (위 그림 참조) 이동하려는 라인 번호를 알고 있다면 3 단계를 #으로 변경할 수 있습니다. G여기서 #은 원하는 라인 번호입니다.

위의 예에서 이것은입니다 4G. 그러나 몇 줄 번호를 처리 할 때 명시 적 카운트가 잘 작동합니다.


답변

vi (나노가 아님) 만있는 서버의 일부 구성 파일에서 많은 줄 을 주석 처리하고 싶었 으므로 시각적 방법도 번거로 웠습니다.

  1. 파일 열기 vi file
  2. 줄 번호 표시 :set number!또는:set number
  3. 그런 다음 줄 번호를 사용하여 줄 시작을 “#”으로 바꾸십시오. 어떻게?

:35,77s/^/#/

참고 : 숫자는 포함되며 35 ~ 77 행이며 둘 다 수정됩니다.

주석 처리를 제거하거나 취소하려면 간단히 :35,77s/^#//

모든 코드 줄 뒤에 텍스트 단어를 주석으로 추가하려면 다음을 사용할 수도 있습니다.

:35,77s/$/#test/ (Python과 같은 언어의 경우)

:35,77s/;$/;\/\/test/ (Java와 같은 언어의 경우)

크레딧 / 참조 :

  1. /unix/84929/ 주석 해제-다중-라인-코드-지정-바이-라인-숫자 -using-vi-or-vim

  2. /unix/120615/how-to-comment-multiple-lines-at-once