1. X window 환경에서 vim과 클립보드 공유
1. vim enhanced, vim with X 설치
$ sudo apt -y install vim-gnome
$ sudo apt -y install vim-gnome
2. clipboard / xterm_clipboard 설정이 켜져있는지(+) 확인
jsg@jsg-ubuntu:~/testdir$ vim --version | grep clip
+clipboard +insert_expand +path_extra +user_commands
+emacs_tags +mouseshape +startuptime +xterm_clipboard
3. ~/.vimrc 작성
" Use the system clipboard for yank / delete / paste operations
if has('unnamedplus')
set clipboard=unnamed,unnamedplus
endif
2. Color Scheme
:colorscheme item
: 탭이나 Ctrl-D를 누르면 가능한 colorscheme을 볼 수 있음
blue | peachpuff | murfy | zellner |
---|
| | | |
3. ~/.vimrc로 사용자설정
set ai cindent hls
set ts=4 sw=4
set fencs=ucs.bom,utf-8,korea,latin-1
colo peachpuff
4. File open시 에러가 나는 경우
- process ID 가 still running 일 경우 :
문서가 다른 곳에서 열려 있는 상태이므로 읽기(O)만 하거나 종료(Q) 하는 것이 좋음
E325: ATTENTION
Found a swap file by the name "testdir/.hello.py.swp"
owned by: jsg dated: Sat Dec 12 07:08:18 2020
file name: ~jsg/testdir/hello.py
modified: no
user name: jsg host name: jsg-ubuntu
process ID: 5797 (still running)
While opening file "testdir/hello.py"
dated: Sat Dec 12 07:05:48 2020
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r testdir/hello.py"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "testdir/.hello.py.swp"
to avoid this message.
Swap file "testdir/.hello.py.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
- process ID 가 still running 이 아닌 경우 :
작업을 하다 프로세스가 비정상적으로 종료된 경우이므로 복구(R)을 하는 것이 좋음
이후 복구가 잘 되었으면 다음 실행시 스왑파일을 삭제(D)를 해줘야 함
E325: ATTENTION
Found a swap file by the name "testdir/.hello.py.swp"
owned by: jsg dated: Sat Dec 12 07:08:18 2020
file name: ~jsg/testdir/hello.py
modified: no
user name: jsg host name: jsg-ubuntu
process ID: 5797
While opening file "testdir/hello.py"
dated: Sat Dec 12 07:05:48 2020
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r testdir/hello.py"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "testdir/.hello.py.swp"
to avoid this message.
Swap file "testdir/.hello.py.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
5. DOS / UNIX 텍스트 변경
- DOS 에서는 newline을 CR+LF을 쓰지만 UNIX는 LF를 씀
- 이 설정은
:set ff=dos
/ :set ff=unix
을 통해 할 수 있음
jsg@jsg-ubuntu:~$ file dos.txt; file unix.txt
dos.txt: ASCII text, with CRLF line terminators
unix.txt: ASCII text
6. 여러 문서 작업하기
a. vim을 열때 여러개 지정
$ vim file1 file2 file3 ...
b. 구식 방식
명령어 | 설명 |
---|
:e [filename] | filename을 편집모드로 오픈, fimename 생략하면 현재 파일 |
:find expression | expression과 매치되는 file을 오픈, 2개 이상이면 에러 |
:e #[숫자] | open한 file중 [숫자]번째 file로 이동, [숫자] 생략하면 이전 파일 |
Ctrl-^ | :e # 과 동일 |
c. 창 분할 방식
- vim 실행시
-o
/ -O
옵션으로 창 분할 가능
- 명령어 앞에 숫자를 넣으면 창 크기 지정 가능
명령어 | 설명 |
---|
:sp filename / Ctrl-W s | 수평 창 분할 |
:vs filename / Ctrl-W v | 수직 창 분할 |
:new / :vnew | 새로운 창 생성 |
Ctrl-W Ctrl-w | 다음 창 이동 |
Ctrl-W h/j/k/l | 원하는 방향으로 창 이동 |
Ctrl-W p | 이전 창으로 이동 |
Ctrl-W = | 모든 창 사이즈 동일화 |
Ctrl-W + | 현재 창 사이즈 키우기 |
Ctrl-W - | 현재 창 사이즈 줄이기 |
Ctrl-W q | 현재 창 닫기 |
Ctrl-W o | 현재 창을 제외한 모든 창 닫기 |
d. 탭 방식
- vim 실행시
$ vim -p file1 file2 ...
으로 여러 탭으로 실행 가능
명령어 | 설명 |
---|
:[num]tabe file | file을 새로운 탭을 num번째에 생성, num 생략되면 현재 탭 다음으로 |
:[num]tabnew file | 새 탭에서 새로운 파일을 염 |
:[num]tabc | 탭 닫기 |
:[#]tabn / :[#]tabp | Command로 탭 이동 |
:tabm [#] | Command로 #번째 탭 이동, #생략시 맨 오른쪽 |
gt / gT | 일반 모드로 탭 이동 |
Ctrl-PgUp / Ctrl-PgDn | gt / gT 와 동일 |
e. 파일 링크
명령어 | 설명 |
---|
gf | 커서에 있는 파일 열기 |
Ctrl-W f | 커서에 있는 파일을 분할된 창에 열기 |
Ctrl-W gf | 커서에 있는 파일을 새로운 탭에 열기 |
Ctrl-^ | 이전 파일로 이동 |
f. buffer 리스트 보기
명령어 | 설명 |
---|
% | 현재 작업중인 buffer |
# | 이전 buffer (Ctrl-^ 누르면 이동하는 buffer) |
a | 현재 화면에 보이는 buffer |
+ | 변경된 buffer |
7. vim 파일 비교
- vim 실행시
$ vim -d file1 file2
혹은 vim 실행후 :diff
명령어 | 설명 |
---|
do | 변경 가져오기 |
dp | 변경 내보내기 |
space | 여러줄이 같으때 [+]모양으로 숨겨진 행들 펼치기 |
8. 파일 브라우저 기능 (newtr)
명령어 | 설명 |
---|
- | 상위 디렉토리 이동 |
i | 파일 표기 방식 변경 |
s | 정렬 방식 변경 |
o | 커서 위치의 파일을 수평분할 |
v | 커서 위치의 파일을 수직분할 |
p | 파일 미리보기 창 |
t | 파일 탭 분할 |
9. Encoding
:set fenc=enconding_type
을 이용하여 작성한 파일을 인코딩 할수 있음
- 인코딩된 파일을 열 경우 ~/.vimrc 에
:set fencs=...
를 작성해야 볼 수 있음
- ~/.vimrc 설정 후 파일을 연 모습. 보통
set fencs=ucs-bom,utf-8,korea,latin-1
로 설정
10. Abbreviation(약어)
명령어 | 설명 |
---|
:ab [lhs] | lhs에 약어 정보, :ab는 전체 정보 |
:ab lhs rhs | lhs를 -> rhs |
:unab lhs | lhs 약어 삭제 |
:abclear | 전체 약어 삭제 |
:ia | ab와 같은 기능이지만 Insert mode에서만 작동 |
:ca | ab와 같은 기능이지만 Commnad mode에서만 작동 |
ab mymail jsg@gmail.com
ia time0 <C-R>=strftime("%Y.%m.%d-%H:%M:%S")<CR>
ca ㅈ w
11. Keymap(단축키)
명령어 | 설명 |
---|
:nmap key command | Normal 모드에서 적용되는 키맵 |
:imap key command | Insert 모드에서 적용되는 키맵 |
:cmap key command | Command 모드에서 적용되는 키맵 |
:vmap key command | Visaul 모드에서 적용되는 키맵 |
nmap <F2> :up<CR>
nmap <F3> :tabnext<Enter>
nmap <F4> :tabprev<Enter>
12. 프로그래머를 위한 기능
a. 들여쓰기
>>
/ <<
: 행 들여쓰기 / 들여쓰기 취소
- Visual Mode로 블럭 지정 후
<
/ >
: 하이라이트된 코드 들여쓰기/들여쓰기 취소
- Visual Mode로 블럭지정 후
=
: 자동 들여쓰기
b. 자동완성
Ctrl-N
/ Ctrl-P
: 변수 및 import한 라이브러리 검색
Ctrl-N
+Ctrl-X
+Ctrl-N
: 특수문자가 포함된 단어일 때
Ctrl-X
+Ctrl-F
: 파일 검색 / 자동 완성
c. tab <=> spaces
:set et ts=4
후 ret
: 탭을 스페이스로
:set noet ts=4
후 ret!
: 스페이스를 탭으로
d. ~/.vimrc 받는 곳