Programing

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

lottogame 2020. 3. 27. 07:58
반응형

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 행을 선택하십시오 . 이 시점에서 공백의 4x1 시각적 블록 (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.

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

소문자 텍스트 객체 의 시작으로 해석 되므로 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. 이름의 첫 글자에 커서를 놓습니다.
  2. 버퍼에 qq기록을 시작하려면 누르십시오 q.
  3. 히트 i삽입 모드 및 유형에 가고 vector_, 다음 공격 ESC모드 삽입 떠날.
  4. 이제 0라인의 시작 부분으로 돌아갑니다.
  5. 이제 j내려갑니다.
  6. 이제 q다시 기록을 중지하십시오.

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

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


:%s/^/vendor_/

아니면 뭔가 빠졌습니까?


2016 년 1 월 업데이트

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

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

시각적 인 그림

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

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

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


텍스트 블록을 삭제하고 바꾸려는 사용 사례가있을 수도 있습니다.

이렇게

Hello World

Hello World

Hello Cool

Hello Cool

두 줄 모두에서 "월드"를 시각적으로 선택하면됩니다.

변경을 위해 c를 입력하십시오-이제 삽입 모드에있게됩니다.

원하는 것을 넣고 탈출하십시오.

둘 다 세로로 반영됩니다. 블록을 삽입하는 대신 새 텍스트로 대체한다는 점을 제외하면 'I'와 동일하게 작동합니다.


이 파일이 있다고 가정하십시오.

something

name
comment
phone
email

somethine else
and more ...

"name", "comment", "phone"및 "email"앞에 "vendor_"를 파일의 위치에 상관없이 추가하려고합니다 .

:%s/\<\(name\|comment\|phone\|email\)\>/vendor_\1/gc

c플래그는 확인을 묻는 메시지가 표시됩니다. 프롬프트를 원하지 않으면 삭제할 수 있습니다.


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. https://unix.stackexchange.com/questions/84929/ 주석 해제-다중-라인-코드-지정-바이-라인-숫자 -using-vi-or-vim

  2. https://unix.stackexchange.com/questions/120615/how-to-comment-multiple-lines-at-once


이것은 오래된 질문이지만 더 유연한 대안을 제공하고 싶습니다.

예 : 줄의 시작 부분에 텍스트 XYZ를 입력하려면

:%norm IXYZ

여기서 무슨 일이야?

  • % == 모든 라인에서 실행
  • norm == 일반 모드에서 다음 키를 실행
  • I == 줄의 시작 부분에 삽입
  • XYZ == 입력하려는 텍스트

그런 다음 Enter 키를 누르면 실행됩니다.

귀하의 요청에 따라 :

:%norm Ivendor_

특정 범위를 선택할 수도 있습니다.

:2,4norm Ivendor_

또는 선택한 가시 범위에서 실행하십시오.

:'<,'>norm Ivendor_


Use Ctrl+V to enter visual block mode
Move Up/Down to select the columns of text in the lines you want to comment.
Then hit Shift+i and type the text you want to insert.
Then hit Esc, wait 1 second and the inserted text will appear on every line

1. ctrl + v to go to visual block 
2. select the lines using up and down arrow 
3. enter small 3i ( presess SMALL I three times)
4. I (Press capital I, That will take you into insert mode)
4. Write the text you want to add
5. esc 
6. press down arrow

참고 URL : https://stackoverflow.com/questions/9549729/vim-insert-the-same-characters-across-multiple-lines

반응형