에디터vi improvedWindows, Mac 지원Ubuntu와 같은 Debian 계열$ sudo apt -y install vim
vim 파일명
$ vim mytext.txt # mytext.txt 파일이 없으면 새로 생성된다.
파일명 = - 일 때는 stdin$ find . -name "*txt" | vim - # find 명령어의 출력을 vim으로 연다.
normal modeinsert modecommand-line mode파일 저장 등 복잡한 명령어 입력
비주얼 모드, visual mode
실행 → normal modenormal mode + a, i, o → insert modeinsert mode + ESC → normal modenormal mode + : → command-line modecommand-line mode + ESC or 실행 → normal modea → 현재 커서 위치에서 한 칸 뒤로 이동 후 입력 모드 전환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 이후 Dfc → c를 전방 검색Fc → 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로 저장하기 전 까지는 bufferregister → 텍스트 일부를 저장: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 → 반대 방향cacommand-line mode에서 사용 가능
ab 내멜 036ab@naver.com # [내멜]을 치면 자동으로 [036ab@naver.com]이 타이핑됨
한글 상태 오타를 변환할 수도 있다.
iainsert 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 → = → Gvisualmode +=:set et ts=4
:ret # retab을 사용해도 된다.
:set noet ts=4
:ret!
Ctrl + n → 쓰던 단어와 비슷한 단어를 전방 탐색 후 제공
Ctrl + p → Ctrl + n과 반대 방향
자동으로 vimrc를 만들어 주는 곳