Skip to content

Instantly share code, notes, and snippets.

@onmoving
Last active January 3, 2019 02:36
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save onmoving/4544537 to your computer and use it in GitHub Desktop.
Save onmoving/4544537 to your computer and use it in GitHub Desktop.

vim 사용하기

목차

##사용하기

##tip & tech


##my .vimrc

#좀더 발전된 사용법

##정규 표현식의 사용

  • ^: 행의 첫 문자([ ] 안에서는 not의 의미)
  • $: 행의 끝
  • .: 아무 문자나 한 문자
  • \| or의 의미
  • [ ]: [ ] 사이의 문자 중 하나
  • \{min,max\}: min이상 max이하 반복됨
  • *: 앞의 내용이 0번 이상 반복됨
  • \+: 앞의 내용이 1번 이상 반복됨
  • \<: 단어의 시작
  • \>: 단어의 끝
  • \n: new line 문자
  • \t: tab 문자

\<, \> 사용예:

\<ko
\<정규
ea\>
현식\>

\{min,max\} 사용예: 영문자로 시작하고 3-4 r 자리 숫자로 끝나는 문자열

[A-z]\+[0-9]\{3,4\}

\| 사용예: Korea 혹은 korea

\(K\|k\)orea

vim에서는 정규 표현식 내에 POSIX 문자 클래스를 지원한다.

  • [:alnum:]: 알파벳과 숫자 [A-Za-z0-9]
  • [:alpha:]: 알파벳 [A-Za-z]
  • [:cntrl:]: 제어 문자
  • [:blank:]: 탭과 공백 문자
  • [:digit:]: 숫자 [0-9]
  • [:graph:]: 제어 문자와 공백 문자를 제외한 문자
  • [:lower:]: 소문자 [a-z]
  • [:upper:]: 대문자 [A-Z]
  • [:print:]: 제어 문자를 제외한 문자. 즉, 프린트 할 수 있는 문자
  • [:punct:]: [:graph:] 문자 중 [:alnum:]을 제외한 문자. 예) !,@,#,$,%,^...
  • [:space:]: 화이트 스페이스 예) 공백, 탭, 캐리지 리턴, 개행 문자, 수직 탭, 폼 피드
  • [:xdigit:]: 16진수

소문자로 이루어져 있는 문자열

[[:lower:]]\+

int var;를 찾고자 한다면

int\(\ \|\t|\n\)\+var;
int[[:space:]]\+var;

위의 표현보다는 아래의 것이 더 간결하다.

