Skip to content

Instantly share code, notes, and snippets.

@onmoving
Last active January 3, 2019 02:36
Show Gist options
  • Save onmoving/4544537 to your computer and use it in GitHub Desktop.
Save onmoving/4544537 to your computer and use it in GitHub Desktop.

Revisions

  1. @wjroseto wjroseto revised this gist Feb 8, 2013. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions basic.md
    Original file line number Diff line number Diff line change
    @@ -188,8 +188,8 @@ g의 의미는 행의 전체범위를 지정한다. g를 사용하지 않으면

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

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

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

  2. @wjroseto wjroseto revised this gist Feb 8, 2013. 1 changed file with 5 additions and 0 deletions.
    5 changes: 5 additions & 0 deletions basic.md
    Original file line number Diff line number Diff line change
    @@ -188,6 +188,11 @@ g의 의미는 행의 전체범위를 지정한다. g를 사용하지 않으면

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

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

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

    "======================================================================
    "toggle concatenation of opening brace position
    "======================================================================
  3. @wjroseto wjroseto revised this gist Feb 8, 2013. 2 changed files with 17 additions and 1 deletion.
    13 changes: 12 additions & 1 deletion basic.md
    Original file line number Diff line number Diff line change
    @@ -177,12 +177,23 @@ g의 의미는 행의 전체범위를 지정한다. 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로 교체
    * `-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계열 소스코드에서 여는 중괄호(`{`)의 위치를 조정하기

    "======================================================================
    "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
    5 changes: 5 additions & 0 deletions common.vimrc
    Original file line number Diff line number Diff line change
    @@ -20,6 +20,11 @@ colorscheme twilight
    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
  4. @wjroseto wjroseto revised this gist Feb 5, 2013. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions functions_of_vim.md
    Original file line number Diff line number Diff line change
    @@ -193,13 +193,13 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가

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

    ##명령창
    ###명령창

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


    ##내장 스크립트 함수
    ###내장 스크립트 함수

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

  5. @wjroseto wjroseto revised this gist Feb 5, 2013. 1 changed file with 24 additions and 22 deletions.
    46 changes: 24 additions & 22 deletions functions_of_vim.md
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    ##유용한 여러가지 기능
    #유용한 여러가지 기능

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

    @@ -62,7 +62,7 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가
    :set textwidth=0
    :set wrapmargin=0

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

    :set list
    :set nolist
    @@ -72,42 +72,42 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가
    :set listchars=...
    :set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:<

    ###행번호 on/off
    ##행번호 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]}`은 괄호 쌍에 대한 블록을 지정하는 기능이다.
    @@ -121,11 +121,11 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가
    map <F2> zo


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

    *see* ctags 사용하기: [ctags.md](#file-ctags-md)

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

    *see* ctags 사용하기: [ctags.md](#file-ctags-md)

    @@ -160,7 +160,7 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가
    `:set et`


    ###소스 정렬 하기
    ##소스 정렬 하기

    ###블록의 소스 정렬

    @@ -170,15 +170,17 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가

    gg=G

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

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

    ####fileformat변경
    아래 두 가지 방법 중 하나를 사용함

    ###fileformat변경

    :set fileformat==dos

    ####치환명령
    ###치환명령

    :%s/^M//g

    @@ -189,21 +191,21 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가
    * `^[[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>")`: ?

    ###파일비교
    ##파일비교

    명령창에서

    @@ -214,7 +216,7 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가

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

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

    우선 `vim`이 파일을 열수 있는 폴더의 위치를 `path` 변수에 지정해야한다.
    `.vimrc`에 지정한다.
    @@ -225,7 +227,7 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가

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

    ###단어자동완성
    ##단어자동완성

    `<Ctrl>+p`: 커서의 위치에서 위로 검색, 코딩을 할 때 유요함.
    `<Ctrl>+n`: 커서의 위치에서 아래로 검색
  6. @wjroseto wjroseto revised this gist Feb 5, 2013. 1 changed file with 11 additions and 2 deletions.
    13 changes: 11 additions & 2 deletions advanced.md
    Original file line number Diff line number Diff line change
    @@ -1,10 +1,19 @@
    #좀더 발전된 사용법

    ##정규 표현식의 사용

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

    `\<`, `\>` 사용예:

  7. @wjroseto wjroseto revised this gist Feb 5, 2013. 1 changed file with 107 additions and 13 deletions.
    120 changes: 107 additions & 13 deletions basic.md
    Original file line number Diff line number Diff line change
    @@ -8,31 +8,83 @@

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

    TODO
    * `: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

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

    ##이동

    * H: 커서를 화면의 맨 위로 이동
    * M: 커서를 화면의 중앙으로 이동
    * L: 커서를 화면 최하단으로 이동

    TODO
    * `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번째 행으로 이동

    ##편집

    ###삭제

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

    ###복사와 붙이기

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

    ###잘라내기

    @@ -83,11 +135,53 @@ TODO

    ##문자열 탐색

    TODO
    아래로 탐색

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

    위로 탐색

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

    ##문자열 치환

    TODO
    :[범위]/[매칭 문자열 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`와 동일

    ##vim 실행 옵션

  8. @wjroseto wjroseto revised this gist Feb 4, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion cscope.md
    Original file line number Diff line number Diff line change
    @@ -28,7 +28,7 @@ mkcscope.sh 실행
    $ chmod 755 mkcscope.sh
    $ mv mkcscope.sh ~/bin # 사용자 홈의 bin 디렉토리에 $PATH가 잡혀있을 경우

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

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

  9. @wjroseto wjroseto revised this gist Feb 4, 2013. 2 changed files with 13 additions and 13 deletions.
    2 changes: 1 addition & 1 deletion configuring-vim.md
    Original file line number Diff line number Diff line change
    @@ -14,7 +14,7 @@
    gvim인 경우

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

    ##colorschemem 설정하기 (테마 설정)
    24 changes: 12 additions & 12 deletions example.gvimrc.after
    Original file line number Diff line number Diff line change
    @@ -1,12 +1,12 @@
    "======================================================================
    "gVim settings
    "======================================================================
    "settings for fonts
    if has("gui_running")
    set guifont=나눔고딕코딩\ 11
    "set guifont=monospace\ 10
    "set guifont=Monaco\ 11
    set lines=52 columns=105
    endif
    "======================================================================
    "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

  10. @wjroseto wjroseto revised this gist Feb 4, 2013. 1 changed file with 8 additions and 3 deletions.
    11 changes: 8 additions & 3 deletions configuring-vim.md
    Original file line number Diff line number Diff line change
    @@ -1,14 +1,19 @@
    #vim 설정하기

    ##화면의 크기 설정하기

    gvim인 경우
    ##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=105
    endif

  11. @wjroseto wjroseto revised this gist Feb 4, 2013. 2 changed files with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions _using_vim.md
    Original file line number Diff line number Diff line change
    @@ -6,6 +6,7 @@

    * 기본 사용법: [basic.md](#file-basic-md)
    * 좀더 발전된 사용법: [advanced.md](#file-advanced-md)
    * 환경 설정하기: [configuring-vim.md](#file-configuring-vim-md)

    ##tip & tech

    File renamed without changes.
  12. @wjroseto wjroseto revised this gist Feb 4, 2013. 3 changed files with 31 additions and 2 deletions.
    9 changes: 9 additions & 0 deletions common.vimrc
    Original file line number Diff line number Diff line change
    @@ -5,6 +5,15 @@ 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
    "======================================================================
    18 changes: 18 additions & 0 deletions congiure-vim.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    #vim 설정하기

    ##화면의 크기 설정하기

    gvim인 경우

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

    set lines=52 columns=105
    endif

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

    colorscheme twilight

    6 changes: 4 additions & 2 deletions example.gvimrc.after
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,9 @@
    "settings for fonts
    if has("gui_running")
    set guifont=나눔고딕코딩\ 11
    set guifont=monospace\ 10
    set guifont=Monaco\ 11
    "set guifont=monospace\ 10
    "set guifont=Monaco\ 11

    set lines=52 columns=105
    endif

  13. @wjroseto wjroseto revised this gist Feb 3, 2013. 3 changed files with 122 additions and 27 deletions.
    128 changes: 122 additions & 6 deletions advanced.md
    Original file line number Diff line number Diff line change
    @@ -1,16 +1,132 @@
    #좀더 발전된 사용법

    ##정규 표현식
    ##정규 표현식의 사용
    * `\<`: 단어의 시작
    * `\>`: 단어의 끝
    * `\{min,max\}`: min이상 max이하 반복됨
    * `\|` or의 의미

    TODO
    `\<`, `\>` 사용예:

    ##정규 표현식을 사용한 탐색
    \<ko
    \<정규
    ea\>
    현식\>

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

    ##정규 표현식을 사용한 치환
    [A-z]\+[0-9]\{3,4\}

    TODO
    `\|` 사용예: 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

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

    ##여러파일 편집하기

    19 changes: 0 additions & 19 deletions functions_of_vim.md
    Original file line number Diff line number Diff line change
    @@ -230,22 +230,3 @@ textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가
    `<Ctrl>+p`: 커서의 위치에서 위로 검색, 코딩을 할 때 유요함.
    `<Ctrl>+n`: 커서의 위치에서 아래로 검색

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


    aaa=YES
    aaa=NO

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

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

    치환명령

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

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

    2 changes: 0 additions & 2 deletions vimrc_janus.md
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,5 @@
    ##.vimrc 예

    TODO: 예제로 사용할 .vimrc 설정 내용 정리

    ###샘플 .vimrc

    "===========default setting
  14. @wjroseto wjroseto revised this gist Feb 2, 2013. 1 changed file with 31 additions and 0 deletions.
    31 changes: 31 additions & 0 deletions functions_of_vim.md
    Original file line number Diff line number Diff line change
    @@ -14,6 +14,37 @@
    :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` 명령은 원하는 줄을 이동시킨다.
  15. @wjroseto wjroseto revised this gist Feb 2, 2013. 2 changed files with 89 additions and 3 deletions.
    88 changes: 85 additions & 3 deletions advanced.md
    Original file line number Diff line number Diff line change
    @@ -14,15 +14,97 @@ TODO

    ##여러파일 편집하기

    TODO
    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

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

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

    "a3yy

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

    "ap

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

    "a5p

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

    ##매크로 사용하기

    TODO
    매크로를 기록하는 요령은 `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

    ##다중 창 사용하기

    4 changes: 4 additions & 0 deletions functions_of_vim.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,9 @@
    ##유용한 여러가지 기능

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

    :map

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

    변수명 뒤에 `?` 기호를 붙여서 내용을 출력할 수 있다.
  16. @wjroseto wjroseto revised this gist Feb 1, 2013. 1 changed file with 15 additions and 9 deletions.
    24 changes: 15 additions & 9 deletions common.vimrc
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,10 @@
    "======================================================================
    "general Settings
    "======================================================================
    set tabstop=4
    set shiftwidth=0
    set softtabstop=0

    "======================================================================
    "Override setting according to file extention
    "======================================================================
    @@ -109,6 +116,14 @@ au FileType objc map <F3> : !./%<
    "======================================================================
    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
    "======================================================================
    @@ -187,12 +202,3 @@ func! Csg()
    endif
    endfunc
    nmap ,csg :call Csg()<cr>
    "======================================================================
    "for vimwiki
    "======================================================================
    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

  17. @wjroseto wjroseto revised this gist Feb 1, 2013. 3 changed files with 71 additions and 4 deletions.
    67 changes: 67 additions & 0 deletions common.vimrc
    Original file line number Diff line number Diff line change
    @@ -128,4 +128,71 @@ func! Man()
    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>
    "======================================================================
    "for vimwiki
    "======================================================================
    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

    4 changes: 0 additions & 4 deletions example.gvimrc.after
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,3 @@ if has("gui_running")
    set guifont=Monaco\ 11
    endif

    "======================================================================
    "Insert here the contents of common.vimrc
    "======================================================================

    4 changes: 4 additions & 0 deletions example.vimrc
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,7 @@
    "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 <[email protected]>
    "======================================================================
  18. @wjroseto wjroseto revised this gist Feb 1, 2013. 2 changed files with 43 additions and 10 deletions.
    1 change: 1 addition & 0 deletions basic.md
    Original file line number Diff line number Diff line change
    @@ -59,6 +59,7 @@ TODO
    블록 지정하기

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

    블록 지정 후 사용할 수 있는 기능
    52 changes: 42 additions & 10 deletions functions_of_vim.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,47 @@
    ##유용한 여러가지 기능

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

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


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

    ##줄 전체 이동

    `: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`
    @@ -148,16 +190,6 @@

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

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

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


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

    ###단어자동완성

    `<Ctrl>+p`: 커서의 위치에서 위로 검색, 코딩을 할 때 유요함.
  19. @wjroseto wjroseto revised this gist Feb 1, 2013. 1 changed file with 41 additions and 1 deletion.
    42 changes: 41 additions & 1 deletion advanced.md
    Original file line number Diff line number Diff line change
    @@ -26,7 +26,47 @@ TODO

    ##다중 창 사용하기

    TODO
    ### 창생성

    * `<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칸 만큼 증가(수직 창에만 적용됨)

    ##마킹 사용하기

  20. @wjroseto wjroseto revised this gist Feb 1, 2013. 1 changed file with 24 additions and 1 deletion.
    25 changes: 24 additions & 1 deletion advanced.md
    Original file line number Diff line number Diff line change
    @@ -30,7 +30,30 @@ TODO

    ##마킹 사용하기

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

    마킹의 종류는 세 가지이다

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

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

    :marks


    마킹 관련 명령 요약

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


    ##셸 명령 수행하기

  21. @wjroseto wjroseto revised this gist Jan 31, 2013. 1 changed file with 15 additions and 1 deletion.
    16 changes: 15 additions & 1 deletion advanced.md
    Original file line number Diff line number Diff line change
    @@ -34,6 +34,20 @@ TODO

    ##셸 명령 수행하기

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

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

    :r ![명령]
    :r !ls

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

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




  22. @wjroseto wjroseto revised this gist Jan 30, 2013. 5 changed files with 187 additions and 4 deletions.
    10 changes: 7 additions & 3 deletions _using_vim.md
    Original file line number Diff line number Diff line change
    @@ -2,22 +2,26 @@

    ## 목차

    ##사용하기

    ###tip & tech
    * 기본 사용법: [basic.md](#file-basic-md)
    * 좀더 발전된 사용법: [advanced.md](#file-advanced-md)

    ##tip & tech

    * ctags 사용하기: [ctags.md](#file-ctags-md)
    * cscope 사용하기: [cscope.md](#file-cscope-md)
    * man page에 연결하기: [man_page.md](#file-man_page-md)
    * vim plugin-내장스크립트[plugins.md](#file-plugins-md)
    * .vimrc & janus 사용하기: [vimrc_janus.md](#file-vimrc_janus-md)
    * vim의 여러가지 기능: [functions_of_vim.md](#file-functions_of_vim-md)
    * 유용한 여러가지 기능: [functions_of_vim.md](#file-functions_of_vim-md)
    * [sample-copying](#file-sample-copying)
    * [sample-copying.org](#file-sample-copying-org)
    * [references](#file-references-md)

    ---

    ###my .vimrc
    ##my .vimrc

    * 샘플 .vimrc: [example.vimrc](#file-example-vimrc)
    * 공통 내용: [common.vimrc](#file-common-vimrc)
    39 changes: 39 additions & 0 deletions advanced.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    #좀더 발전된 사용법

    ##정규 표현식

    TODO

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

    TODO

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

    TODO

    ##여러파일 편집하기

    TODO

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

    TODO

    ##매크로 사용하기

    TODO

    ##다중 창 사용하기

    TODO

    ##마킹 사용하기

    TODO

    ##셸 명령 수행하기

    TODO


    107 changes: 107 additions & 0 deletions basic.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,107 @@
    #기본사용법

    ##세가지 모드

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

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

    TODO

    ##입력

    a A i I o O s cc

    TODO

    ##이동

    * H: 커서를 화면의 맨 위로 이동
    * M: 커서를 화면의 중앙으로 이동
    * L: 커서를 화면 최하단으로 이동

    TODO

    ##편집

    ###삭제

    TODO

    ###복사와 붙이기

    TODO

    ###잘라내기

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

    레지스터 설명

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

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

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

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

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

    ###블록지정

    블록 지정하기

    * `v` 누른 후 `이동키`: 일반적인 블록 지정
    * `<Ctrl> + v` 누른 후 `이동키`: 사각형 블록 지정

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

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

    ##되돌리기와 되살리기

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

    ##문자열 탐색

    TODO

    ##문자열 치환

    TODO

    ##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를 사용해야 함

    14 changes: 13 additions & 1 deletion functions_of_vim.md
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,16 @@
    ##vim의 여러가지 기능
    ##유용한 여러가지 기능

    ###취소하기

    `u`

    ###이전작업 다시 실행

    `.`

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

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

    ###파일탐색

    21 changes: 21 additions & 0 deletions plugins.md
    Original file line number Diff line number Diff line change
    @@ -5,3 +5,24 @@ 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

  23. @wjroseto wjroseto revised this gist Jan 30, 2013. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions ctags.md
    Original file line number Diff line number Diff line change
    @@ -35,8 +35,8 @@ http://rpm.pbone.net

    태그명령 요약

    * :ta [tag] or <Ctrl>+], :ts[tag] or :tj [tag]: 스택을 사용하여 [tag]로 점프
    * :po or <Ctrl>+t: 스택의 내용을 pop하고 그 위치로 점프
    * :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의 이전 태그로 점프
  24. @wjroseto wjroseto revised this gist Jan 30, 2013. 4 changed files with 63 additions and 5 deletions.
    1 change: 1 addition & 0 deletions _using_vim.md
    Original file line number Diff line number Diff line change
    @@ -7,6 +7,7 @@

    * ctags 사용하기: [ctags.md](#file-ctags-md)
    * cscope 사용하기: [cscope.md](#file-cscope-md)
    * man page에 연결하기: [man_page.md](#file-man_page-md)
    * vim plugin-내장스크립트[plugins.md](#file-plugins-md)
    * .vimrc & janus 사용하기: [vimrc_janus.md](#file-vimrc_janus-md)
    * vim의 여러가지 기능: [functions_of_vim.md](#file-functions_of_vim-md)
    11 changes: 11 additions & 0 deletions common.vimrc
    Original file line number Diff line number Diff line change
    @@ -118,3 +118,14 @@ 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>

    20 changes: 20 additions & 0 deletions man_page.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,20 @@
    ##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에 대한 메뉴얼을 보여준다.

    36 changes: 31 additions & 5 deletions vimrc_janus.md
    Original file line number Diff line number Diff line change
    @@ -2,7 +2,7 @@

    TODO: 예제로 사용할 .vimrc 설정 내용 정리

    샘플 .vimrc
    ###샘플 .vimrc

    "===========default setting
    set cindent
    @@ -112,12 +112,38 @@ TODO: 예제로 사용할 .vimrc 설정 내용 정리
    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
  25. @wjroseto wjroseto revised this gist Jan 30, 2013. 4 changed files with 132 additions and 8 deletions.
    2 changes: 1 addition & 1 deletion common.vimrc
    Original file line number Diff line number Diff line change
    @@ -114,7 +114,7 @@ au FileType perl map <F2> : !perl -w %
    "======================================================================
    set csprg=/usr/bin/cscope
    set nocsverb
    cs add /home/jin/jin.study/vim/linux-3.7.1/cscope.out
    cs add /home/username/vim/linux-3.7.1/cscope.out
    set csverb
    set csto=0
    set cst
    86 changes: 82 additions & 4 deletions cscope.md
    Original file line number Diff line number Diff line change
    @@ -1,19 +1,33 @@
    ##cscope 사용하기

    ###cscope 사용 준비

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

    mkcscope.sh 작성

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

    find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' \) -print > 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를 사용하기 위한 설정을 함
    @@ -23,9 +37,73 @@ cscope.out 생성이 완료되면 <ctrl>+d로 빠져나옴
    "======================================================================
    set csprg=/usr/bin/cscope
    set nocsverb
    cs add /home/jin/jin.study/vim/linux-3.7.1/cscope.out
    cs add /home/username/vim/linux-3.7.1/cscope.out
    set csverb
    set csto=0
    set cst
    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>

    6 changes: 3 additions & 3 deletions ctags.md
    Original file line number Diff line number Diff line change
    @@ -20,7 +20,7 @@ http://rpm.pbone.net

    `.vimrc`에 설정할 내용

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

    예)

    @@ -29,7 +29,7 @@ http://rpm.pbone.net

    *참고:* janus의 기본 설정

    tags=./tags,./TAGS,tags,TAGS
    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에서는 링크를 사용하도록 한다.

    @@ -53,7 +53,7 @@ http://rpm.pbone.net

    $ vi -t start_kernel

    ####편리하게 사용하기 위한 내장 스크립트 작성
    ####편리하게 사용하기 위한 단축키 지정

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

    46 changes: 46 additions & 0 deletions vimrc_janus.md
    Original file line number Diff line number Diff line change
    @@ -64,6 +64,52 @@ TODO: 예제로 사용할 .vimrc 설정 내용 정리
    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

  26. @wjroseto wjroseto revised this gist Jan 30, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ctags.md
    Original file line number Diff line number Diff line change
    @@ -31,7 +31,7 @@ http://rpm.pbone.net

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

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

    태그명령 요약

  27. @wjroseto wjroseto revised this gist Jan 30, 2013. 3 changed files with 3 additions and 8 deletions.
    5 changes: 0 additions & 5 deletions common.vimrc
    Original file line number Diff line number Diff line change
    @@ -1,8 +1,3 @@
    "======================================================================
    "ctags settings
    "======================================================================
    set tags=./tags,./TAGS,tags,TAGS,./.tags

    "======================================================================
    "Override setting according to file extention
    "======================================================================
    4 changes: 2 additions & 2 deletions ctags.md
    Original file line number Diff line number Diff line change
    @@ -24,14 +24,14 @@ http://rpm.pbone.net

    예)

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


    *참고:* janus의 기본 설정

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

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

    태그명령 요약

    2 changes: 1 addition & 1 deletion vimrc_janus.md
    Original file line number Diff line number Diff line change
    @@ -47,7 +47,7 @@ TODO: 예제로 사용할 .vimrc 설정 내용 정리
    map ,w :bw<CR> "close current file buffer

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

    if version >= 500
    func! Sts()
  28. @wjroseto wjroseto revised this gist Jan 30, 2013. 3 changed files with 10 additions and 4 deletions.
    5 changes: 5 additions & 0 deletions common.vimrc
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,8 @@
    "======================================================================
    "ctags settings
    "======================================================================
    set tags=./tags,./TAGS,tags,TAGS,./.tags

    "======================================================================
    "Override setting according to file extention
    "======================================================================
    7 changes: 4 additions & 3 deletions ctags.md
    Original file line number Diff line number Diff line change
    @@ -22,11 +22,12 @@ http://rpm.pbone.net

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

    예1)
    )

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

    예2) janus의 기본 설정

    *참고:* janus의 기본 설정

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

    2 changes: 1 addition & 1 deletion vimrc_janus.md
    Original file line number Diff line number Diff line change
    @@ -47,7 +47,7 @@ TODO: 예제로 사용할 .vimrc 설정 내용 정리
    map ,w :bw<CR> "close current file buffer

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

    if version >= 500
    func! Sts()
  29. @wjroseto wjroseto revised this gist Jan 30, 2013. 1 changed file with 7 additions and 1 deletion.
    8 changes: 7 additions & 1 deletion ctags.md
    Original file line number Diff line number Diff line change
    @@ -22,10 +22,16 @@ http://rpm.pbone.net

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

    )
    예1)

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

    예2) janus의 기본 설정

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

    *참고:* sublime text 2에서는 ctags 패키지 컨트롤 플러그인은 .tags를 파일명으로 사용한다. sublime text 2와 공유하기 위해서는 .tags을 추가한다.

    태그명령 요약

    * :ta [tag] or <Ctrl>+], :ts[tag] or :tj [tag]: 스택을 사용하여 [tag]로 점프
  30. @wjroseto wjroseto revised this gist Jan 30, 2013. 3 changed files with 23 additions and 2 deletions.
    2 changes: 1 addition & 1 deletion _using_vim.md
    Original file line number Diff line number Diff line change
    @@ -18,8 +18,8 @@

    ###my .vimrc

    * 공통 내용: [common.vimrc](#file-common-vimrc)
    * 샘플 .vimrc: [example.vimrc](#file-example-vimrc)
    * 공통 내용: [common.vimrc](#file-common-vimrc)
    * 샘플 .vimrc.after (with janus): [example.vimrc.after](#file-example-vimrc-after)
    * 샘플 .gvimrc.after (with janus): [example.gvimrc.after](#file-example-gvimrc-after)

    8 changes: 7 additions & 1 deletion ctags.md
    Original file line number Diff line number Diff line change
    @@ -7,7 +7,9 @@ ctags의 설치 여부 확인
    $ ctags --help

    설치 되지 않았다면 설치

    http://ctags.sourceforge.net

    http://rpm.pbone.net

    태그 데이터베이스 만들기
    @@ -18,7 +20,11 @@ http://rpm.pbone.net

    `.vimrc`에 설정할 내용

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

    예)

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

    태그명령 요약

    15 changes: 15 additions & 0 deletions vimrc_janus.md
    Original file line number Diff line number Diff line change
    @@ -47,6 +47,21 @@ TODO: 예제로 사용할 .vimrc 설정 내용 정리
    map ,w :bw<CR> "close current file buffer

    "===========ctags setting
    set 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