[리눅스] 알면 편집이 쉬워지는 vi 편집기 명령어 정리
1. 커서 이동
$ : 커서를 줄 맨끝으로 이동합니다.
0 : 숫자 0을 누르면 그 줄의 맨 앞으로 커서가 이동합니다. 빈칸을 포함하여 맨 앞으로 이동합니다.
^ : 0과 같이 줄 맨 앞에 커서를 위치하지만 글자앞으로 이동합니다.
ex)
reakwon.tistory.com
ㄴ 0을 누를때 커서 ㄴ^를 누를때 커서
+ : 커서를 다음줄의 첫 글자로 이동합니다.
- : 커서를 이전 줄의 첫 글자로 이동합니다.
gg : 커서를 문서의 맨 처음 줄로 위치합니다.
G : 커서를 문서의 맨 마지막 줄으로 위치합니다.
w : 다음 단어의 첫 글자로 이동시킵니다. 특수문자 발견시 멈춥니다.
W : 다음 단어의 첫 글자로 이동시킵니다. 단어를 공백으로 구분합니다. 따라서 공백 이후를 다음 단어로 취급합니다.
b : 단어의 첫글자로 이동시킵니다. 특수문자 발견시 멈춥니다.
B : 단어의 첫글자로 이동시킵니다. 단어의 구분을 공백을 기준으로 합니다.
% : 짝이 되는 괄호의 위치까지 이동합니다. 만약 여는 괄호 '('에서 %을 누르면 짝맞는 ')'까지 커서가 이동합니다. 만약 선택이 된 상태에서 %를 누르면 그 괄호내용 모두를 선택할 수 있습니다. 이 기능을 폴딩할때 이용이 될 겁니다.
2. 입력
명령에서 대문자 명령을 소문자 명령의 반대의 기능을 하게 됩니다.
a : 현재 커서의 다음에 글자를 입력할 수 있습니다.
A : 현재 줄의 맨 끝에 글자를 입력할 수 있습니다.
i : 현재 커서에서 글자를 입력할 수 있습니다.
I : 현재 줄의 맨 앞에 글자를 입력할 수 있습니다.
o : 커서의 아랫줄에 입력할 수 있습니다.
O : 커서의 윗줄에 입력할 수 있습니다.
3. 화면 이동
Ctrl + f : 한 화면 다음(아래)으로 이동합니다. 보다 빠른 이동을 할때 좋습니다.
Ctrl + b : 한 화면 이전(위)으로 이동합니다.
4. 선택
v : 기본적으로 v를 누르고 방향키로 텍스트를 선택합니다.
4. 삭제, 되돌리기
d : 선택 영역을 삭제합니다. 이떄 선택은 위에 등장한 v로 선택합니다.
dw : 현재 커서부터 다음 단어(공백 포함, 특수문자 제외)까지 모두 지웁니다. 이것을 응용하면 bdw가 왜 한 단어를 삭제하는지 알 수 있습니다.
bdw : 현재 단어 삭제 (b - 단어 앞으로 이동, dw : 다음 단어까지 삭제)
dd : 한줄 전체를 삭제합니다.
ndd : n개의 줄을 한번에 삭제시킵니다.
u : 만약 잘못 삭제시켰다면 u를 눌러서 되돌릴 수 있습니다. 삭제 뿐만 아니라 모든 명령에서 실수했다 싶으면 u로 되돌리시면 됩니다.
5. 복사 & 붙여넣기
y : 선택한 영역을 복사합니다. 선택은 v로 선택할 수 있습니다.
yw : 현재부터 한 단어의 끝까지 복사할 수 있습니다.
byw : 현재 커서가 위치한 이 단어를 복사합니다.
yy : 한줄 복사를 할 수 있습니다.
nyy : n줄 복사
p : 현재 커서 아랫줄에 복사한 텍스트 붙여넣기
6. 단어 찾기
/찾을단어
n : 다음 단어 찾기
N : 이전 단어 찾기
이 방법은 아주 단순하긴한데 정확히 그 문자와 일치하는 단어만 검색합니다. 즉, 대소문자를 구분해서 검색하는 방법입니다. 대소문자 구분없이 검색하기를 원한다면 끝에 \c를 붙여주면 됩니다. 이렇게요
/찾을단어\c
이때는 대소문자 구분없이 찾을 수 있습니다.
7. : 기본 명령어 - ESC를 누르고 ':'를 누른 상태
: set nu - 줄 표시를 합니다. 코드에서 라인을 확인하고 싶다면 아래의 명령으로 볼 수 있습니다. 혹은 set number를 full로 쳐주어도 됩니다.
: set nonu - 줄 표시를 해제합니다. 더 이상 라인을 보고싶지 않으면 이 명령으로 해제할 수 있습니다.
: 숫자 - 한번에 라인을 이동하고 싶으면 숫자를 치고 이동할 수 있습니다.
: w - 지금 수정된 사항을 write한다는 것으로 저장을 의미합니다. 하지만 vi 프로그램을 닫지는 않습니다.
: wq - 수정된 사항을 저장하고 나가겠다(quit)는 명령입니다. vi 프로그램을 저장함과 동시에 닫는 명령입니다.
: q! - 어떨때는 vi 편집기가 수정했는데 저장하지 않는다는 이유로 놓아주지 않는 경우가 있는데 이떄 저장하기 싫다면 q!를 사용하면 됩니다.
: set ts=n - 탭의 간격을 조절하는 명령어로 n은 숫자입니다. 예를 들어 set ts=4인 명령을 내린다면 탭의 간격은 공백 4개와 같은 간격을 갖습니다.
창분할 - 2가지가 존재합니다.
: sp - 현재 창을 평행 분할합니다. 다음 창은 Ctrl+w,w (Ctrl 누른 상태에서 w를 두번 누름)로 이동할 수 있습니다.
: sp [filename] : 파일 이름을 지정해주면 그 파일이 열립니다.
: vs - 현재 창을 수직 분할 합니다. 마찬 가지로 다음 창은 Ctrl+w,w로 이동할 수 있습니다.
: vs [filename] : 마찬가지로 파일 이름을 지정해서 현재 파일이 아닌 다른 파일을 열 수 있습니다.
8. 단어 변경
:s/현재단어/바꿀단어
현재 단어와 일치하는 하나의 단어만을 변경합니다.
만약 문서 전체의 단어를 변경하고 싶으시면 앞에 %를 붙여주면 됩니다.
:%s/현재단어/바꿀단어
:%s/현재단어/바꿀단어/g
전체 문서에서 현재단어를 바꿉니다.
:시작 줄 번호, 끝 줄 번호s/현재단어/바꿀단어
혹은 줄번호를 주어 제약을 걸어서 시작 줄, 끝 줄에 있는 단어를 바꿀 수도 있습니다.
:%s/현재단어/바꿀단어/i
현재 단어의 대소문자를 무시하고 일치하면 단어를 치환합니다. i는 ignore를 의미하지요.
간혹가다가 위도우즈의 파일을 리눅스로 가져오면 ^M문자가 섞여 들어올때가 있습니다. 이때 ^M문자를 없애려면 아래와 같은 명령을 통해 깔끔하게 없앨 수 있습니다.
%s/^M$//g
9. 탭 추가
: tabnew [filename] - 현재 vi 창에 새로운 tab을 생성합니다. 기존의 파일을 열 수도 있고 아니면 새로운 파일을 열어서 편집할 수도 있습니다. 예를 들어 list.txt이라는 파일을 탭으로 생성하려면 아래의 명령을 통해서 가능합니다.
원래 열었던 파일(test)과 새로운 파일인 list.txt가 같이 열려있다는 것을 알 수 있고, 편집도 가능한 것을 알 수 있습니다.
gt : 다음 탭으로 이동합니다. 위의 경우에는 다음 탭이 없으므로 test 탭으로 이동합니다.
gT : 이전 탭으로 이동합니다. 위의 경우에서 이전 탭은 test이므로 test 탭으로 이동하지요.
탭 안에서 편집은 이제 vi 편집기의 명령어를 가지고 똑같이 편집하고 저장할 수가 있습니다.
10. 코딩에 도움이 되는 몇가지 명령어
헤더파일 열어 확인하기
헤더파일에 ctrl+wf를 누르면 헤더파일의 내용을 창분할로 볼 수 있습니다. 아래와 같이 stdio.h의 내용을 보고 싶으면 커서를 헤더파일 이름에 위치시키고 ctrl 키와 w,f 를 차례대로 누르면 됩니다.
폴딩하기
코드가 너무 길어 보기좋게 내용을 접고싶다면 폴딩기능을 사용할 수 있습니다. 아래처럼 v로 함수 모두를 선택해봅시다. v를 누르고 화살표로 선택할 수 있지만 함수가 긴 경우에는 다음과 같이 한번에 선택할 수 있습니다.
우선 함수 가장 앞에 'v'를 눌러 선택 모드로 지정하시구요. '$'를 눌러 가장 맨 끝 줄로 이동합니다. 가장 맨 끝 줄에는 함수를 여는 중괄호가 있습니다. 이때 '%'를 누르면 함수 전체를 선택하게 됩니다.
zf : 폴딩하려면 함수가 모두 선택된 상황에서 zf를 누르면 됩니다.
zi : 폴딩된 상태에서 함수를 보고 싶어서 피거나, 아니면 핀것을 다시 접으려면 zi를 입력하면 됩니다. 이 명령어는 토글방식으로 접었다 폈다할 수 있습니다.
한번에 들여쓰기하기
여러분이 코드를 복사하다가 보면 어쩌다가 들여쓰기가 안된 상태로 복사가 될 때도 있습니다. 이때 노가다로 탭을 눌러서 늘리면 시간이 꽤나 걸리겠죠. 이때 한번에 들여쓰기하는 방법이 "gg=G"입니다.
커서가 어디에 있건 상관없습니다. gg는 문서의 맨앞을 의미, G는 문서의 끝을 의미합니다. =은 tab의 간격으로 들여쓰기 하라는 명령이죠. 즉, 문서의 처음부터 끝까지 들여쓰기하는 명령어입니다.
자동 완성
다른 IDE를 사용할때 자동완성 기능이 있죠? "vi 편집기는 왜 그런게 없는거야" 라고 하시지 마시고 구글에서 그런 기능을 하는 명령어가 무엇인지 찾아보세요. 답은 ctrl + p , ctrl + n입니다. 둘 다 자동완성 기능을 하지만 어느쪽으로 펼쳐지느냐만 다를 뿐입니다. 문자를 쓰는 편집 모드에서 ctrl + p, ctrl + n을 사용해야합니다. esc 누르고 사용하는게 아닙니다.