아래는 int myfunc (void) { 와 같은 함수 선언과 매칭된다.

int[[:space:]]\+myfunc[[:space:]]*(.*)[[:space:]]*{

vim은 확장 정규 표현식을 지원한다. 확장 정규 표현식으로 아래와 같다.

  • \i: 변수 지정에 사용되는 문자[_0-9A-Za-z]
  • \I: \i와 같지만 숫자는 제외
  • \k: 키워드로 사용하는 문자[_.-0-9A-Za-z>]
  • \K: \k와 같지만 숫자는 제외
  • \f: 파일명으로 사용하는 문자
  • \f: \f와 같지만 숫자는 제외
  • \p: 프린트 가능한 문자
  • \P: \p와 같지만 숫자는 제외
  • \s: 화이트 스페이스 문자(공백과 탭)
  • \S: 화이트 스페이스가 아닌 문자
  • \d: 숫자[0-9]
  • \D: 숫자가 아닌 문자[^0-9]
  • \x: 16진수 숫자[0-9A-Fa-f]
  • \X: 16진수 숫자가 아닌 문자[^0-9A-Fa-f]
  • \o: 8진수 숫자[0-7]
  • \O: 8진수 숫자가 아닌 문자[^0-7]
  • \w: 영문 단어에서 사용되는 문자[^0-9A-Za-z]
  • \W: 영문 단어에서 사용되지 않는 문자[^0-9A-Za-z]
  • \h: 영문 단어의 시작에 사용되는 문자[A-Za-z]
  • \H: 영문 단어의 시작에 사용되지 않는 문자[^A-Za-z]
  • \a: 모든 알파벳[A-Za-z]
  • \A: 알파벳이 아닌 문자[^A-Za-z]
  • \l: 소문자[a-z]
  • \L: 소문자가 아닌 문자[^a-z]
  • \u: 대문자[A-Z]
  • \U: 대문자가 아닌 문자[^A-Z]
  • \e: esc
  • \t: tab
  • \r: 캐리지 리턴
  • \b: 백스페이스
  • \n: 개행 문자

사용예: 대문자로 이루어진 단어를 찾을 때

\<[[:upper:]]\+\> 또는 \<[A-Z]\+\>
\<\u\+\>

위의 표현식보다는 아래의 표현식이 훨씬 간결하다. 다른예로

int[[:space:]]\+myfunc[[:space:]]*(.*)[[:space:]]*{
int\s\+myfunc\s*(.*)\s*{

아래의 표현식으로 더 간결하게 표현하였다.

###정규 표현식을 사용한 탐색

/[정규표현식]

###정규 표현식을 사용한 치환

:%s/[정규표현식]/[바꾸려는 문자열]/g

예)

:%s/[A-z]\+/alpha/g

###정규표현식의 매칭문자 사용

aaa=YES
aaa=NO

위의 문자열을 가지고 아래와 같게 되도록 하고자 할 때 치환명령을 사용할 수 있다.

ccc=YES, ddd=YES
ccc=NO, ddd=NO

치환명령

:%s/aaa=\(YES\|NO\)/ccc=\1, ddd=\1/gc

위 치환명령은 정규식의 그룹기능을 사용하는 한 예이다.

##여러파일 편집하기

vim은 여러 파일을 편집하기 위해서 파일 버퍼의 개념을 사요한다.

$ vi file1.c file2.c file3.c
$ vi *
$ vi *.c

혹은 vim을 실행 주 :e [파일 명] 명령으로 파일을 오픈

위 명령으로 여러 파일을 오픈하면 열려 있는 파일들이 파일 버퍼에 들어있다.파일 버퍼와 관련된 명령을 아래와 같다.

  • :buffers: 버퍼의 내용을 나열
  • :files 또는 :ls: 버퍼의 내용을 나열
  • :b[N]: N번 버퍼로 이동
  • :bd[N]: N번 버퍼를 삭제(N이 없으면 현재의 버퍼를 완전 삭제)
  • :bw[N]: N번 버퍼를 완전 삭제(N이 없으면 현재의 버퍼를 완전 삭제)
  • :bp[N]: 이전 버퍼로 이동. N을 붙이면 N번 마큼 이전 버퍼로 이동
  • :bn[N]: 이후 버퍼로 이동. N을 붙이면 N번 마큼 이후 버퍼로 이동
  • :sb[N]: 창을 수평 분할해 N번 버퍼를 로드
  • :bf: 첫 번째 버퍼로 이동
  • :bl: 마지막 버퍼로 이동

아래 명령은 페도라에서 작동하지 않았음.

  • :al: 현재 열려있는 모든 버퍼를 수평 분할 창에 로드

.vimrc 설정 파일에 키 매핑 추가하기

"===========moving between file buffers
map ,1 :b!1<CR>
map ,2 :b!2<CR>
map ,3 :b!3<CR>
map ,4 :b!4<CR>
map ,5 :b!5<CR>
map ,6 :b!6<CR>
map ,7 :b!7<CR>
map ,8 :b!8<CR>
map ,9 :b!9<CR>
map ,0 :b!10<CR>
map ,x :bn!<CR>       "next buffer
map ,z :bp!<CR>       "previous buffer
map ,w :bw<CR>        "close current file buffer

##반복되는 문자열을 저장해서 다시 사용하기

vim은 잘라내기에서 지원하는 17개의 레지스터 외에 a 부터 z까지 26개의 레지스터를 더 지원한다. 이 추가 레지스터를 네임 레지스터라고 한다. 이 레지스터에 반복되는 여러 군데에서 반복적으로 쓰이는 문자열을 저장해 두고 사용을 하면 편리하다.

"a3yy

"a는 a 레지스터를 지정한다. 3yy는 현재 커서 위치에서 3개의 행을 복사해서 저장한다. 이제 a 레지스터에는 지정한 문자열이 저장되어 있다.

"ap

"a는 a 레지스터를 지정하고 p는 붙여넣으라는 명령이다.

"a5p

위와 같이 하면 5번을 붙여넣게 된다.

##매크로 사용하기

매크로를 기록하는 요령은 q[네임 레지스터명] 이다.

실습을 해 보자. 한줄을 주석 처리하고 아래 줄에 커서를 위치시키는 매크로이다.

qb

b 레지스터에 매크로를 기록한다. qb를 입력하면 "기록 중"이라고 화면 하단에 표시된다.

^i//<SpaceBar><Esc><Enter>
q

참고: 만일 위와 같이 매크로를 기록하는 중에 <Enter> 키가 작동하지 않을 겨우에는 j 키로 대체한다.

마지막에 q를 입력하며 화면 하단의 "기록 중" 메시지가 사라진다. 이제 b 레지스터에 매크로가 기록되었다.

매크로를 사용하는 방법은 @[네임 레지스터명] 이다. 이전에 실습한 b 매크로를 사용하려면 @b를 누르면 된다.

@b

매크로를 5회 실행하려면 아래와 같이 누른다.

5@b

결과적으로 다섯 줄을 주석 처리하였다.

주석을 제거하는 매크로를 c 레지스터에 기록해 보자

qc
^3x<Enter>
q
@c

##다중 창 사용하기

창생성

  • <Ctrl>+ws, :sp[lit]: 현재 파일을 수평 창으로 나눔
  • <Ctrl>+wv, :[N]vs[plit]: 현재 파일을 수직 창으로 나눔, N이 있이면 N칸의 크기로 분할
  • <Ctrl>+wn, :new: 수평 창으로 나누고 빈 문서를 보여줌
  • <Ctrl>+w^: 수평 창으로 나누고 이전 파일을 오픈
  • <Ctrl>+wf: 수평 창으로 나누어 커서 위치의 파일을 오픈함
  • <Ctrl>+wi: 커서 위치의 단어가 정의도니 파일을 오픈

창삭제

  • <Ctrl>+wq, :q[uit]: 현재 커서의 창을 삭제
  • <Ctrl>+wc, clo[se]: 현재 커서의 창을 삭제
  • <Ctrl>+wo, :on[ly]: 현재 커서의 창만 남기고 모든 창 삭제

창이동

  • <Ctrl>+wh: 왼쪽 창으로 커서를 이동
  • <Ctrl>+wj: 아래쪽 창으로 커서를 이동
  • <Ctrl>+wk: 위쪽 창으로 커서를 이동
  • <Ctrl>+wl: 오른쪽 창으로 커서를 이동
  • <Ctrl>+ww: 창 간에 커서를 순차적으로 이동
  • <Ctrl>+wp: 가장 최근에 이동한 방향으로 커서를 이동
  • <Ctrl>+wt: 최상위 창으로 커서를 이동
  • <Ctrl>+wb: 최하위 창으로 커서를 이동

창위치 바꾸기

  • <Ctrl>+wr: 순차적으로 창의 위치를 순환
  • <Ctrl>+wx: 이전 창과 위치를 바꿈

창크기 조절

  • <Ctrl>+w=: 창의 크기를 모두 균등하게 함
  • <Ctrl>+w_: 수평 분할에서 창의 크기를 최대화
  • <Ctrl>+w|: 수직 분할에서 창의 크기를 최대화
  • <Ctrl>+w[N]+, res[ize]+N: 창의 크기를 N행 만큼 증가(<Ctrl>+w+는 1행 만큼 증가)
  • <Ctrl>+w[N]-, res[ize]-N: 창의 크기를 N행 만큼 감소(<Ctrl>+w-는 1행 만큼 감소)
  • <Ctrl>+w[N]>: 창의 크기를 오른쪽으로 N칸 만큼 증가(수직 창에만 적용됨)
  • <Ctrl>+w[N]<: 창의 크기를 왼쪽으로 N칸 만큼 증가(수직 창에만 적용됨)

##마킹 사용하기

m[임의의 알파벳]: 마킹
`[임의의 알파벳]: 마킹한 위치로 이동

마킹의 종류는 세 가지이다

  • 전역 마킹: A-Z 대문자, 현재 파일을 포함한 다른 파일 간의 마킹이 가능하다. 즉 대문자로 마킹하면 파일이 다르더라도 마킹한 위치로 이동할 수 있다.
  • 지역 마킹: a-Z 소문자, 현재 파일 내에서만 마킹이 가능하다. 소문자로 마킹하면 현재 파일 내에서만 이동 할 수 있다.
  • 파일 마킹: vim이 자동으로 만든다. 마킹 정보는 ~/.viminfo 파일에 저장된다. 파일 마킹은 이전에 vim으로 편집한 파일의 경로와 파일 내에서의 위치를 vim이 알아서 마킹한다.

vim에서 마킹된 정보는 :marks 명령으로 환인할 수 있다.

:marks

마킹 관련 명령 요약

  • ma: a로 마킹, mb는 b로 마킹
  • `a: a로 마킹된 위치로 이동함
  • 'a: a로 마킹된 행의 처음으로 돌아감
  • '': 직전에 커서가 위치하던 행의 처음
  • ``: 직전에 커서가 있던 위치로 이동
  • '": 현재파일을 이전에 닫았을 때의 커서가 있던 행의 처음으로 이동
  • `": 현재파일을 이전에 닫았을 때의 커서가 있던 위치로 이동

##셸 명령 수행하기

:!ls
:!bash # 새로운 셸을 실행
$ exit # 셸을 종료

셸 명령의 출력 결과를 vim에 붙여넣기

:r ![명령]
:r !ls

참고: 파일의 내용을 끼워 넣고자 할 때

:r [파일명]
:r file2.c # 현재 커서의 위치에 file2.c의 내용을 끼워 넣는다

#기본사용법

##세가지 모드

  • 표준 모드
  • 입력 모드
  • 명령라인 모드

##파일 열기, 저장, 종료

  • :w: 저장
  • :w file.txt: file.txt 파일로 저장
  • w >> file.txt:: file.txt 파일에 덧붙여 저장
  • :q: vi 종료
  • ZZ: 저장 후 종료
  • :wq!: 강제 저장 후 종료
  • :e file.txt: file.txt 파일을 오픈
  • :e: 현재 파일을 불러옴

##입력

  • a: 현재 위치에서 추가
  • A: 행의 마지막에 추가
  • i: 현재 위치에 입력
  • I: 현재 행의 맨 앞에서 입력
  • o: 다음 행에 입력
  • O: 이전 행에 입력
  • s: 커서 위치의 한 글자를 지우고 입력
  • cc: 커서 위치의 한 행을 지우고 입력

##이동

  • h: 왼쪽으로 이동
  • i: 오른쪽으로 이동
  • j: 아래 행으로 이동
  • k: 윗행으로 이동
  • w, W: 다음 단어의 첫 글자로 이동
  • b, B: 이전 단어의 첫 글자로 이동
    • e, E: 단어의 마지막 글자로 이동
  • <Enter>: 다음 행의 첫 글자로 이동
  • ^: 현재 형의 첫 글자로 이동
  • $: 현재 행의 마지막 글자로 이동
  • +: 다음 행의 첫 글자로 이동
  • -: 위 행의 첫 글자로 이동
  • (: 이전 문자의 첫 글자로 이동
  • ): 다음 문장의 첫 글자로 이동
  • {: 이전 문단으로 이동
  • }: 다음 문단으로 이동
  • H: 커서를 화면의 맨 위로 이동
  • M: 커서를 화면의 중앙으로 이동
  • L: 커서를 화면 최하단으로 이동
  • z<Enter>: 현재 행을 화면의 맨 위로 이동
  • z.: 현재 행을 화면의 중앙으로 이동
  • z-: 현재 행을 화면의 최 하단으로 이동
  • [N]H: 커서를 위에서 N번째 행으로 이동
  • [N]L: 커서를 아래에서 N번재 행으로 이동
  • <Ctrl>+u: 반 화면 위로 스크롤
  • <Ctrl>+d: 반 화면 아래로 스크롤
  • <Ctrl>+b: 한 화면 위로 스크롤
  • <Ctrl>+f: 한 화면 아래로 스크롤
  • gg, 1G: 문서의 첫 행으로 이동
  • G: 문서의 마지막 행으로 이동
  • [N]G: N번째 행으로 이동
  • :[N]: N번째 행으로 이동

##편집

###삭제

  • x, dl: 커서 위치의 글자 삭제
  • X, dh: 커서 바로 앞의 글자 삭제
  • dw: 한 단어를 삭제
  • d0, d^: 커서 위치부터 행의 처음까지 삭제
  • D, d$: 커서 위치부터 행의 끝까지 삭제
  • dd: 커서가 있는 행을 삭제
  • dj: 커서가 있는 행과 그 다음 행을 삭제
  • dk: 커서가 있는 행과 그 앞 행을 삭제

###복사와 붙이기

yw		# 한 단어 복사
yy		# 한 행 복사
10yw	# 10개의 단어 복사
10yy	# 10행 복사
p		# 복사한 내용 붙여넣기
2p		# 두번 붙여넣기
[p		# 현재 커서의 앞에 붙여넣기

###잘라내기

  • :reg 명령: 레지스터에 내용 보기

레지스터 설명

  • "": 바로 이전에 지원진 내용
  • "1~"9: 지운 내용의 큐
  • ".: 최근에 타이핑한 내용
  • "%: 현재 편집하는 파일명
  • "/: 가장 최근에 검색한 문자열

레지스터를 선택하여 붙이기

예) "2p: 2번 레지스터의 내용을 붙여넣기

Tip: "1pu.u.u. : 레지스터에 있는 최근 내용부터 하나씩 되돌리면서 붙여넣는다.

설명: "1p는 1번 레지스터의 내용을 붙여넣는다. u는 되돌리기 명령이다. 그리고 . 명령은 바로 이전에 했던 작업을 반복하는 명령이다.

###블록지정

블록 지정하기

  • v 누른 후 이동키: 일반적인 블록 지정
  • <Shift> + v: 현재 커서의 한 줄을 선택
  • <Ctrl> + v 누른 후 이동키: 사각형 블록 지정

블록 지정 후 사용할 수 있는 기능

  • ~: 대소문자 전환
  • d: 삭제
  • y: 복사
  • c: 치환
  • >: 탭 삽입
  • <: 탭 제거
  • :: 선택된 영역에 대해 ex명령
  • J: 행을 합침
  • U: 대문자로 변경
  • u: 소문자로 변경

##되돌리기와 되살리기

  • u: 되돌리기
  • <Ctrl>+r: 되살리기
  • .: 이전에 했던 작업 반복

##문자열 탐색

아래로 탐색

/[검색 문자열 or 검색 패턴]

위로 탐색

?[검색 문자열 or 검색 패턴]

##문자열 치환

:[범위]/[매칭 문자열 or 패턴]/[치환 문자열]/[행 범위]
:%s/old/new/g

2행~4행 사이의 매칭되는 문자열을 치환한다.

:2,4s/old/new/g

현재 커서의 위치에서 위로 1행에서 아래로 3행 사잉의 매칭되는 문자열을 바꾼다.

:-1,+3s/old/new/g

g의 의미는 행의 전체범위를 지정한다. g를 사용하지 않으면 한 행에서 여러 개가 매칭되더라도 첫 번째 매칭되는 문자열에 대해서 한번만 치환이 일어난다.

:%s/old/new/

행 범위에 c를 쓰면 매칭되는 문자열에 대해 치환 할 지 여부를 사용자에게 묻는다.

:%s/old/new/gc

아래는 특정한 패턴이 있는 행만을 대상으로 치환이 일어나도록 할 때 사용하는 형식이다.

:[범위]/[패턴]/s/[매칭 문자열]/[치환 문자열]/[행 범위]

예를 들면 아래는 셸 스크립트에서 주석 부분은 건드리지 않고 TEST를 STR로 전부 바꾼다.

:g/\(^[^#].*TEST\|^TEST\)/s/TEST/STR/g

칭환 명령을 요약하면 아래와 같다.

  • s/old/new: 현재 행의 처음 old를 new로 교체
  • s/old/new/g: 현재 행의 모든 old를 new로 교체
  • 10,20s/old/new/g: 10행~20행 사이의 모든 old를 new로 교체
  • -3,+4s/old/new/g: 현재 커서 위치에서 3행 위부터 4행 아래까지 모든 old를 new로

교체

  • %s/old/new/g: 문서 전체에서 old를 new로 교체
  • %s/old/new/gc: 문서 전체에서 old를 new로 확인하며 교체
  • g/pattern/s/old/new/g: pattern이 있는 모든 행의 old를 new로 교체
  • g/pattern/s//new/g: :%s/pattern/new/g와 동일

###c계열 소스코드에서 여는 중괄호({)의 위치를 조정하기

:%s/\n{/\ {/g<cr>
:%s/\ {/\r{/g<cr>

.vimrc에 아래처럼 단축키를 매핑하여 사용할 수 있다.

"======================================================================
"toggle concatenation of opening brace position
"======================================================================
au FileType java,c,cpp,cs,js,javascript,jsp map ,cb : %s/\n{/\ {/g<cr>
au FileType java,c,cpp,cs,js,javascript,jsp map ,ncb : %s/\ {/\r{/g<cr>

##vim 실행 옵션

$ vim hello.c

hello.c 파일을 열고 편집 함. hello.c파일이 없으면 새로 생성한다.

$ vim file1.c file2.c file3.c
$ vim *
$ vim *.c

위 명령들은 현재 디렉토리의 조건에 일치하는 모든 파일을 편집함. 버퍼리스트에 사용해서 문서 간에 전환할 수 있음

$ vim -t start_kernel # start_kernel과 일치하는 태그들을 나열함

위 명령은 일치하는 태그로 열기를 수행함, ctags를 사용해야 함

"======================================================================
"general Settings
"======================================================================
set tabstop=4
set shiftwidth=0
set softtabstop=0
nmap ,li : set list<cr>
nmap ,nli : set nolist<cr>
set textwidth=0
set noexpandtab
set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
set nolist
colorscheme twilight
"======================================================================
"Override setting according to file extention
"======================================================================
filetype on
filetype plugin indent on
au FileType perl,ruby,clojure,objc,python,java,c,cpp,cs,html,css,php,php4,js,javascript,css,jsp,sh set nu
"======================================================================
"toggle concatenation of opening brace position
"======================================================================
au FileType java,c,cpp,cs,js,javascript,jsp map ,cb : %s/\n{/\ {/g<cr>
au FileType java,c,cpp,cs,js,javascript,jsp map ,ncb : %s/\ {/\r{/g<cr>
"======================================================================
"vim-ruby Setting
"======================================================================
compiler ruby
au FileType ruby set tabstop=2
au FileType ruby set shiftwidth=2
au FileType ruby set softtabstop=2
au FileType ruby map <F2> : !ruby %
"======================================================================
"vimClojure Setting
"======================================================================
let clj_highlight_builtins = 1
let clj_highlight_contrib = 1
let clj_paren_rainbow = 1
let clj_want_gorilla = 1
let vimclojure#NailgunClient="/home/khmirage/Util/clojure/vimclojure/ng"
"======================================================================
"Key Mapping Setting
"======================================================================
"Whitespace Line Insert Mapping
"======================================================================
map .j o
map .k O
map .ti i w
"======================================================================
"To HTML
"======================================================================
map .th : TOhtml<CR>
"======================================================================
"Shell Script Running
"======================================================================
au FileType sh map <F2> : !chmod +x %
au FileType sh map <F3> : !./%
"======================================================================
"C Compiler Mapping
"======================================================================
au FileType c set tabstop=4
au FileType c set noexpandtab
au FileType c set shiftwidth=4
au FileType c set softtabstop=4
au FileType c map <F2> : !gcc -W -Wall -o %< %
au FileType c map <F3> : !./%<
"======================================================================
"C++ Compiler Mapping
"======================================================================
au FileType cpp set tabstop=4
au FileType cpp set noexpandtab
au FileType cpp set shiftwidth=4
au FileType cpp set softtabstop=4
au FileType cpp map <F2> : !g++ -W -Wall -o %< %
au FileType cpp map <F3> : !./%<
"======================================================================
"Mono Compiler Mapping
"======================================================================
au FileType cs map <F2> : !mcs %
au FileType cs map <F3> : !mono %<.exe
"======================================================================
"Python Mapping
"======================================================================
au FileType python map <F2> : !python %
au FileType python set tabstop=8
au FileType python set shiftwidth=4
au FileType python set softtabstop=4
"======================================================================
"Javascript Mapping
"======================================================================
au FileType javascript map <F2> : !node %
au FileType javascript set tabstop=2
au FileType javascript set expandtab
au FileType javascript set shiftwidth=2
au FileType javascript set softtabstop=2
"======================================================================
"Java Compiler Mapping
"======================================================================
au FileType java map <F2> : !javac %
au FileType java map <F3> : !java %<
au FileType java map <F4> : !appletviewer %<
"======================================================================
"JSP -> Firefox Launch Mapping
"======================================================================
au FileType jsp map <F2> : !firefox http://localhost:8180/lecture/%
"======================================================================
"Objective C Compiler Mapping
"======================================================================
au FileType objc map <F2> : !gcc -Wall -o %< % -lobjc
au FileType objc map <F3> : !./%<
"======================================================================
"Perl excute Mapping
"======================================================================
au FileType perl map <F2> : !perl -w %
"======================================================================
"vimwiki Mapping
"======================================================================
au FileType vimwiki set textwidth=0
au FileType vimwiki set noexpandtab
au FileType vimwiki set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<
au FileType vimwiki set list
"======================================================================
"cscope settings
"======================================================================
set csprg=/usr/bin/cscope
set nocsverb
cs add /home/username/vim/linux-3.7.1/cscope.out
set csverb
set csto=0
set cst
"======================================================================
"man settings
"======================================================================
func! Man()
let sm = expand("<cword>")
exe "!man -S 2:3:4:5:6:7:8:9:tcl:n:l:p:o ".sm
endfunc
nmap ,ma :call Man()<cr><cr>
"======================================================================
"ctag shortcut mapping
"======================================================================
if version >= 500
func! Sts()
let st = expand("<cword>")
exe "sts ".st
endfunc
nmap ,st :call Sts()<cr>
func! Tj()
let st = expand("<cword>")
exe "tj ".st
endfunc
nmap ,tj :call Tj()<cr>
endif
"======================================================================
"cscope shortcut mapping
"======================================================================
func! Css()
let css = expand("<cword>")
new
exe "cs find s ".css
if getline(1) == ""
exe "q!"
endif
endfunc
nmap ,css :call Css()<cr>
func! Csc()
let csc = expand("<cword>")
new
exe "cs find c ".csc
if getline(1) == ""
exe "q!"
endif
endfunc
nmap ,csc :call Csc()<cr>
func! Csd()
let csd = expand("<cword>")
new
exe "cs find d ".csd
if getline(1) == ""
exe "q!"
endif
endfunc
nmap ,csd :call Csd()<cr>
func! Csg()
let csg = expand("<cword>")
new
exe "cs find g ".csg
if getline(1) == ""
exe "q!"
endif
endfunc
nmap ,csg :call Csg()<cr>

#vim 설정하기

##gvim의 폰트 설정하기

if has("gui_running")
   set guifont=나눔고딕코딩\ 11 
   "set guifont=monospace\ 10
   "set guifont=Monaco\ 11
endif

##화면의 크기 설정하기

gvim인 경우

if has("gui_running")
   set lines=52 columns=121                                                
endif

##colorschemem 설정하기 (테마 설정)

colorscheme twilight

##cscope 사용하기

###cscope 사용 준비

cscope는 ctags 만으로는 찾기 힘든 지역변수나 전역변수가 사용된 곳, 함수가 사용된 곳을 찾는데 사용할 수 있다.

mkcscope.sh 작성

#!/bin/sh
rm -rf cscope.files cscope.files

find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.hpp' -o -name '*.s' -o -name '*.S' \) -print > cscope.files

cscope -i cscope.files

위 스크립트의 설명: find 명령으로 현재 디렉토리 및 서브디렉토리에 대해 어셈블리 소스(*.s, *.S)와 C 소스파일, C++ 소스파일을 찾아 cscope.files 파일에 파일 리스트로 만든다.

그리고 cscope -i csope.files 명령으로 cscope.files에 기술된 파일에 대해서 cscope.out 심볼 데이터베이스 파일을 생성한다.

mkcscope.sh 실행

$ chmod 755 mkcscope.sh
$ mv mkcscope.sh /usr/local/bin

혹은

$ chmod 755 mkcscope.sh
$ mv mkcscope.sh ~/bin # 사용자 홈의 bin 디렉토리에 $PATH가 잡혀있을 경우

cscope.out 생성이 완료되면 <ctrl>+d로 빠져나옴

~/.vimrc에 csope를 사용하기 위한 설정을 함

"======================================================================
"cscope settings
"======================================================================
set csprg=/usr/bin/cscope
set nocsverb
cs add /home/username/vim/linux-3.7.1/cscope.out
set csverb
set csto=0
set cst

###cscope 사용방법

cscope의 명령 형식은 아래와 같다.

:cs find {질의종류} {심볼}

예)

:cs find s start_kernel

질의의 종류는 아래의 리스트와 같다.

  • 0 or s: Find this C symbol
  • 1 or g: Find this definition
  • 2 or d: Find functions called by this function
  • 3 or c: Find functions calling this function
  • 4 or t: Find assignments to
  • 6 or e: Find this egrep pattern
  • 7 or f: Find this file
  • 8 or i: Find this #including this file

###cscope를 편리하게 사용하기 위해 단축키 지정

아래 내용을 .vimrc에 추가한다.

func! Css()
	let css = expand("<cword>")
	new
	exe "cs find s ".css
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,css :call Css()<cr>

func! Csc()
	let csc = expand("<cword>")
	new
	exe "cs find c ".csc
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,csc :call Csc()<cr>

func! Csd()
	let csd = expand("<cword>")
	new
	exe "cs find d ".csd
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,csd :call Csd()<cr>

func! Csg()
	let csg = expand("<cword>")
	new
	exe "cs find g ".csg
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,csg :call Csg()<cr>

ctags 사용하기

ctags: 프로그램 소스코드에서 태그(전역변수 선언, 함수 정의, 매크로 선언)들의 데이터베이스(tags 파일)를 생성하는 유닉스 명령이다.

ctags의 설치 여부 확인

$ ctags --help

설치 되지 않았다면 설치

http://ctags.sourceforge.net

http://rpm.pbone.net

태그 데이터베이스 만들기

$ ctags -R

위 명령을 수행하면 tags 파일이 만들어짐

.vimrc에 설정할 내용

set tags=./tags,other/path/tags,another/path/tags

예)

set tags=./tags,./TAGS,tags,TAGS,../tags,../../tags,/usr/include/tags,/usr/local/include/tags

참고: janus의 기본 설정

set tags=./tags,./TAGS,tags,TAGS

참고: sublime text 2에서 ctags 패키지 컨트롤 플러그인은 .tags를 기본 파일명으로 사용한다. sublime text 2와 공유하기 위해서는 .tags을 추가해서 사용해 보았으나 vim에서 태그를 찾지 못하였다. 해결책으로 sublime text 2에서 만들 .tags 파일 만들고 ln -s .tags tags 명령을 수행하여 vim에서는 링크를 사용하도록 한다.

태그명령 요약

  • :ta [tag] or <Ctrl>+], :ts[tag] or :tj [tag]: 스택을 사용하여 [tag]로 점프
  • :po or <Ctrl>+t: 스택의 내용을 pop하고 그 위치로 점프
  • :sts [tag], :stj [tag]: 창을 수평 분할 하여 새로 생성된 창에 표시
  • :tn: tj, ts의 다음 태그로 점프
  • :tp: tj, ts의 이전 태그로 점프
  • 🇹🇷 tj, ts의 처음 태그로 점프
  • :tl: tj, ts의 마지막 태그로 점프
  • :pts [tag]: 창을 수평 분할 하여 새로 생성된 창에 표시. 커서는 현재 위치에 유지함.
  • :ptj [tag]: 미리보기 윈도우에 태그가 정의된 형식을 보여줌.
  • :ptn: ptj, pts의 다음 태그로 점프
  • :ptp: ptj, pts의 이전 태그로 점프
  • :ptr: ptj, pts의 처음 태그로 점프
  • :ptl: ptj, pts의 마지막 태그로 점프

태그로 바로 이동하여 vim 실행 하기

	$ vi -t start_kernel

####편리하게 사용하기 위한 단축키 지정

아래 내용을 .vimrc에 추가한다.

if version >= 500
func! Sts()
	let st = expand("<cword>")
	exe "sts ".st
endfunc
nmap ,st :call Sts()<cr>

func! Tj()
	let st = expand("<cword>")
	exe "tj ".st
endfunc
nmap ,tj :call Tj()<cr>
endif

###함수의 원형 간단 확인 단축키

표준모드에서 [i 키를 누르면 화면 하단에 함수의 원형을 확인할 수 있다.

###지역변수의 선언 부분으로 이동 단축키

표준모드에서 찾고자 하는 지역변수 위에 커서를 위치한 상태에서 gd 키를 입력하면 지역변수가 선언된 위치로 이동한다.

"======================================================================
"gVim settings
"======================================================================
"settings for fonts
if has("gui_running")
set guifont=나눔고딕코딩\ 11
"set guifont=monospace\ 10
"set guifont=Monaco\ 11
set lines=52 columns=121
endif
"Note!! This vimrc is early version of mine so is not useful
" I recommend using Janus
" and use common.vimrc, example.gvimrc.after and example.vimrc.after
"
"======================================================================
"WJ Choi <wjroseto@gmail.com>
"======================================================================
"status line in the bottom
set laststatus=2
set statusline=%<%F%h%m%r%h%w%y\ %{strftime(\"%Y/%m/%d-%H:%M\")}%=\ col:%c%V\ ascii:%b\ pos:%o\ lin:%l\,%L\ %P
"use vim's own function, no interoperability with vim
set nocp
"history of commands
set hi=1000
"use backspace
set bs=indent,eol,start
"show position of cursor
set ru
"position start of the line after move actions
set sol
"use user parenthesis finding
set mps+=<:>
"highlight searched word
set hls
"use smart uppercase/lower case
set scs
"open UTF-8, euc-kr hangul text file
if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
set encoding=utf-8
set fileencodings=utf-8,cp949
endif
"show line-number
set nu
"tab settings
set ts=4 "tabstop (size of tab)
set sts=4 "softtabstop (length of tab)
set sw=4 "shiftwidth (width of indentation tab)
"use Syntax Highlighting accroding to file type
syntax on
"indentation
set smartindent
set ai "autoindent
"c language indentation
set cindent
"setting for indentation when paste. toggle by using <Ins> key between paste mode and nopaste mode
set pastetoggle=<Ins>
"vim Colorscheme
set bg=dark
"color desert
"color motus
"======================================================================
"settings for folding
"======================================================================
"determine level of folding when reopen the file
"default is 0 and fold all
set fdl=1
"count of columns that shows the folding range
set fdc=1
"notify matching opening parenthesis as closing parenthesis is typed
set showmatch
"======================================================================
"gVim settings
"======================================================================
"settings for fonts
if has("gui_running")
" set guifont=DejaVu\ Sans\ Mono\ 11
" set guifont=monospace\ 11
" set guifont=DejaVu\ LGC\ Sans\ Mono\ 12
set guifont=Monaco\ 10
set guifont=나눔고딕코딩\ 11
set guifont=monospace\ 10
" set gfn=Fixedsys:h12:cHANGEUL
" set gfn=굴림체:h9:cHANGEUL
endif
"setting for mouse
if has("gui_running")
"mouse model
set mousem=popup
endif
"not display scrollbar
if has("gui_running")
set go-=l
set go-=L
set go-=r
set go-=R
set go-=b
endif
"hide toolbar
if has("gui_running")
set go-=T
endif
"set size of gVim
if has("gui_running")
set lines=50
set co=120
endif
"======================================================================
"Insert here the contents of common.vimrc
"======================================================================
"======================================================================
"Insert here the contents of common.vimrc
"======================================================================

#유용한 여러가지 기능

##모든 단축키 보기(매핑 리스트)

:map

##여러가지 변수 값을 출력하기

변수명 뒤에 ? 기호를 붙여서 내용을 출력할 수 있다.

:set filetype?
:set path?
:set tabstop?

##이전 위치로 커서를 이동

`.

##chage list간에 커서 이동

change list에서 N 만큼 더 오래된 위치로 커서를 이동

[N]g;

chnage list에서 N 만큼 더 새로운 위치로 커서를 이동 [n]g,

change list를 출력한다.

:changes

##jump list간에 커서 이동

jump list에서 N 만큼 더 오래된 위치로 커서를 이동

[N]<Ctrl>-O

jump list에서 N 만큼 더 새오룬 위치로 커서를 이동

[N]<Ctrl>-I

jump list를 출력한다

:ju[mps]

##줄 전체 이동

:m 명령은 원하는 줄을 이동시킨다.

  • :m +1: 현재 커서의 줄을 1줄 아래로 이동
  • m -2: 2 현재 커서의 줄을 1줄(2-1줄) 위로 이동
  • m 3: 현재 커서의 줄을 3행 다음으로 이동. + 혹은 - 기호 없이 사용하면 문서내의 특정 줄로 이동한다.

v 혹은 <Shift>+v(한 줄 선택)로 여러 줄을 선택한 후 :m 명령을 내리면 여러 줄을 한번에 이동 시킬 수 있다.

##textwidth를 지정하여 자동으로 개행 문자 삽입 on/off

textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가면 자동으로 개행문자를 삽입한다.

:set textwidth=0
:set wrapmargin=0

##공백 문자의 표시 on/off

:set list
:set nolist

공백 문자를 표시할 문자를 지정하려면

:set listchars=...
:set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

##행번호 on/off

:set nu[mber]
:set nonu[mber]

##취소하기

u

##이전작업 다시 실행

.

Tip: "1pu.u.u. : 레지스터에 있는 최근 내용부터 하나씩 되돌리면서 붙여넣는다.

설명: "1p는 1번 레지스터의 내용을 붙여넣는다. u는 되돌리기 명령이다. 그리고 . 명령은 바로 이전에 했던 작업을 반복하는 명령이다.

##파일탐색

  • explorer 플러그인 실행: :20vs . vs는 vertical split이고 20은 창의 크기를 의미한다.
  • NERDTree 플러그인 실행: :NERDTree

##빠른 괄호 이동

여는 괄호 혹은 닫는 괄호에 커서를 놓고 % 키를 누르면 괄호 쌍으로 이동한다.

##빠른 탐색

찾는 단어에 커서를 두고 * 키나 # 키를 누르면 커서에 위치한 단어와 같은 문자열을 찾아서 다음위치 혹은 이전 위치로 이동한다. 이는 /[찾으려는 문자열] 혹은 ?[찾으려는 문자열] 명령과 같은 기능을 한다.

##블록 선택

  • '{}' 영역을 블록 선택: 표준모드에서 {위에 커서를 위치 시킨 후 v]} 키를 누른다.

##폴딩 기능 이용하기

  • 블록을 폴딩하기: 블록으로 영역을 선택을 한 후 zf 키를 누른다.
  • {} 블록을 폴딩하기: 표준모드에서 {위에 커서를 위치 시킨 후 v]}zf 키를 누른다. v]}은 괄호 쌍에 대한 블록을 지정하는 기능이다.
  • 언폴딩: 접힌 부분에서 ?? 혹은 zo를 누른다.

