# 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