vi (or vim) 사용법 정리
이동관련
기본이동 (Normal mode에서) ***
h
: 왼쪽으로 한 글자 이동.
j
: 한 행 아래로.
k
: 한 행 위로.
l
: 오른쪽으로 한 글자 이동.
화면 내 이동
H
: 현재 화면에서 가장 위의 행으로
M
: 현재 화면에서 가장 중간의 행으로
L
: 현재 화면에서 가장 아래 행으로
n
+ H
: 화면의 맨 위에서부터 n번째 행으로
n
+ L
: 화면의 맨 아래에서부터 n번째 행으로
단어 단위 이동
b
: 현재 커서가 속한 단어의 맨 앞 글자로. ***
e
: 현재 커서가 속한 단어의 맨 뒤 글자로.
w
: 현재 커서가 속한 단어 앞의 단어의 맨 앞 글자로. ***
문장 단위 이동
(
: 이전 문장의 앞으로
)
: 다음 문장의 앞으로
line 내 이동
$
: 현재 line에서 공백이 아닌 마지막 글자로 이동
^
: 현재 line에서 공백이 아닌 첫번째 글자로 이동
0
: 현재 line에서 첫번째 위치로 이동 (공백이어도 이동)
line(행)별 이동
+
: 다음 행에서 공백이 아닌 첫번째 글자로 이동
-
: 이전 행에서 공백이 아닌 첫번째 글자로 이동
n
+ enter
: 현재 행에서 n번째 다음 행으로.
n
+ G
: n번째 행으로 이동.
G
: 맨 마지막 행으로 이동. ***
n
+ gg
: n번째 행으로 이동. ***
gg
: 맨 처음 행으로 이동. ***
:
+ n
: n번째 행으로 이동.
:file
: 현재 파일에서의 위치 정보를 상태바에 표시.
column(열)으로 이동
n
+ |
: 현재 행에서 n번째 열로.
스크롤
CTRL
+ F
: 한화면 정도 아래로 이동(스크롤). D
일 경우 반화면
CTRL
+ B
: 한 화면 정도 위로 이동(스크롤). U
일경우 반화면
z
+ enter
: 현재 커서가 있는 위치가 화면의 위가 되도록 스크롤
z
+ .
: 현재 커서가 있는 위치가 화면의 중간이 되도록 스크롤
z
+ -
: 현재 커서가 있는 위치가 화면의 아래가 되도록 스크롤
검색 관련
/
+ pattern
: pattern 검색. 파일의 앞에서 뒤로 검색(현재 커서 위치에서부터). ***
n
입력시 다음 위치로.N
입력시 그전 위치로
?
+ pattern
: pattern 후방검색. 파일의 뒤에서 앞으로 검색(현재 커서 위치에서부터).
n
입력시 다음(전방검색기준) 위치로.N
입력시 그 전 위치로.
f
+ [character]
: 현재 행에서 뒤에 있는 [character] 검색하여 이동.
- 이후 같은
[character]
검색은;
로 수행(다음 위치로),,
은 앞으로 이동. ;
,,
은 한 행에서만 수행됨. (한 글자 검색은 한 행이 범위)
F
+ [character]
: 현재 행에서 앞에 있는 [character] 검색하여 이동
검색 관련 설정
set nohls
: 검색 문자열에 하이라이트 되는 기능을 끔.
set hls
: highlight search로 hlsearch
를 줄여서 hls
로 표현.
마킹 및 마킹 위치 이동 (marker, 마커 설정)
m
+ x
: 현재 커서 위치를 x
로 마킹 (눈에 안보임)
'
+ x
: x
로 마킹된 위치로 이동.
+
: 마킹된 위치로 이동하기 전으로 돌아감.
마커(marker)는 영어 대소문자 한글자로 설정됨 (위의 예에서는 x
로)
마커 삭제는 :delmarks 지울_마커_철자
를 이용 ( :delmarks x
)
편집 ( Insert Mode 로 전환)
Normal mode (=command mode)에서
아래 키 들을 누를 경우, insert mode(=edit mode) 로 전환됨.
화면 아래에 -INSERT- 가 표시되며, 이후 사용자에게 모든 키가 입력됨.
참고로 normal mode가 되려면 ESC 키를 누르면 됨.
i
: 커서 위치에서 입력 시작. ***
I
: 커서가 있는 행의 맨 앞으로 이동하여 입력 시작.
a
: 커서 이후에 입력 시작. ***
A
: 커서가 있는 행의 맨 뒤로 이동하여 입력 시작.
o
: 현재 커서가 있는 행 아래에 행을 추가하면서 입력시작. (open line)
O
: 현재 커서가 있는 행 위에 행을 추가하면서 입력시작.
R
: replace, 즉 수정이 이루어지는 것으로 모든 글자를 덮어쓰게 됨. ***
cc
: 현재 행을 삭제하고 그 행의 위치에 새로운 내용 입력 시작
cw
: 현재 단어를 삭제하고 단어 위치에 새로운 내용 입력 시작.
저장 및 종료
Command line mode(=colon mode)에 저장이 가능함.
ESC 입력할 경우, normal mode (=command mode)가 되며,
normal mode에서 : 입력시 command line mode가 됨.
w
: 저장. w 저장할다른파일명(확장자포함)
일 경우, 다른 이름의 파일로 저장 가능.
sav
: 다른 이름으로 저장.w
의 경우, 다른 이름을 지정하면 다른 이름의 파일로 저장하고도 여전히 버퍼는 열었던 원래 파일인 것과 달리,sav
는 버퍼가 다른이름으로 저장한 파일로 변경됨.
q
: 종료.
wq
: 저장 및 종료
up
: 변경 사항이 있는 경우에만 저장.
x
: up
+ q
임. 변경사항이 있는 경우만 저장하고 종료. (일반모드에선 ZZ
)
!
를 위의 명령어 들에 붙여줄 경우, 강제적으로 해당 명령을 실행하게됨.w!
는 다른 곳에서 파일이 열려있어도 강제적으로 저장하는 것을 의미.
삭제
x
: 현재 커서가 가르키는 문자 삭제 (글자 하나 자르기) ***
- Newline은 삭제 불가. (즉 empty line은 못 지움)
dw
: 현재 위치에서 단어끝까지 삭제(자르기)
dd
: 현재 행 삭제(자르기)
D
: 현재 커서 위치에서 현재 행의 끝까지 삭제 (= d$
)
J
: 현재 행의 뒤에 바로 아래의 행을 붙임. (현재 행의 newline 문자와 다음 행의 앞에 있는 공백들을 삭제)
Undo and Redo ***
u
: undo
CTRL
+ R
: redo
.
: 이전에 한 행동 다시 반복.
카피 및 붙여넣기
y
: yank 로 읽히며 현재 블럭을 카피
p
: put or paste 로 읽히며 현재 카피된 (혹은 자르기된) 블럭 혹은 행을 붙여넣음.
가급적 잘라 붙이기는 편의상 비주얼블럭 혹은 비주얼 라인을 이용하는게 편하다.
비주얼 라인을 선택한 상태에서 ”
+ n
+ d
를 수행할 경우, 해당 블럭이 잘라지면서 n 번 버퍼에 저장됨.
”
+ n
+ p
: 현재 삭제한(잘라낸) n번째 버퍼를 현재 커서 위치에 붙임.
라인 선택, 블럭 선택
v
: visual 상태. 글자 단위로 선택 영역 크기 조절.
V
: visual line 상태. 행 단위로 선택 영역 크기 조절.
CTRL
+ v
: 비주얼블럭 : column mode라고도 불림. (WSL에서는 `CTRL+q` 를 사용하자.) ***
- 선택된 상태에서
u
입력시 모두 소문자가 되고,U
입력시 모두 대문자로 변경되며,~
소문자는 대문자, 대문자는 소문자로 변환이 수행된다. - 선택된 상태에서 command line mode로 들어가면 다양한 응용이 가능.
:’<,>’
는 visual mode로 선택된 영역을 의미함.
윈도우 기준으로 마우스로 특정 텍스트를 선택한 상태를
vim에서는 visual mode라고 부름
(혹자는 select mode라고도 부르지만 이는 윈도우 기준으로 설명한 것으로
vi관련 공식문서에서는 모두 visual mode라고 부름.)
열편집 ***
CTRL
+v
를 눌러서 비주얼 블럭 모드(WSL에서는 `CTRL+q` 를 사용)로 열편집 대상이 되는 열과 행들을 선택.SHIFT
+i
를 눌러서 입력모드(edit mode)로 전환하고, 입력을 수행.ESC
를 눌러서 대상이되는 모든 행의 해당 열에 입력 내용을 적용.
들여쓰기
SHIFT
+v
를 입력(비주얼라인, wsl에선 'CTRL+q')하여 들여쓰기할 행들을 선택.>
를 입력하여 들여쓰기 수행.<
입력시 들여쓰기 한단계가 취소됨.
치환 (substitution)
:1,$s/acasia/영이/g
- 명령어모드에서 위의 명령 입력할 경우, 첫 번째 줄(
1
)부터 마지막 줄($
)까지acasia
를
영이
로 치환시킴. s
가 substitute(치환) 을 의미g
는 globally의 의미로 모든 acasia를 바꾸라는 뜻.
:1,$s/search-string/replace-string/gc
- 이 경우, 치환 여부를 물어봄.
#
는 line,$
는 파일끝,.
은 현재 줄,g
는 global (파일전체),i
는 ignore case(대소문자 무시),c
치환 여부를 물어보고(check) 난 후 replace.
전체 내용 삭제
:.,$d
- 현재 줄(
.
) 부터 마지막($
)까지 지우라(d
)는 의미 - 응용사례
:1,.d
: 1 ~ 현재줄까지 지우기 :%d
: 파일의 내용 전체 지우기.%
=1,$
와 같은 범위를 의미.:1,10d
: 1 ~ 10 줄까지 지우기
- 범위지정 메타문자
.
: 현재 행.$
: 마지막 행.+
+n : 현재 위치에서 아래로 n번째 행.-
+n : 현재 위치에서 위로 n번째 행.%
: 문서 전체.
좋은 사이트
https://m.blog.naver.com/PostView.naver?blogId=nfwscho&logNo=220340946365&navType=by
https://sunyzero.tistory.com/222
'Computer > Linux' 카테고리의 다른 글
Git: 사용자와 이메일 정보 설정 및 확인하기 (0) | 2024.05.20 |
---|---|
[vim] VI : carriage return 제거하기 : CRLF → LF (0) | 2023.07.14 |
[Linux] Network Setting (0) | 2023.02.07 |
[Linux] 화면 캡쳐 단축키 (0) | 2023.01.30 |
[Linux] Debian 계열 패키지 관리 툴: apt, apt-get (0) | 2023.01.26 |