에디터
vi
improvedWindows
, Mac
지원Ubuntu
와 같은 Debian 계열$ sudo apt -y install vim
vim
파일명
$ vim mytext.txt # mytext.txt 파일이 없으면 새로 생성된다.
파일명
= -
일 때는 stdin
$ find . -name "*txt" | vim - # find 명령어의 출력을 vim으로 연다.
normal mode
insert mode
command-line mode
파일 저장 등 복잡한 명령어 입력
비주얼 모드, visual mode
실행
→ normal mode
normal mode
+ a
, i
, o
→ insert mode
insert mode
+ ESC
→ normal mode
normal mode
+ :
→ command-line mode
command-line mode
+ ESC
or 실행
→ normal mode
a
→ 현재 커서
위치에서 한 칸 뒤로
이동 후 입력 모드 전환A
→ 현재 행의 끝
으로 이동 후 입력 모드 전환i
→ 현재 커서 위치
에서 입력 모드 전환I
→ 현재 행의 맨 앞
으로 이동 후 입력 모드 전환o
→ 현재 행
아래 새로운 행
을 만든 후 입력 모드 전환O
→ 현재 행 위에 새로운 행
을 만든 후 입력 모드 전환R
→ 수정 모드로, 모든 글자 덧쓰여짐!
normal mode
에서, h
, j
, k
,l
로 커서를 이동할 수 있다.3h
→ 왼쪽 3칸 이동3k
→ 아래 3줄 이동^
→ 행 맨 앞으로 이동$
→ 행 맨 끝으로 이동Ctrl
+ B
→ Page up
, 위로 한 화면 스크롤Ctrl
+ U
→ 위로 반 화면 스크롤Ctrl
+ F
→ Page down
아래로 한 화면 스크롤Ctrl
+ D
→ 아래로 반 화면 스크롤#gg
→ #
행으로 이동, #
없으면 1#G
→ #
행으로 이동, #
없으면 마지막:#
→ #
행으로 이동x
→ 커서에 위치한 문자 삭제, Delete
와 같음dd
, :d
→ 현재 행 삭제D
→ 현재 컬럼 위치에서 행 끝까지 삭제 (=d$
)J
→ 아래 행을 현재 행의 끝에 붙힘 (아래 행의 공백은 제거)x
아무리 눌러도 다음 줄 딸려오지 않음yy
, :y
, Y
→ 현재 행 복사(yank)p
→ 현재 행에 붙여 넣기:pu
→ 개행 문자가 포함된 경우, 현재 행의 아래에 붙여 넣기P
→ 현재 행의 위쪽에 붙여 넣기u
→ undo, 명령 취소Ctrl + R
→ redo, 취소한 명령 다시 실행.
→ 이전 명령어 반복command-line mode
에서 범위를 지정해서 명령:#d
→ #
번 행 삭제:#1~#2d
→ #1
~#2
번 행 삭제%
, l
, $
→ 전체.
→ 현재 행:-#1,+#2d
→ 현재 행에서 위로 #1
행, 아래로 #2
행 삭제드래그
기능v
→ 일반 비주얼 모드, 현재 커서 위치에서 블록 지정V
→ visual line mode, 현재 커서 위치에서 행 단위
로 블록 지정Ctrl + V
→ visual block mode, 열 단위
로 블록 지정Ctrl + Q
로도 사용
한 번에 모든 열을 수정할 수 있다
1304, Yona Yahav, M, 42, MP1
1294, Kebin Robinson, M, 41, CP1
1314, TW Yoon, M, 34, CP1
1315, Rina Suzuki, F, 36, MP1
1601, Steven Choi, M, 34, CP3
1600, 로버트 김, M, 32, CP3
1297, Rarry Robinson, M, 38, CP2
gg
→Ctrl+V
→G
→I
→0000
→ESC
*2
00001304, Yona Yahav, M, 42, MP1
00001294, Kebin Robinson, M, 41, CP1
00001314, TW Yoon, M, 34, CP1
00001315, Rina Suzuki, F, 36, MP1
00001601, Steven Choi, M, 34, CP3
00001600, 로버트 김, M, 32, CP3
00001297, Rarry Robinson, M, 38, CP2
모든 열에 0000
이 추가됨
o
→ 블록의 시작을 이동할 수 있다.clipboard
기능이 포함된 vim
$ sudo apt -y install vim-gnome # ubuntu와 같은 Debian 계열의 명령어
vim --version
을 실행해서,$ vim --version | grep clipboard
+clipboard +jumplist +persistent_undo +virtualedit
-ebcdic +mouseshape +statusline +xterm_clipboard
clipboard
, xterm_clipboard
가 +
인지 확인
$ vim ~/.vimrc
set clipboard=unnamedplus
입력 후 저장 (:wq
)
:set
→ 현재 명령어 옵션 확인:set all
→ 모든 명령어 옵션 확인:set [no]name
→ name
명령어 실행, noname
으로 취소nu
→ 화면에 행 번호 표시rnu
→ 현재 행 기준 상하 상대적 행 번호 표시ai
→ 자동 들여 쓰기cindent
→ C
언어 스타일 들여쓰기ts=value
→ tab
크기를 value
로 설정sw=value
→ 자동 블록 이동 시 value
만큼 이동set
명령어는 normal mode
에서 사용 가능하고, .vimrc
로 설정할 수 있다.
:colorscheme [Tab]
으로 옵션 선택:help #
→ #
단어가 포함된 명령어를 보여 준다Ctrl+]
→ 선택한 단어가 링크된 곳으로 이동Ctrl+T
→ 이전으로 이동O
혹은 Q
선택R
이후 D
f
c → c를 전방 검색F
c → c를 후방 검색;
→ 최근 검색을 재검색,
→ 최근 검색을 반대 방향으로 재검색/
string → string을 전방 검색
?
string → string을 후방 검색
*
→ 현재 커서에 위치한 단어 전방 검색
#
→ 현재 커서에 위치한 단어 후방 검색
n
→ 다음 탐색 결과
N
→ n
과 반대 방향 탐색 결과
%
→ 괄호 짝 찾아줌
/\c
→ 대소문자 구별 x
:set ignorecase
로 기본 설정할 수도 있다./[a-g]re
→ a~g 중 하나 + re가 조합된 단어 검색
\M
→ magic 해석을 금지
/[section]
은 정규식이라 그냥 검색이 안 된다./\M [section]
으로 검색은 가능sed
의 기능이 import된 것:[range]s/<찾는 문자열>/<교체할 문자열>/<옵션>
- 옵션
- g
→ 검색된 문자열 모두 교체
- i
→ 대소문자 무시
- c
→ 교체마다 [y/n] 표시
- e
→ 에러 무시
/
가 너무 많이 들어갈 때 separator
을 ,
로 바꿔서 표현할 수 있다.
$ :%s//home/linuxer//home/unixer/g
$ :%s/\/home\/linuxer/\/home\/unixer/g
$ :%s,/home/linuxer,/home/unixer,g
# 모두 같은 명령어.
buffer
→ 파일을 편집하기 위한 임시 공간:w
로 저장하기 전 까지는 buffer
register
→ 텍스트 일부를 저장:e
filename → filename을 편집 모드로 오픈:e
#count → count번째 파일 오픈:e
<path>
→ 에 있는 파일 목록 열람:find
filename → filename에 해당하는 파일을 찾아 오픈Ctrl+6
→ :e
의 단축키:q[!]
→ 종료, [!]
는 강제 종료:qa[!]
→ 모든 파일 종료:wq
→ 저장하고 종료:wqa
→ 모든 파일 저장하고 종료:w
filename → filename에 파일 저장:sav
filename → 현재 파일을 다른 이름으로 저장:up
→ 변경된 점이 있는 경우, :w
:x
→ ZZ
와 함께 :w
최신 버전Ctrl+w
s
or :sp
filename → 여러 파일을 수평 분할Ctrl+w
v
or :vp
filename → 여러 파일을 수직 분할Ctrl+w
방향키
Ctrl+w
Ctrl+w
or Ctrl+w
w
→ 오른쪽으로 이동Ctrl+w
Ctrl+p
or Ctrl+w
p
→ 바로 이전 창으로 이동Ctrl+w
=
→ 모든 창 크기 동일하게Ctrl+w
[#]+
→ #
만큼 크기 키우기Ctrl+w
[#]-
→ #
만큼 크기 줄이기$ vim -d file1 file2
file1
과 file2
에서 다른 부분을 표시해 준다[#]tabe[dit] file
→ #
번째 탭에 파일 열기[#]tabnew file
→ #
번째 위치에 빈 탭 만들기[#]tabc[lose]
→ #
번째 탭 닫기[#]gt
, [#]Ctrl+PageDown
→ 다음 탭(#
번째 탭)으로 이동[#]gT
, [#]Ctrl+PageUp
→ 이전 탭(#
번째 탭)으로 이동:tabm[ove] [#]
→ #
번째 탭으로 이동 (default 오른쪽):files
로 현재 buffer
목록을 출력할 수 있다.gf
→ 커서 아래 파일로 이동Ctrl+w
f
→ 커서 위치 파일을 분할된 창에 오픈Ctrl+w
g
→ 커서 위치 파일을 탭에 오픈Ctrl+6
→ 이전 파일로 돌아가기C언어
파일의 #include
헤더파일도 들어갈 수 있다.fencs
$ set fencs=ucs-bom,utf-8,korea,latinl
# BOM확인 후, UTF-8, korea 체크(euc-kr), ASCII 확인
:help encoding-values
더 확인해 보자$ vim ~/.vimrc
set fencs=ucs-bom,utf-8,korea,latinl
:set ff=dos
:set fens=korea
:wq # 아니면 [:sav 새로운이름.txt] 로 저장
# fencs가 제대로 설정되었다면 자동 변환 가능
:set ff=unix
:set fenc=utf8
:wq # 아니면 [:sav 새로운이름.txt] 로 저장
0
→ 0번째 열^
→ 공백이 아닌 첫 번째 열$
→ 마지막 열w
, u
→ 단어 경계로 이동b
→ 반대 방향ca
command-line mode
에서 사용 가능
ab 내멜 036ab@naver.com # [내멜]을 치면 자동으로 [036ab@naver.com]이 타이핑됨
한글 상태 오타를 변환할 수도 있다.
ia
insert mode
에서 사용 가능
ia 시간0 <C-R>=strftime("%Y.%M.%d=%H:%M:%S)<C-R>
nmap <단축키> <명령>
→ normal mode
에서 단축키
를 누르면 명령을 실행imap <단축키> <명령>
→ insert mode
에서 단축키
를 누르면 명령을 실행cmap <단축키> <명령>
→ command-line mode
에서 단축키
를 누르면 명령을 실행vmap <단축키> <명령>
→ visual mode
에서 단축키
를 누르면 명령을 실행autocmd BufRead, BufNewFile *.txt colo evening
# Buffer가 읽기 or 새 파일 만들었을 때, .txt확장자, evening 테마로 실행하라.
gg
→ =
→ G
visualmode +=
:set et ts=4
:ret # retab을 사용해도 된다.
:set noet ts=4
:ret!
Ctrl + n
→ 쓰던 단어와 비슷한 단어를 전방 탐색 후 제공
Ctrl + p
→ Ctrl + n
과 반대 방향
자동으로 vimrc를 만들어 주는 곳