~/.vimrc에서 단축키 설정

"folding
map <F1> v]}zf
"unfolding
map <F2> zo

##함수의 원형 간단 확인 단축키

see ctags 사용하기: ctags.md

##지역변수의 선언 부분으로 이동 단축키

see ctags 사용하기: ctags.md

##(여러 행에) 탭을 일괄적으로 삽입 제거 하기

[N]>>

또는

[N]<<

블록을 지정하고 > 혹은 < 키를 쳐도 위와 같게 작동한다.

##탭 사이즈 조정하기

  • ts(tabstop): 문서 내의 '\t' 문자를 몇 칸으로 보여줄지를 정한다--number of spaces a <Tab> in the text stands for

    :set ts=8

  • sw(shiftwidth): >> 혹은 << 키로 탭 사이즈를 조절할 때, 자동 줄 맞추기시 들여쓰기 시 사용되는 칸 수이다--number of spaces used for each step of (auto)indent

    :set sw=2

  • sts(softtabstop): Tab 키를 눌렀을 때 표시되는 간격을 정한다--if non-zero, number of spaces to insert for a

    :set sts=0

  • et(expandtab): 탭키를 눌렀을 때 스페이스로 확장할 지 아니면 '\t'로 확장할 지를 결정--expand to spaces in Insert mode

    :set noet :set et

