# vi 단축키
<커서이동>
gg : 문서의 가장 처음 줄로 이동
G : 문서의 마지막 줄로 이동
[n]G : 문서의 [n]번째 줄로 이동
<삭제>
dw : 한 단어를 삭제
dd : 커서가 있는 줄을 삭제
[n]dd :현재 줄부터 [n]개줄의 삭제
:1,.d : 첫번째 줄부터 현재줄까지 삭제
:.,$d : 현재줄부터 마지막줄까지 삭제
g/~/d : ~가 포함된 줄 모두 삭제
v/~/d : ~가 없는 줄 모두 삭제
<복사>
yw : 커서 위치부터 단어의 끝까지 복사
yy : 커서가 있는 줄을 복사
[n]dd : 현재 줄부터 [n]개줄의 복사
:1,.d : 첫번째 줄부터 현재줄까지 복사
:.,$d : 현재줄부터 마지막줄까지 복사
<붙여넣기>
p : 커서의 다음 위치에 붙여넣기
P : 커서가 있는 위치에 붙여넣기
<검색>
/[문자열] : 검색할 문자열 입력
shift + 5 : 짝 괄호 찾기
shift + 8 : 검색할 문자열 찾기
<교체>
- 옵션 :
· g : global 한 줄에 패턴이 여러 번 나오면 모두 바꾼다. 지정하지 않으면 첫번째 패턴만 치환
· i : ignore case 대소문자 구분을 하지 않는다.
· c : confirm 검색된 모든 문자열에 대해서 바꿀지 말지를 물어본다.
:s/old/new : 현재 줄의 처음 old를 new로 교체
:s/old/new/g : 현재 줄의 모든 old를 new로 교체
:1,20s/old/new/g : 1부터 20번째 줄까지 모든 old를 new로 교체
:-2,+4s/old/new/g : 커서 2줄 위부터 4줄 아래까지 old를 new로 교체
:%s/old/new/g : 문서 전체에서 old를 new로 교체
:%s/old/new/gc : 문서 전체에서 old를 new로 확인하며 교체
:g/pattern/s/old/new/g : pattern이 있는 모든 줄의 old를 new로 교체
:g/pattern/s//new/g : %s/old/new/g과 동일
:5,10s/a/b/ : 5번째 줄부터 10번째 줄까지 각 줄의 첫번째 "a" 를 "b" 로 교체
:.,.+10s/a/b/g : 현재 줄부터 (현재 행번호+10)번째 줄까지 모든 "a" 를 "b" 로 교체
:1,$s/a/b/c : 첫번째 줄부터 마지막 줄까지 (즉 문서 전체) 각 줄의 "a" 를 "b" 로 교체, 사용자에게 확인을 받는다.
:%s/a/b/gi : 문서 전체에서 "a" 와 "A" 를 "b" 로 교체
:%s/Hello/Good Morning/g : 두 글자 이상의 문자열도 검색 및 치환이 가능하다.
:%s/[vV]i//g : vi 또는 Vi 를 null string 으로 치환한다. (삭제)
:%s/\(gnu\|Gnu\)/GNU/g : gnu 또는 Gnu 를 GNU 로 치환
# marking 사용법
하나 또는 여러 문서간의 이동이 잦으면 marking 기능을 사용할 수 있습니다.
marking을 사용하면 현재 위치를 기록하여 나중에 다시 돌아갈 수 있는데 marking이 설정된 위치에는 별다른 표시가 생기지 않습니다.
각 파일에는 소문자 (a-z)로 식별되는 marking을 표시할 수 있고,
특정 파일 내의 위치를 식별하는 대문자 (A-Z)로 식별되는 글로벌 마크 세트가 있습니다.
예를 들어, 10 개의 파일을 편집 할 수 있다면 각 파일은 마크 A를 가질 수 있지만, 하나의 파일만 마크 A를 가질 수 있습니다.
<Setting markings>
marking을 설정하려면 m 다음에 (a-z) 중 marking 할 문자를 입력합니다.
marking을 새롭게 설정하면 이전에 (a-z)로 식별된 현재 파일의 모든 표시는 제거되니 참고하시기 바랍니다.
<Using markings>
마크로 이동하려면 아포스트로피 ( ') 또는 백틱 (`) 다음에 문자를 입력합니다.
아포스트로피를 사용하면 마크가있는 줄의 시작 부분으로 이동하고 백틱은 마크의 줄과 열로 이동합니다.
소문자: (예 :`a)를 사용하면 해당 표시가 현재 버퍼에있는 경우에만 작동합니다.
대문자: (예 :`A)를 사용하면 파일과 마크가있는 위치로 점프합니다. (마크로 점프하기 전에 파일을 열 필요가 없습니다).
- Command:
ma : 현재 커서 위치에 마크 설정
'a : 마크 a의 줄로 이동 (줄의 공백이 아닌 첫 번째 문자)
`a : 마크 a의 위치 (라인 및 열)로 이동
d'a : 현재 줄에서 마크 a 줄까지 삭제
d`a : 현재 커서 위치에서 마크 a 위치까지 삭제
c'a : 현재 줄에서 마크의 줄로 텍스트 변경
y`a : 커서에서 마크 a의 위치까지 이름없는 버퍼로 텍스트를 잡아 당깁니다.
:marks : 모든 현재 마크 나열
:marks aB : 목록 표시 a, B
d' a와 같은 명령은 "linewise"로 작동하며 시작 및 끝 줄을 포함합니다.
d`a와 같은 명령은 "문자별로"작동하며 시작은 포함하지만 끝 문자는 포함하지 않습니다.
아래의 명령어로 소문자 표시 사이를 탐색 할 수 있습니다.
- Command:
]' : 소문자 표시가있는 다음 줄로 이동
[' : 소문자로 이전 줄로 이동
]` : 다음 소문자 표시로 이동
[` : 이전 소문자 표시로 이동
<Special markings>
Vim에는 자동으로 설정되는 특별한 표시가 있습니다.
- Command:
`. : 현재 버퍼에서 마지막 변경이 발생한 위치로 이동
`" : 마지막으로 현재 버퍼를 종료 한 위치로 이동
`0 : 편집 된 마지막 파일의 위치로 이동 (Vim 종료시)
`1 : `0과 같지만 이전 파일
'' : 뒤로 점프 (현재 버퍼에서 점프 한 줄로)
`` : 뒤로 점프 (현재 버퍼에서 점프 한 위치로)
`[ or `] : 이전에 변경되었거나 얀크 된 텍스트의 시작 / 끝으로 이동
`< or `> : 마지막 시각적 선택의 시작 / 끝으로 이동
<Deleting markings>
marking이 포함 된 라인을 삭제하면 marking도 삭제됩니다.
버퍼를 지우면 (명령어 : bw) 버퍼에 대한 모든 표시가 삭제됩니다.
delmarks 명령 (약칭 : delm)을 사용하여 지정된 표시를 삭제할 수 있습니다.
- Command:
:delmarks a : delete mark a
:delmarks a-d : delete marks a, b, c, d
:delmarks abxy : delete marks a, b, x, y
:delmarks aA : delete marks a, A
:delmarks! : delete all lowercase marks for the current buffer (a-z)
delmarks 명령을 사용하려면 Vim 7.0이 필요합니다. 라인이 삭제되면 마크가 자동으로 삭제됩니다.
추가로 marking과 교체식을 동시에 사용하여 아래와 같이 사용 가능합니다.
- Command:
:'a,.s/^/#/g : marking 지점부터 현재 줄까지 주석처리
:'a,. !coulmn -t : marking 지점부터 현재 줄까지 파이프 정렬
:'a.del : marking 지점부터 현재 줄까지 전부삭제
'Shell' 카테고리의 다른 글
Shell 특수문자 정리 (1) | 2020.04.02 |
---|---|
쉘 스크립트 기초 (0) | 2020.03.25 |
리눅스 쉘과 명령어 기초 (0) | 2020.03.23 |