Vim : 여러 줄에 같은 문자를 삽입
때로는 여러 줄에 걸쳐 특정 시각적 텍스트 블록을 편집하고 싶습니다.
예를 들어 다음과 같은 텍스트를 사용합니다.
name
comment
phone
email
그리고 이렇게 보이게
vendor_name
vendor_comment
vendor_phone
vendor_email
현재 내가 지금 할 방식은 ...
- 를 누른 V다음 j4 번 을 눌러 4 개의 행 행을 모두 선택하십시오 .
- 와 들여 쓰기 >.
- 로 한 글자 뒤로 이동합니다 h.
- 로 시각 모드 차단으로 이동합니다 ctrlv.
- j4 번 을 눌러 4 행을 선택하십시오 . 이 시점에서 공백의 4x1 시각적 블록 (4 행, 1 열)을 선택했습니다.
- 를 누릅니다 c. 이것은 하나의 열만큼 왼쪽으로 들여 쓰기되어 있습니다.
" vendor_"
따옴표없이 입력 하십시오. 추가 공간을 다시 확보해야합니다.- 를 누릅니다 esc. 이것은 esc삽입 모드를 종료 하는 데 사용 하는 횟수 중 하나입니다 . ctrlc첫 번째 줄만 편집합니다.
- 1 단계를 반복하십시오.
- 로 다른 방법으로 들여 쓰기하십시오 <.
단어 앞에 공백이 하나 이상 있으면 들여 쓰기 할 필요가 없습니다. 를 사용하여 시각적 블록을 지우지 않아도 공백이 필요하지 않습니다 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.
. 바라건대 이제이 방법의 단점을 볼 수 있습니다. 세로 위치에서 모두 동일한 텍스트 열만 선택하는 것으로 제한됩니다 .
- 받는 커서를 이동
n
에서name
. - 비주얼 블록 모드 ( ctrlv)로 들어갑니다.
- j세 번 누릅니다 (또는 3j).
I
(자본 i)를 누릅니다 .- 을 입력하십시오
vendor_
. - 를 누릅니다 esc.
소문자 는 텍스트 객체 의 시작으로 해석 되므로 I
소문자 대신 대문자를 사용해야합니다 . 예를 들어 태그 블록 내부 ( ) 를 선택하는 경우 자체적으로 유용합니다 .i
i
it
또 다른 방법은 .( dot
) 명령을와 함께 사용하는 것입니다 I.
- 시작하려는 위치로 커서를 이동
- 프레스 I
- (예를 들어, 당신이 원하는 접두사에 입력
vendor_
) - 를 누릅니다 esc.
- 누르면 j줄을 아래로 이동
- .접두사를 자동으로 다시 삽입하여 마지막 편집을 반복하려면 입력 하십시오.
- j와 사이를 빠르게 교체.
이 기술은 종종 적은 수의 추가에 대해 시각적 블록 모드보다 빠르며 범위 내의 모든 한 줄에 텍스트를 삽입 할 필요가 없으면 여분 j의 키 를 눌러 쉽게 건너 뛸 수 있다는 이점이 있습니다. .
많은 수의 연속 된 추가의 경우 블록 접근 또는 매크로가 우수 할 수 있습니다.
- 을 사용하여 수정하려는 줄을 선택하십시오 CtrlV.
프레스:
- I: 선택한 항목 앞에 삽입합니다.
- A: 선택한 후 추가합니다.
- C: 선택한 내용을 바꿉니다.
새 텍스트를 입력하십시오.
- Esc선택한 모든 줄에 변경 사항을 적용하려면 누릅니다 .
매크로를 사용하여 작업을 기록한 다음 반복합니다.
- 이름의 첫 글자에 커서를 놓습니다.
- 버퍼에
qq
기록을 시작하려면 누르십시오q
. - 히트
i
삽입 모드 및 유형에 가고vector_
, 다음 공격ESC
모드 삽입 떠날. - 이제
0
라인의 시작 부분으로 돌아갑니다. - 이제
j
내려갑니다. - 이제
q
다시 기록을 중지하십시오.
이제 멋진 매크로가 생겼습니다.
3@q
나머지 행을 수행하려면 매크로를 3 번 실행하려면 입력 하십시오.
:%s/^/vendor_/
아니면 뭔가 빠졌습니까?
2016 년 1 월 업데이트
허용되는 답변이 훌륭한 솔루션이지만 실제로는 키 입력이 약간 적으며 허용되는 답변에 따라 원칙적으로 더 잘 확장됩니다.
- 받는 커서를 이동
n
에서name
. - 비주얼 블록 모드 ( ctrlv)로 들어갑니다.
- 프레스 3j
- 를 누릅니다
I
. - 을 입력하십시오
vendor_
. - 를 누릅니다 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 (나노가 아님) 만있는 서버의 일부 구성 파일에서 많은 줄 을 주석 처리하고 싶었 으므로 시각적 방법도 번거로 웠습니다.
- 파일 열기
vi file
- 줄 번호 표시
:set number!
또는:set number
- 그런 다음 줄 번호를 사용하여 줄 시작을 "#"으로 바꾸십시오. 어떻게?
:35,77s/^/#/
참고 : 숫자는 포함되며 35 ~ 77 행이며 둘 다 수정됩니다.
주석 처리를 제거하거나 취소하려면 간단히 :35,77s/^#//
모든 코드 줄 뒤에 텍스트 단어를 주석으로 추가하려면 다음을 사용할 수도 있습니다.
:35,77s/$/#test/
(Python과 같은 언어의 경우)
:35,77s/;$/;\/\/test/
(Java와 같은 언어의 경우)
크레딧 / 참조 :
https://unix.stackexchange.com/questions/84929/ 주석 해제-다중-라인-코드-지정-바이-라인-숫자 -using-vi-or-vim
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
'Programing' 카테고리의 다른 글
MySql 서버 시작 오류 'PID 파일을 업데이트하지 않고 서버가 종료되었습니다' (0) | 2020.03.27 |
---|---|
문자열을 Date 및 DateTime으로 변환 (0) | 2020.03.27 |
서로 다른 크기의 사각형을 가능한 가장 작은 사각형으로 압축하는 데 어떤 알고리즘을 사용할 수 있습니까? (0) | 2020.03.27 |
Visual Studio Community는 30 일 평가판입니까? (0) | 2020.03.27 |
장고 차 필드 vs 텍스트 필드 (0) | 2020.03.27 |