##소스 정렬 하기

###블록의 소스 정렬

블록을 지정한 후 = 키를 누른다.

###블록없이 소스 전체를 정렬

gg=G

##^M 문자: Window 시스템의 개행문자

윈도우 시스템의 개행문자(\r\n)를 Unix형식(\n)으로 변경하기

아래 두 가지 방법 중 하나를 사용함

###fileformat변경

:set fileformat==dos

###치환명령

:%s/^M//g

여기서 ^M을 직접입력하는 것이 아니라 <Ctrl>+v<Enter>키를 누른다.

참고:

  • ^[ : <Ctrl>+v<Esc>
  • ^[[11~ : <Ctrl>+v<F1>
  • ^[[12~ : <Ctrl>+v<F2>

##현재 커서 위치의 단어를 명령 창 혹은 내장 스크립트에서 사용

###명령창

  • <Ctrl>+R <Ctrl>+W: 현재 커서 위치의 단어를 명령창에 넣는다. 도움말 :help c_CTRL-R
  • nmap: 단축키 설정 예: nmap ,st :call Sts()<cr>

###내장 스크립트 함수

  • <cword>: 현재 커서 위치의 단어

  • expand("<cword>"): ?

##파일비교

명령창에서

$ vimdiff copying copying.org

혹은 vim내에서 쉘명령 수행을 통해 meld등을 수행한다.

##커서 위치의 파일 열기

우선 vim이 파일을 열수 있는 폴더의 위치를 path 변수에 지정해야한다. .vimrc에 지정한다.

set path=/usr/local/lib/node\_modules:/usr/include:~/projects/example1

vim 내에서 열려는 파일명이 있는 곳에 커서를 위치시킨 후 <Ctrl>+wf를 입력하면 수평 분할이 되면서 파일이 열린다.

##단어자동완성

<Ctrl>+p: 커서의 위치에서 위로 검색, 코딩을 할 때 유요함. <Ctrl>+n: 커서의 위치에서 아래로 검색

##man page에 연결하기

vim에서 메뉴얼을 보는 키는 K이다.

man page에 연결하기위해서 .vimrc에 다음 내용을 추가한다.

func! Man()
	let sm = expand("<cword>")
	exe "!man -S 2:3:4:5:6:7:8:9:tcl:n:l:p:o ".sm
endfunc
nmap ,ma :call Man()<cr><cr>

위 설정이 잘 작동하지 않을 겨우 아래 명령으로 바꾸어 본다.

exe "!man -S ko:2:3:4:5:6:7:8 ".sm

위의 man옵션에서 1번이 빠진이유는 1번 디렉토리는 shell 명령에 대한 내용이 들어 있는 디렉토리이다. shell 명령에 대한 man을 누락시켜서 C 함수의 메뉴얼을 우선으로 보여준다.

예를 들면 printf는 shell명령도 있고 C 함수로도 있다. K 키를 누르면 /usr/bin/printf 며령의 메뉴얼을 보여주고, ,ma를 누르면 C 함수 printf에 대한 메뉴얼을 보여준다.

#vim plugin-내장스크립트

vim 플러그인은 확장자가 *.vim으로 끝난다. vim이 실행될 때 전역 플러그인 디렉토리에 있는 내장 스크립트를 읽어 들인 후, 사용자 홈 디렉토리의 플러그인 디렉토리를 순서대로 읽어서 플러그인을 기능을 준비한다.

  • 전역 플러그인 디렉토리: /usr/share/vim/vim[version]/plugin(페도라)
  • 사용자 홈 디렉토리의 플러그인 디렉토리: ~/.vim/plugin

다른 사람이 작성한 플러그인 내려받기

http://www.vim.org/scripts

위 URL에서 .vim 스크립트를 내려받아서 위의 전역 플러그인 혹은 사용자 홈 플러그인 디렉토리에 복사한 후 vim을 실행하여 사용한다.

플러그인 예

  • :Calendar: calendar.vim
  • :BufExplorer: bufexplorer.zip(bufexplorer.vim)
  • :Tlist: taglist.vim
  • :SpellCheck: vimspell.vim
  • EnhCommentify: 여러 라인의 주석 처리
  • xmledit: html, xml, sgml 문서 작성
  • cvscommand: cvs 멸령을 내릴 수 있음
  • DrawIt: 그림을 그릴 수 있는 플러그인

설치된 플러그인에 대한 명령을 확인 방법

:command

#참고문헌

  • 유닉스 리눅스 프로그래밍 필수 유틸리티(개정판), 백창우, 한빛미디어
vim 에디터 사용하기
==============
## vim의 여러가지 기능
###파일비교
$ vimdiff copying copying.org
혹은 vim내에서 쉘명령 수행을 통해 meld등을 수행한다.
###커서 위치의 파일 열기
우선 `vim`이 파일을 열수 있는 폴더의 위치를 `path` 변수에 지정해야한다.
`.vimrc`에 지정해 준다.
set
`vim` 내에서 열려는 파일명이 있는 곳에 커서를 위치시킨 후 <Ctrl>+wf를 입력하면 수평 분할이 되면서 파일이 열린다.

vim 에디터 사용하기 ==============

## vim의 여러가지 기능 ###파일비교

명령창에서

$ vimdiff copying copying.org

혹은 vim내에서 쉘명령 수행을 통해 meld등을 수행한다.

###커서 위치의 파일 열기

우선 `vim`이 파일을 열수 있는 폴더의 위치를 `path` 변수에 지정해야한다. `.vimrc`에 지정해 준다.

set path=/usr/local/lib/node\_modules:/usr/include:~/projects/example1

`vim` 내에서 열려는 파일명이 있는 곳에 커서를 위치시킨 후 <Ctrl>+wf를 입력하면 수평 분할이 되면서 파일이 열린다.

##.vimrc 예

###샘플 .vimrc

"===========default setting
set cindent
set smartindent
set autoindent
set nowrap
set ff=unix
set bg=dark
set ruler
"specify folders to be searched
set path=/root/work/include,/usr/include,/usr/local/include,/usr/src/include

"===========key mapping
"folding
map <F1> v]}zf
"unfolding
map <F2> zo
"Taglist plugin
map <F3> :Tlist<cr><C-W><C-W>
"Buffer Explorer plugin
map <F4> :BufExplorer<cr>
map <PageUp> <C-U><C-U>
map <PageDown> <C-D><C-D>

"===========indent on/off
map ,noi :set noai<CR>:set nocindent<CR>:set nosmartindent<CR>
map ,sei :set ai<CR>:set cindent<CR>:set smartindent<CR>

"===========moving between file buffers
map ,1 :b!1<CR>
map ,2 :b!2<CR>
map ,3 :b!3<CR>
map ,4 :b!4<CR>
map ,5 :b!5<CR>
map ,6 :b!6<CR>
map ,7 :b!7<CR>
map ,8 :b!8<CR>
map ,9 :b!9<CR>
map ,0 :b!10<CR>
map ,x :bn!<CR>       "next buffer
map ,z :bp!<CR>       "previous buffer
map ,w :bw<CR>        "close current file buffer

"===========ctags setting
set tags=./tags,./TAGS,tags,TAGS,../tags,../../tags,/usr/include/tags,/usr/local/include/tags

if version >= 500
func! Sts()
	let st = expand("<cword>")
	exe "sts ".st
endfunc
nmap ,st :call Sts()<cr>

func! Tj()
	let st = expand("<cword>")
	exe "tj ".st
endfunc
nmap ,tj :call Tj()<cr>
endif

"===========cscope setting
set csprg=/usr/bin/cscope
set nocsverb
cs add /home/username/vim/linux-3.7.1/cscope.out
set csverb
set csto=0
set cst

func! Css()
	let css = expand("<cword>")
	new
	exe "cs find s ".css
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,css :call Css()<cr>

func! Csc()
	let csc = expand("<cword>")
	new
	exe "cs find c ".csc
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,csc :call Csc()<cr>

func! Csd()
	let csd = expand("<cword>")
	new
	exe "cs find d ".csd
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,csd :call Csd()<cr>

func! Csg()
	let csg = expand("<cword>")
	new
	exe "cs find g ".csg
	if getline(1) == ""
		exe "q!"
	endif
endfunc
nmap ,csg :call Csg()<cr>

"===========man page setting
func! Man()
	let sm = expand("<cword>")
	exe "!man -S 2:3:4:5:6:7:8:9:tcl:n:l:p:o ".sm
endfunc
nmap ,ma :call Man()<cr><cr>

"===========executing shell script
func! EEdic()
	let sed = expand("<cword>")
	new
	exec "r! eedic.sh ".sed
	set nomod wrap
endfunc
nmap ,ed :call EEdic()<cr>gg

###샘플 shell 스크립트: eedic.sh

#!/bin/sh

w3m -dump \
"http://kr.dictionary.search.yahoo.com/search/dictionaryp?p=$1&subtype=eng" \
2> /dev/null \
| awk 'BEGIN { flg = 0 } \
/단어 더 보기/ || /숙어/ || /예문/ { flg = 0 } \
{ \
	if (flg) print $0 \
}/단어 \(영한\)/ { flg = 1 }' \
| sed 's/\[.*\]//g' | sed 's/?//g' | sed 's/단어장에 추가//g' | sed 's/단어장에//g' \
| sed -e 's/^추가//g' | sed -e 's/^[[:space:]]*([[:space:]]*$//g' | sed 's/ㅁ//g' \
| sed 's/()//g' | sed -e 's/^[[:space:]]*)//g' | sed 's/<L//g' | sed -e 's/[<>]//g' \
| sed -e 's/[[:space:]]*$//g' | sed '/^$/d'
echo ""

##janus

janus는 Vim, GVim, MacVim에 대한 플러그인, 매핑 설정에 대한 배포버전이다.

url: https://github.com/carlhuda/janus

###설치방법

prerequisites

$ sudo apt-get install ack ctags git ruby rake curl

installing

$ curl -Lo- https://bit.ly/janus-bootstrap | bash
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment