반응형



ho_vim150820.tgz


vim_ctags_cscope.pdf


vimrc



이렇게 Dropbox에 싱크걸고 심볼릭링크걸면 좋다.


lionelj  lionelj-Desktop  ~  $  ls -al .vim*

lrwxrwxrwx 1 lionelj lionelj   31 10월 30 10:10 .vim -> /home/lionelj/hoho/Dropbox/.vim

-rw------- 1 lionelj lionelj 5345 10월 30 10:11 .viminfo

lrwxrwxrwx 1 lionelj lionelj   33 10월 30 10:11 .vimrc -> /home/lionelj/hoho/Dropbox/.vimrc

lionelj  lionelj-Desktop  ~  $  ls -al .fonts

lrwxrwxrwx 1 lionelj lionelj 34 10월 30 10:09 .fonts -> /home/lionelj/hoho/Dropbox/.fonts/



폰트 변경

------------------------------

http://kldp.org/node/63911


:set guifont=Lucida_console:h10

이런 식인데, 문제는 =뒤에 무슨 말을 쳐야 할지 모르겠다는 것...


쉽게 설정하는 방법이 있다.

우선은 GUI메뉴에서, 편집 --> 글꼴 고르기 기능을 통해서 원하는 설정대로 해놓는다.

그 뒤,


:set guifont=

까지 치고 tab키를 누른다.

그러면 현재의 설정이 출력될 것이다.

이것을 그대로 vimrc에 적으면 끝!


2017-10-26 추가: 현재 설정이 출력된 되에 엔터 키를 눌러서 명령을 실제로 내려서 명령어 이력에 기로고디게한다. 그 뒤 vim ex모드에서 (hjkl 쳐서 이동하는 그 모드) q: 이라고 입력하면 이전에 입력했던 명령어들이 보일 것이다. 이 곳에서 yy를 하면 보통의 텍스트 처럼 복제가 되어 버퍼에 들어가게 된다;;;; 이것을 vimrc파일에다 p로 붙여넣으면 더 쉽다.


필자는 이렇게 되어 있다. (윈도우 gVim)

set guifont=Bitstream_Vera_Sans_Mono:h11:cHANGEUL


리눅스 gvim

set guifont=DejaVu\ Sans\ Mono\ 12


출처: https://forcecore.tistory.com/284 [Divine Power]

-----------------------------------------


vim vi .vimrc색상 변경


http://vimcolorschemetest.googlecode.com/svn/html/index-c.html

http://code.google.com/p/vimcolorschemetest/

에 가면  좋은게 많다. 


다운받아서

~/.vim/ 디렉토리에 넣고

:colo adaryn 이렇게 vim에서 실행하면 적용이 된다.

적용이 잘 되면 

~/.gvimrc나 ~/.vimrc에

colo adaryn 라고 적으면 다음부터 자동 적용 된다.

여러 유저가 공유하도록 하시려면 vim에서 :echo $VIM 해보신 후 그 장소 아래 ./vimfiles/colors/에 넣으시면 됩니다. 

자세한 것은 :help vimfiles 해보시면 아실 수 있습니다. 



.vimrc 세팅


출처 : http://blog.outsider.ne.kr/518


Windows를 주로 쓸때는 그렇지 않았는데 Ubuntu와 OSX를 많이 쓰다보니 터미널에 손이 많이 가게 되서 요즘 VIM을 사용하는데 재미를 붙히고 있습니다. vi매니아까지는 아니더라도 콘솔을 사용하면서 불편하지 않게 다룰수 있을 정도까지는 VIM을 익혀두려고 하고 있습니다.


사용자계정의 디렉토리밑에 .vimrc 파일을 생성해 놓으면 vim사용시 자동으로 이 파일의 설정을 사용하게 됩니다. .vimrc에 대한 설정은 검색을 통해서 많이 찾아볼 수 있는데 계속 사용하면서 저에게 맞는 설정을 추가해가면서 사용해야 할듯 합니다. 


set nocompatible " 오리지날 VI와 호환하지 않음

set autoindent  " 자동 들여쓰기

set cindent " C 프로그래밍용 자동 들여쓰기

set smartindent " 스마트한 들여쓰기

set wrap 

set nowrapscan " 검색할 때 문서의 끝에서 처음으로 안돌아감

set nobackup " 백업 파일을 안만듬

set visualbell " 키를 잘못눌렀을 때 화면 프레시

set ruler " 화면 우측 하단에 현재 커서의 위치(줄,칸) 표시

set shiftwidth=4 " 자동 들여쓰기 4칸

set number " 행번호 표시, set nu 도 가능

set fencs=ucs-bom,utf-8,euc-kr.latin1 " 한글 파일은 euc-kr로, 유니코드는 유니코드로

set fileencoding=utf-8 " 파일저장인코딩 

set tenc=utf-8      " 터미널 인코딩

set expandtab " 탭대신 스페이스

set hlsearch " 검색어 강조, set hls 도 가능

set ignorecase " 검색시 대소문자 무시, set ic 도 가능

set tabstop=4 "  탭을 4칸으로

set lbr

set incsearch "  키워드 입력시 점진적 검색

syntax on "  구문강조 사용

filetype indent on "  파일 종류에 따른 구문강조

set background=dark " 하이라이팅 lihgt / dark

colorscheme desert  "  vi 색상 테마 설정

set backspace=eol,start,indent "  줄의 끝, 시작, 들여쓰기에서 백스페이스시 이전줄로

set history=1000 "  vi 편집기록 기억갯수 .viminfo에 기록



vi vimrc vi로 편집할 때 tab 대신 space 4개로 쓰기


출처 : http://kltp.kldp.net/stories.php?story=03/01/27/3967693&topic=25


내 .vimrc 파일

colorscheme pablo

se nu

set gfn=나눔고딕코딩\ 10

set visualbell

set shiftwidth=4

set tabstop=8

set softtabstop=4

set autoindent

map! ^V  ^V ^V ^V ^V



vi로 편집할 때 탭 대신에 space 4개를 쓰는 방법입니다. 

자신의 홈디렉토리 .vimrc 화일에 다음과 같이 적으면 

됩니다. 


예전엔 마지막 줄은 몰랐었는데 마지막 줄이 없으면 

autoindent하면서 줄의 맨 앞에 탭이 생깁니다. 또 

맨 처음 탭에만 공백이 되고 두번째 탭부터는 다시 

탭이 되더라구요...


맨 마지막 줄을 꼭 써 주어야 합니다. 

맨 마지막 줄은 보이는 대로 입력하면 안 되구요, 

"map! " 요기까지 타이핑하고 

control-v 누르고 control-v 다시 누르고 

control-i 누릅니다. 


그 다음 space 한번 치고 

control-v, control-v, space, 

control-v, control-v, space, 

control-v, control-v, space, 

control-v, control-v, space

이렇게 하면 됩니다. 


set visualbell

set shiftwidth=4

set tabstop=8

set softtabstop=4

set autoindent

map! ^V ^V ^V ^V ^V


(제 vi 버전은 vim version 6.1.5입니다. )




vi 간단한 팁
vi[Visual Edit]의 간단한 팁들...
[사용하고 있는 헤더파일 열기]
***.h (Header file) 에 커서를 이동시킨후에
[ctrl + wf] : 해당 Header file 이 창이 분할 되어서 표시된다.
------------------------------------------------------------------------------------
[Tab Size 를 변경하기]
명령어 모드에서
[set ts=8]
[set sts=4]
ts [tabstop] : tab 사이즈가 얼마나 보일지를지정한다.
sts [softtabstop] : 실질적으로 얼마만큼의 간격으로 이동할지를 지정한다.
-------------------------------------------------------------------------------------
[함수을 폴딩하기]
함수가 많을경우 보지 않는 함수를 폴딩하는 기능이다.
v 로 폴딩하고자 하는 영역을 지정하고
zf 를 입력하면 지정된 영역이 폴딩된다.
폴딩된 영역의 해제는 zo 를 입력하면 다시 원상태로 복귀
--------------------------------------------------------------------------------------
[함수의 범위를 파악하기]
함수의 범위가 어디까지인가 를 { , }확인가능하는 기능이다.
{ 에서 % 를 누르면 해당하는 } 로 이동한다.
--------------------------------------------------------------------------------------
[파일탐색기능으로 파일열기]
해당 화일을 같은 vi 상에서 보고싶을경우 어떤 파일명을 전부 입력하여 열수있지만
:20vs./ 와 같이 입력하면 탐색기와 같이 탐색하여 파일을 열수 있다.
20 -> 창의 사이즈(% 값이다.)
vs -> vertical screen 즉 vi 의 창을 세로 분할하여 파일의 내용을 보여주겠다는 것
./ -> 어느 폴더를 보여줄것인지 ./ 는 현재 폴더이다.
따라서 :20vs./ 를 입력하게 되면 창의 20% 가 탐색기와 같이 열리게 된다.
--------------------------------------------------------------------------------------
[현재vi창에서 다른 파일 열기]
현재의 창에서 다른 파일을 열고 싶을경우
:e FileName 을 입력하면 된다.
--------------------------------------------------------------------------------------
[파일의 처음과 끝으로 이동하기]
해당파일의 처음으로 이동하거나 끝으로 이동하려면.
파일의 처음으로 이동시 :1 을 입력하여 이동가능하나, gg 를 실행하면 파일의 처음으로 이동한다.
파일의 끝으로 이동하려면 :$ 를 입력하여 이동가능 하지만 G 를 실행하여도 파일의 끝으로 이동한다.
--------------------------------------------------------------------------------------
[블럭 지정하기]
한줄이 아닌 원하는 부분을 삭제하거나 복사 등의 명령을 내리고 싶을경우엔
ctrl+v 를 입력한 후에 원하는 부분을 블럭을 지정할 수 있다.
블럭을 지정한 후에
y : 해당 블럭 복사
d : 해당 블럭 삭제
U : 해당 블럭 대문자로 변경
u : 해당 블력 소문자로 변경
~: 해당 블력 대소문자 변환
--------------------------------------------------------------------------------------
[되살리기와 되돌아가기]
실행한 명령을 되돌리기 즉 윈도우의 ctrl+z 에 해당하는 u 명령어와
되살리기 윈도우의 ctrl + y 에해당하는 ctrl+r 명령어가 있다.
--------------------------------------------------------------------------------------
[문자열 치환하기]
해당하는 문자열을 치환하기 위해서는
:%s/old/new/g 를 실행하면 문서 전체를 범위로 하여 해당 old 문자를 new 로 치환한다.
:s/old/new/g 를 실행하면 현재 라인에서 검색하여 치환을 실행한다.
:%s/old/new/gc 를 실행하면 치환하기 전에 사용자에게 확인을 한다.
--------------------------------------------------------------------------------------
[vi창을 분할하여 사용하기]
작업을 하다보면 다른 파일의 소스를 참조해야할 일들이 있다 이럴때 창을 나누워 사용하면편리하겠지..
이럴때 사용하는 명령어는
ctrl+w s : 현재 파일을 두개의 수평창으로 나눔
ctrl+w v : 현재 파일을 두개의 수직창으로 나눔
이렇게 나뉘워진 창으로 의 이동은 ctrl + ww 를 입력하면 이동 가능하다.
나누어진 차에서 다른 파일을 불러드리고 싶으면 ctrl + e FILE_NAME 을 입력한다.
--------------------------------------------------------------------------------------
[분할된 창의 크기를 조절하기]
분할된 창의 크기를 조절할 필요가 있을 것이다. 이때는 다음과 같이 사용하면 된다.
수평분할의 경우
ctrl+w N+ : N만큼 증가한다.
ctrl+w N- : N만큼 감소한다.
수직분할의 경우
ctrl+w N> : N만큼 오른쪽으로 증가
ctrl+w N< : N만큼 왼쪽으로 증가
공통적인 것
ctrl+w = : 창의 크기가 균등하게 분할
--------------------------------------------------------------------------------------
[원하는 위치를 마킹하기]
어떠한 특정한 위치를 마킹하여 사용하고자 할때 즉 임의로 저장해 이동하려할때는
vi 의 마킹기능을 이용하면 편리하다.
원하는 위치 즉 기억 시키고 싶은 위치에 커서를 이동하고
ma 를 입력한다. (여기서 a 대신에 a-z 까지 입력가능하다.)
그러면 a 라는 마킹 이름으로 현재 커서의 위치가 저장이 된다.
mA 를 입력하게 되면 현재 파일에서만의 이동이 아닌 전역적으로 다른 파일에서도 이동가능하게 된다.
마킹된 곳으로 이동하는 방법은 'a 또는 'A 를 입력하면 해당 마킹 지점으로 이동하게 된다.
현재 마킹된 정보를 알아보는 방법은 :marks 명령어를 통해서 가능하다.
--------------------------------------------------------------------------------------
[편집중에 명령어를 수행한는 법]
편집화면 중에서 어떠한 셀 명령어를 실행하고 싶을 경우에는
:!command 를 실행하면된다. 이렇게 하면 명령어를 실행하고 난 후에 다시 편집 창으로 돌아온다.
만약 실행 명령의 결과를 현재 편집창에 넣고 싶다면
:r !command 를 실행하면 된다.
--------------------------------------------------------------------------------------




VI 사용법의 모든것 !!!


삽입 명령

a

커서 뒤에 입력

A

라인 끝에 입력

i

커서 앞에 입력

I

라인시작 부분에 입력

o

커서 있는 라인 밑에 입력

O

커서가 있는 라인 위에 입력

커서 이동 명령

h

왼쪽으로 커서 한 칸 이동

H

화면의 처음으로 이동

L

오른쪽으로 한 칸 이동

L

화면 끝으로 이동

e

다음 단어의 마지막으로 이동

E

커서를 공백으로 구분된 다음 단어 끝으로 이동

b

한 단어 뒤로 이동

B

커서를 공백으로 구분된 이전 단어로 이동

w

커서를 한 단어 뒤로 이동

W

커서를 공백으로 구분된 다음 단어로 이동

k

커서를 한 라인 위로 이동

j

커서를 한 라인 아래로 이동

O

커서를 라인의 시작으로 이동

$

커서를 라인의 끝으로 이동

Enter

커서를 다음 라인 시작으로 이동

-

커서를 전 라인의 시작으로 이동

Ctrl + F

다음 화면으로 이동

Ctrl + D

화면의 반만 앞으로 이동

Ctrl + B

전 화면으로 이동

Ctrl + U

화면의 반만 뒤로 이동

G

커서를 텍스트 마지막 라인으로 이동

숫자G

커서를 숫자 라인만큼 이동

M

커서를 화면 중간 라인으로 이동

커서를 전 위치로 이동

(

문장의 시작으로 이동

{

문단의 시작으로 이동

)

문장 끝으로 이동하여 다음 단어의 시작으로 커서 이동

}

문단 끝으로 이동

삭제 명령

x

커서가 있는 문자 삭제

X

커서가 있는 문자 앞에 있는 문자 삭제

dw

커서가 있는 단어 삭제

db

커서가 앞에 있는 단어 삭제

dW

공백으로 구분된 뒷 단어 삭제

dB

공백으로 구분된 앞 단어 삭제

dd

커서가 있는 라인 삭제

D

커서가 있는 라인의 나머지 삭제

d)

문장의 나머지 삭제

d}

문단의 나머지 삭제

dG

파일의 나머지 삭제

dH

화면의 시작까지 삭제

dL

화면의 나머지 삭제

J

커서와 다음 단어의 공백을 모두 삭제

바꾸기 명령

r

커서에 있는 문자 대치

R

입력 모드로 한 문자씩 덮어씀

s

커서가 있는 문자 삭제 후 입력 모드로 전환

S

커서가 있는 줄을 삭제 후 입력 모드로 전환

cb

커서가 있는 앞 문자 삭제 후 입력 모드

cW

공백으로 구분된 뒷 단어를 삭제 후에 입력 모드

cB

공백으로 구분된 앞 단어 삭제 후 입력 모드

cc

커서가 있는 라인을 삭제하고 입력 모드

C

커서가 있는 라인의 나머지를 삭제하고 입력 모드로 전환

cO

커서에서부터 라인의 시작까지 텍스트 바꾸기

c

특정 텍스트 바꾸기

c)

문장의 나머지 바꾸기

c}

문단의 나머지 바꾸기

cG

파일의 나머지 바꾸기

cm

표시까지 모든 것 바꾸기

cL

화면의 나머지 바꾸기

ch

화면의 시작까지 바꾸기

이동

p

삭제나 복사된 텍스트를 커서가 있는 문자나 라인 뒤에 삽입

P

삭제나 복사된 텍스트를 커서가 잇는 문자나 라인 앞에 삽입

dw p

커서가 있는 단어를 삭제한 후 이를변경한 커서가 있는 것 뒤에 삽입

dw P

커서가 잇는 단어를 삭제 후 이를 변경한 커서 있는 곳 앞으로 삽입

d p

지정한 다음 텍스트로 삭제한 후 커서가 가리키는 곳으로 이동

d) P

문장의 나머지로 이동

d} p

문단의 나머지로 이동

dG P

파일의 나머지로 이동

dH p

회면 시작 부분으로 이동

dL P

화면의 나머지를 이동

복사

yw

커서가 있는 단어를 복사

yb

커서가 있는 앞 단어를 복사

yW

공백으로 구분된 뒷 단어 복사

yB

공백으로 구분된 앞 단어를 복사

y

특정한 다음 텍스트 복사

yy

커서가 있는 라인을 복사, 커서가 가리키는 곳으로 라인을 이동

y)

문자의 나머지 복사

y}

문단의 나머지 복사

yG

파일의 나머지 복사

yH

화면의 시작까지 복사

yL

화면의 나머지 복사

검색

/patter

n

텍스트에서 앞으로 패턴 검색

>patter

텍스트에서 뒤로 패턴 검색

n

앞 또는 뒤로 이전 검색 반복

N

반대 방향으로 이전 검색 반복

/

전 검색을 앞으로 반복

?

전 검색을 뒤로 반복

 

vi 에디터 종료 마치기 명령


:q

그대로 종료하기


:q!

변경된 내용을 저장하지 않고 강제로 종료하기


:wq

변경된 내용을 저장하고 종료하기


:x

:wq와 동일한 명령


ZZ

:wq와 동일한 명령


삽입 명령


a

커서 뒤에 입력

A

라인 끝에 입력


I

커서 앞에 입력

I

라인시작 부분에 입력


o

커서 있는 라인 밑에 입력

O

커서가 있는 라인 위에 입력


방향키를 이용한 커서 이동 명령


<-, Del

왼쪽으로 커서 한 칸 이동

PageUp

화면 위로 이동


->

SpaceBar

오른쪽으로 한 칸 이동

PageDown

화면 아래로 이동


윗 줄로 커서 이동

Enter

다음 줄 첫 칸으로 이동


아래 줄로 커서 이동

Esc

다음 줄 첫 칸으로 이동


Home

줄 처음 칸으로 이동


다른 키를 이용한 커서 이동 명


H

왼쪽으로 커서 한 칸 이동

k

윗 쪽으로 커서 이동


l

오른쪽으로 한 칸 이동

j

아래쪽으로 커서 이동


e

다음 단어의 마지막 칸으로 이동

E

공백으로 구분된 뒷 단어의 마지막 칸으로 이동


b

앞 단어의 앞 칸으로 이동

B

공백으로 구분된 앞 단어의 앞 칸으로 이동


W

다음 단어의 앞 칸으로 이동

W

공백으로 구분된 뒷 단어의 앞 칸으로 이동


그 외의 키를 이용한 커서 이동 명령


Ctrl + F

다음 화면으로 이동

Ctrl + D

반 화면 위로 이동


Ctrl + B

전(앞) 화면으로 이동

Ctrl + L

반 화면 아래로 이동


O

줄이 시작되는 첫 칸으로 이동

-

이전 줄의 시작 부분으로 이동


$

줄이 끝나는 마지막 칸으로 이동

+

다음 줄의 시작 부분으로 이동


(

문장의 시작으로 이동

{

문단의 시작으로 이동


)

문장의 끝으로 이동하여 다음 단어의 시작 첫 칸으로 커서 이동

}

문단의 끝으로 이동


G

문서의 마지막 줄로 이동

이전의 커서 위로 이동


nG

n번째 줄로 이동

M

화면 중간 줄에 커서 이동


삭제 명령


x

커서가 있는 문자 삭제

X

커서가 있는 문자 앞에 있는 문자 삭제


dw

커서가 있는 단어 삭제

db

커서 앞에 있는 단어 삭제


dW

공백으로 구분된 뒷 단어 삭제

dB

공백을 구분된 앞 단어 삭제


dd

커서가 있는 라인 삭제

D

커서가 있는 라인의 나머지 삭제


d)

문장의 나머지 삭제

d}

문단의 나머지 삭제


dG

파일의 나머지 삭제

dH

화면의 시작까지 삭제


dL

화면의 나머지 삭제

J

커서와 다음 단어 사이의 모든 공백 삭제


바꾸기 명령


R

커서에 잇는 문자 대치

R

입력 모드로 한 문자식 덮어 씀


s

커서가 있는 문자 삭제 후 입력 모드로 전환

D

커서가 있는 줄을 삭제한 후 입력 모드로 전환


cb

커서가 있는 앞 문자 삭제 후 입력 모드

cW

공백으로 구분된 뒷 단어를 삭제한 후 입력 모드


cB

공백으로 구분된 앞 단어 삭제 후 입력 모드

cc

커서가 있는 라인을 삭제하고 입력 모드


C

커서가 있는 라인의 나머지를 삭제하고 입력 모드로 전환

cO

커서에서부터 라인의 시작까지 텍스트 바꾸기


c

특정 텍스트 바꾸기

c)

문장의 나머지 바꾸기


c}

문단의 나머지 바꾸기

cG

파일의 나머지 바꾸기


cH

화면의 시작까지 바꾸기

cL

화면의 나머지 바꾸기


텍스트 이동


p

삭제나 복사된 텍스트를 커서가 있는 문자나 라인 뒤에 삽입

P

삭제나 복사된 텍스트를 커서가 있는 문자나 라인 앞에 삽입


dw p

커서가 있는 단어를 삭제한 후 이를 원하는 곳 커서 뒤로 삽입

dw P

커서가 있는 단어를 삭제한 후 이를 변경한 커서가 있는 곳으로 삽입


d p

지정한 다음 텍스트로 삭제한 후 커서가 가리키는 곳으로 이동

d) P

문장의 나머지로 이동


d} p

문단의 나머지로 이동

dG P

파일의 나머지로 이동


dH P

화면 시작 부분으로 이동

dL P

화면의 나머지를 이동


복사


yw

커서가 있는 단어를 복사

yb

커서가 잇는 앞 단어를 복사


yW

공백으로 구분된 뒷 단어 복사

yB

공백으로 구분된 앞 단어를 복사


y

특정한 다음 텍스트 복사

yy

커서가 있는 라인을 복사, 커서가 가리키는 곳으로 라인을 이동


y)

문자의 나머지 복사

y}

문단의 나머지 복사


yG

파일의 나머지 복사

yH

화면 시작까지 복사


yL

화면의 나머지 복사


검색


/pattern

텍스트에서 앞으로 패턴 검색

>pattern

텍스트에서 뒤로 패턴 검색


n

앞 또는 뒤로 이전 검색 반복

N

반대 방향으로 이전 검색 반복


/

전 검색을 앞으로 반복

?

전 검색을 뒤로 반복


옵션

옵션약어

기능

디폴트

autoindent

ai

들여 쓰기 가능, 탭으로 들여 쓰기 범위 지정

off

autoprint

ap

줄이 바뀔 때 현재 줄을 화면상에서 출력

on

errobells

ed

명령 에러가 발생시 삑 소리나게 함

off

number

nu

줄 번호를 나타나게 함

off

report

report

편집시 메시지를 보낼 편집 변화 크기 지정

5

showmatch

sm

가로 닫기 괄호를 사용할 때 일치하는 가로 열기 괄호를 보여줌

off

wam

wam

저장하지 않고 vi 종료할 때 경고 메시지를 뿌려 줌

on

ignorecase

ic

검색 패턴에 사용되는 대소문자 구별하지 않음

on

tabstopp=n

ts=n

탭 공백을 n 수만큼 지정

8

wrapmargin=n

wm=n

텍스트 오른쪽 여백을 n 수만큼 지정

0

 



Ted Logan

Secrets of tabs in vim

Posted Thu Jan 17 21:00:08 MST 2008

I spend much of my day working on other people's code. People who have uncivilized ideas about how to indent their code. (Given some of the code I've seen, I sometimes think I should be simply pleased that they bothered to indent their code at all.) Until civilization aligns and we finally have elastic tabs, I'll have to deal with different tab styles. The popular ones tend to be:

  • Tabs are eight columns wide. Each indentation level is one tab. (Popular with the Linux kernel.)
  • Tabs are four columns wide. Each indentation level is one tab. (Popular with Windows developers using Visual Studio.)
  • Each indentation level is four spaces. Tabs are not used. (Popular with Java programmers.)

I've seen some especially ... creative tab styles not listed above, including code indented with various innovative mixture of tabs and spaces. Out of the box, my favorite text editor (vim and its gui cousin, gvim) will default to indent using eight-column tabs, but vim can handle any (consistent) indentation style I've seen using four easy commands: tabstopshiftwidthexpandtab, and softtabstop. (Each command listed below has links to the vim documentation for more details.)

tabstop

Set tabstop to tell vim how many columns a tab counts for. Linux kernel code expects each tab to be eight columns wide. Visual Studio expects each tab to be four columns wide. This is the only command here that will affect how existing text displays.

expandtab

When expandtab is set, hitting Tab in insert mode will produce the appropriate number of spaces.

shiftwidth

Set shiftwidth to control how many columns text is indented with the reindent operations (<< and >>) and automatic C-style indentation.

softtabstop

Set softtabstop to control how many columns vim uses when you hit Tab in insert mode. If softtabstop is less than tabstop and expandtab is not set, vim will use a combination of tabs and spaces to make up the desired spacing. If softtabstop equals tabstop and expandtab is not set, vim will always use tabs. When expandtab is set, vim will always use the appropriate number of spaces.

Indentation in the real world

Putting it all together, the following incantations will configure vim for each of the cases listed above:

  • Tabs are eight columns wide. Each indentation level is one tab. (Popular with the Linux kernel.)
    :set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab
  • Tabs are four columns wide. Each indentation level is one tab. (Popular with Windows developers using Visual Studio.)
    :set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab
  • Each indentation level is four spaces. Tabs are not used. (Popular with Java programmers.)
    :set softtabstop=4 shiftwidth=4 expandtab

Just to prove it's possible, here are some more ... creative indentation styles and their vim representation:

  • Tabs are eight columns wide. Each indentation level is three columns, which may be spaces or tabs.
    :set tabstop=8 softtabstop=3 shiftwidth=3 noexpandtab
  • Tabs are five columns wide. Each indentation level is six columns, which may be spaces or tabs.
    :set tabstop=5 softtabstop=6 shiftwidth=6 noexpandtab

... you get the idea.

Remembering these settings

So how do you make vim remember what indentation to use for all of your files? vim will read your personal startup file every time it runs; you can put your favorite indentation incantations there. (That's ~/.vimrc on Unix; $HOME/_vimrc on Windows. In gvim, you can click Edit -> Startup Settings to quickly edit this file.) On the opposite end of the spectrum, you can add special incantations to each file you edit, which will override the settings vim reads from elsewhere:

/* vim: tabstop=8:softtabstop=8:shiftwidth=8:noexpandtab */

(Obviously, wrap the text in your favorite comments to make sure your compiler doesn't try to compile the vim incantations.)

vim will also read .vimrc in the current directory (when the exrc option is set in your normal vimrc), which is useful when editing large numbers of source files in the same directory, or to avoid corrupting source files you don't control.

Visualizing tabs

So what do you do when you open a new source file and you're trying to figure out what tab style the last author used? (And how do you make sure you're doing the Right Thing to avoid mixing tab styles in your new code intermixed with the old code?) I find syntax highlighting useful. In gvim, I like seeing my tabs with underlines. (This tends not to work well on the text terminal for reasons I haven't been able to determine.) The following incantation will tell vim to match tabs, underline them in gvim, and highlight them in blue in color terminals:

syntax match Tab /\t/
hi Tab gui=underline guifg=blue ctermbg=blue

You can't just throw this into your .vimrc and expect all to work, though, because vim will flush its syntax highlighting rules when it loads new files. To hijack this process, add syntax files for your favorite languages in $HOME/.vim/syntax/. For C, the syntax file is c.vim. (Look in $VIM/syntax for a list of existing files.) vim will load the system-wide syntax file and then run your custom file, and you'll be able to visualize your tabs every time you load a C file.


출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Vim/Documents/UsedVim#AEN200


1. vim 이란

vim 은 유닉스 계열에서 전통적으로 널리 사용도던 vi 의 improve 즉 undo, syntax coloring, split windows 등의 기능을 포함시킨 vi 의 보강된 프로그램이다.

이 문서는 vim 의 기본적인 사용법과, 프로그래밍을 위한 여러가지 팁을 담고 있다. vim 버젼은 6.0 을 기준으로 한다. vim(vi)에 대한 자세한 사용방법은 여기에서는 제시하지 않을것이다. 가장 기본적인 사항만 언급할것이며, 자세한 사용법은 vi 사용자그룹 사이트를 참고하기 바란다.

2. VIM의 기본사용법 익히기

이번장에서는 vim의 기본적인 사용법에 대해서 알아보도록 하겠다. 위에서 언급했듯이, 이문서는 VIM의 레퍼런스 가이드는 아니다. 기본적인 사용이 가능하도록 가장 기초적인 내용들만 다룰것이다.

2.1. vim 모드

다른 에디터를 사용하던 유저가 vim을 처음 접하면서 가장 난감해 하는 부분이 vim의 상태(mode)개념이다.vim은 다른 에디터들과 달리, 실행을 시켰다고 해서 즉시 입력이 이루어지지 않는다. 많은 vim을 처음 접하는 유저는 어떻게 글을 입력할지 몰라서 vim의 사용을 접게되는 경우가 발생하는데, 여기에 그 이유가 있다. vi 는 크게 세가지 상태로 나뉘어진다. 첫번째가 명령어 모드로 키입력이 바로 실행되는 상태이며, 다음은 상태모드로 실제 문서를 편집하는 모드 마지막이 ex 상태로 ex 명령을 실행시키는 상태이다.

vi 를 처음실행시키면 입력모드가 아닌 명령모드 상태에 놓이게 된다. 이 상태에서는 문자의 입력이 이루어지지 않으며, 찾기등과 같은 간단한 문서관련 명령을 실행할 수 있다. 이 명령모드 상태에서 ":" 키를 누르면 ex 상태로 a, i, o 키 등을 누르면 입력 상태로 넘어가게 된다. 일단 입력상태로 들어가게 되면 문서 편집을 할수 있게 되는데, 이때 ESC 키를 누르면 명령모드 상태로 넘어가게 된다.

표 1. vim의 상태(mode)

명령 상태처음 vim을 실행했을때, 입력상태/명령상태에서 ESC입력시간단한 찾기, 커서 이동, ex 상태로 넘어가기
ex 상태명령 상태에서 (":")각종 치환, 저장, 파일읽기, vim설정등과 같은 대부분의 작업들
입력 상태명령 상태에서 (a,i,o 키 입력)내용 입력

2.2. 명령어모드의 사용

우리는 명령모드에서 여러가지 명령을 입력함으로써, 복사, 붙이기, 삭제 문서입력, 문서저장, 문서불러오기, 커서이동 등의 작업을 할수 있다. 이번 장에서는 이러한 명령모드에서 사용되는 각종 명령어에 대해서 알아보도록 하겠다.

2.2.1. 커서 이동

기본적으로 vi 는 입력모드에서 방향키를 이용해서 커서 이동을 하지 못하도록 되어있다. 비록 최근의 vim 이 입력모드에서 방향키를 이용한 커서 이동을 지원하고 있기는 하지만, 명령모드에서의 키이동이 훨씬 빠르고 편하므로, 처음에는 좀 어색하더라도 명령모드에서의 키 이동을 익히도록 하자.

표 2. 커서 이동

k커서를 위로 움직임
j커서를 아래로 움직임
h커서를 왼쪽으로 움직임
l커서를 오른쪽으로 움직임
-커서를 줄의 처음으로 옮김
e, E다음단어의 끝으로, 문자단위 이동
w, W다음단어의 처음으로, 문자단위 이동
$줄의 마지막으로
0줄의 처음으로
^줄의 처음으로(공백이 아닌 처음시작되는 문자)
Shift+g문서의 마지막으로 이동한다.
gg, 1g문서의 처음으로 이동한다. 1대신 다른 숫자를 입력하면 해당 숫자의 라인으로 이동한다.
), (다음, 이전 문장의 처음으로
}, {다음, 이전문단의 처음으로
]], [[다음, 이전 구절의 처음으로

2.2.2. 화면 스크롤

위의 커서명령 이동이 매우 편하기는 하지만, 만약 페이지가 한 2000라인 될경우, 위의 커서를 이용해서 한줄씩 이동하는데에는 너무 많은 시간이 걸릴것이다. 그래서 vi 에서는 화면 단위의 스크롤이 가능한 명령들을 제공한다. 아래의 화면 스크롤 명령어들을 익히면 빠른 위치이동을 위해 매우 유용하게 사용할수 있다. ^F 는 CTRL+F 를 의미한다.

표 3. 화면 스크롤

^F한 화면 을 앞으로 스크롤
^B한 화면 을 뒤로 스크롤
^D반 화면 을 앞으로 스크롤
^U반 화면 을 뒤로 스크롤
^E한줄 앞으로 스크롤
^Y한줄 뒤로 스크롤
Shift + h화면의 맨 윗줄로
Shift + m화면의 중간줄로
Shift + l화면의 맨 아랫줄로

2.2.3. 마크 이동

일종의 책갈피 기능이라고 보면 된다. 자주 참조해야할 라인에 마크를 해놓고 필요할때 곧바로 마크된 영역으로 이동하기 위해서 사용한다. 마크는 mx 형식으로 사용할수 있다. x 는 (a~z)까지의 문자로 마크된 영역의 이름을 지정하기 위해서 사용한다. 마크된 영역으로 이동하기 위해서는 'x 와 `x 를 사용한다. 'x 는 마크된 라인의 가장 앞으로 이동하고, `x 는 마크된 라인의 정확한 위치로 이동한다.

2.2.4. 입력 명령

지금 vi 를 실행시켜보자. vi 는 기본적으로 명령모드로 실행되므로, 지금상태에서는 문서 작성을 할수 없을것이다. 우리는 다음과 같은 키입력을 통해서 입력모드 상태로 전환할수 있다.

표 4. 입력 명령

i현재위치에서 삽입
I현재줄의 처음위치에서 삽입
a현재위치에서 한칸앞으로 이동해서 삽입
A현재줄의 마지막위치에서 삽입
o새로운 줄을 커서 아래에 연다
O새로운 줄을 커서 위연다
s현재 위치의 문자를 지우고 입력모드로 들어간다.
S현재위치의 라인을 지우고 입력모드로 들어간다.

2.2.5. 편집명령

여기에서는 vi의 편집기능인 복사, 붙이기, 삭제에 대해서 알아 보도록 하겠다. 다른 에디터들은 보통 마우스를 이용해서 블럭을 지정해서 편집을 하는 반면, vi 는 명령어 모드에서 키보드 만을 이용해서 편집이 가능하므로, 매우 편리하고 빠르게 편집작업들이 가능하다. 또한 라인단위 블럭, 블럭단위 블럭등의 선택 모드를 지원함으로써, 문서에서 원하는 부분에 대한 작업을 좀더 쉽게 할수 있다.

2.2.5.1. 편집(none visual block 모드)

visual block 모드가 아닌 상태에서이 편집에 관한 내용이다.

표 5. 복사,삭제,붙이기

y한줄 복사
yn현재 라인에서부터 n라인만큼을 복사
p복사된 내용 붙이기
dd한줄삭제
dw한단어 삭제
Shift+d, d$현재커서 위치에서 마지막까지 삭제
Shift+j현재 행의 개행문자를 제거한다. 즉 아래라인을 현재라인에 덧붙인다.

2.2.5.2. Undo (되돌리기)

vim 은 다중의 undo 기능을 지원한다. 뒤로 되돌리고 싶다면 단지 'u'키만 입력하면 된다.

2.2.5.3. 블럭 지정

이번엔 블럭지정, 그중에서도 vim 에서 지원하는 visual 블럭 지정에 대해서 알아보겠다. vim visual 블럭 지정 기능을 사용할경우 지정범위가 반전되면서 눈에 보이기 때문에, 효과적인 블럭지정이 가능하도록 도와준다. 범위지정을 위해서 'hjkl', 'Shift+g,GG' 과 같은 이동명령 과 화면스크롤 명령을 사용해서 범위지정을 좀더 빠르게 할수 있다.

표 6. 블럭지정

v단어단위로 블럭지정이 가능하다. 블럭범위는 이동명령인 'hjkl' 로 원하는 범위 만큼 지정할수 있다.
Shift+v라인단위 블럭지정이다. 라인전체가 선택되며, 위아래 이동명령 'hj' 으로 범위 지정이 가능하다.
Ctrl+v블럭단위 블럭지정이다. 4각형의 블럭지정이 가능하며 이동명령인 'hjkl' 로 원하는 범위를 지정할수 있다.
Shift+v 와 같이 블럭지정을 한후 Shift+G 를 입력하면 현재라인부터 마지막 라인까지가 블럭 지정이 될것이다.

2.2.5.4. 편집(visual block 모드)

일단 vim 의 visual 블럭 지정 기능을 이용해서 편집하기 원하는 블럭을 지정했다면, 각종 편집명령을 이용해서 복사, 붙이기, 삭제 작업이 가능하다. 블럭을 지정한 상태에서 아래의 명령을 이용해서 편집을 하면 된다. 명령어는 기본적으로 none visual block 모드의 편집 명령어과 같다.

표 7. 편집(복사, 삭제, 붙이기)

y지정된 블럭을 복사한다.
p복사된 블럭을 현재라인(커서) 아래에 붙인다.
d지정된 블럭을 삭제한다.
dd현재라인을 삭제한다.

2.3. ex 모드

2.3.1. 찾기/치환

vim 의 기능중 가장편리한 기능으리면 뭐니뭐니 해도, 정규표현식을 이용한 강력한 찾기기능과 치환기능이라고 할수 있을것이다. 물론 다른 대부분의 에디터들도 찾기기능과 치환기능을 제공하긴 하지만, vim 의 기능은 다른 에디터들에 비해서 정말로 독보적인 편리함과 강력함을 제공한다. vi 사용자가 다른 에디터로 넘어가기 힘든이유중 가장큰 이유가, 바로 "키를 이용한 방향입력" 과 "찾기 및 치환" 기능 때문이다.

사실 찾기 치환의 기능을 제대로 이해하고 사용하기 위해서는 정규표현식(regular expression) 에 대한 이해가 필요로 하는데, 이것은 다음의 사이트를 참조하기 바란다. 정규 표현식의 간략한 소개

먼저 찾기 기능에 대해서 알아보겠다. 찾기기능은 ':/패턴/' 를 이용 하면된다. 찾기 원하는 문자혹은 패턴을 입력하고 엔터키를 누르면 현재 커서위치에서 가장 가까운 곳에 위치한 문자열로 커서를 이동시킨다(문서 아래방향으로). 다음 문자열을 찾기를 원한다면 'n'키를 누르면 된다. 문서에서 가장 마지막에 이르르게 되면, 문서의 가장처음부터 다시 찾기 시작한다. 'Shift+n' 을 이력하면 반대 방향(문서의 위쪽으로)으로 찾기를 시작한다.

치환이야 말로 vim 의 꽃이라고 할수 있다. :[범위]s/[oldpattern]/[newpattern]/ 의 형식으로 사용하면 된다. 범위 지정은 visual block 을 이용할수도 있으며, 직접 범위를 입력할수도 있다. visual block 를 이용한 치환은 visual block 를 지정한다음 ':' 를 입력해서 ex 모드로 넘어가면 된다. 그리고나서 ':'<,'>s/[oldpattern]/[newpattern/' 과 같은 방법으로 치환하면 된다.

visual block 를 사용하지 않고 직접범위를 입력할수도 있다. :[시작],[마지막]s/[old]/[new]/ 식으로 범위를 지정하면 된다. 여기에는 몇가지 지정된 범위를 위한 특수 기호들이 있다. '%' 는 전체문서(처음부터 끝까지), '.' 은 현재, '$' 은 마지막 을 나타낸다. 숫자를 입력할경우 숫자는 라인을 나타낸다. 다음은 간단한 사용예이다.

# 문서 처음부터 마지막까지의 char 를 _char_ 로 치환한다. 
:%s/char/_&_/g

# 현재(커서위치)부터 마지막까지의 char 를 _char_ 로 치환한다.
:.,$s/char/_&_/g

# buf_.*[255], buf_in[255], buf_get[255] 와 같은 문자열을 hello 로 변경한다.  
:1,10s/buf_.*\[255\]/hello/g
				
마지막에 쓰인 'g' 는 global 이다. 즉 해당 라인 전체에 걸쳐서 검색후 치환한다. 'g' 를 사용하지 않을경우 라인에서 처음에 검색된 문자만 치환하고 다음 라인으로 넘어간다.

2.3.2. 파일 저장, 열기, 종료

파일열기의 경우 vi 를 실행시킬대 명령행 옵션으로 열기가 가능하다. 또한 vi 를 이미 실행 시킨후에도 명령모드에서 명령을 입력함으로 파일을 열수 있다. 열고자 하는 파일이 이미 존재할경우에는 존재하는 파일이 열리고, 열고자 하는 파일이 존재하지 않을경우 새로운 파일이 만들어진다.

표 8. 저장,열기,종료

:e [filename]filename 으로 파일열기
:q, :q!, :wq종료, 강제종료, 저장후 종료
:w, :w [filename]현재파일명으로 저장, filename 로 저장
:<범위>w [filename]지정한 범위만 다른 파일로 저장
:e [filename]filename 을 편집하기 위해서 연다
ZZ지금파일을 저장하고 vim 을 종료한다.
:f현재 작업중인 파일의 이름과, 라인수를 출력한다

3. 개발자를 위한 vim 사용팁

3.1. 화면 나누기

vim 은 수평나누기와 수직나누기를 제공한다. 수평나누기는 ":split [파일이름]" 수직나누기는 "vs [파일이름]" 으로 나눌수 있다. 파일이름을 지정한 경우, 새로 만들어진 창에는 파일이름 을 가지는 파일이 열리고, 파일이름을 지정하지 않을경우 똑같은 파일이 열린다. 이 기능은 현재 파일의 다른 부분을 참조하고 싶을때 유용하게 사용할수 있다(참조하는 부분으로 이동하기 위해서 왔다갔다 하지 않아도 되므로). 또한 ":10split [파일이름]", "10vs [파일이름]" 등으로 창의 크기를 조절해 줄수도 있다. 창 나누기는 2개 이상 나누기도 가능하다.

이렇게 창을 분할시켜 놓으면 쏘쓰를 참조하기도 편하고, 무엇보다 편집(삭제,복사,붙이기)가 가능하므로 훨씬더 작업을 수월하게 할수 있다.

3.1.1. 화면 이동

명령 모드에서 CTRL+ww 를 입력하면 된다. 그러면 아래창으로 이동한다. 임의로 이동하기 위해서는 Ctrl+w 를 입력한 상태에서 이동명령[hjkl]를 이용하면 원하는 방향으로 창이동이 가능하다.

3.1.2. 파일 네비게이션

vim 6.0 부터는 파일네비게이션 기능이 존재합니다. 예를들어 vi 로 파일을 열때 파일을 디렉토리로 지정하면 해당디렉토리의 내용이 네비게이션 되고, 디렉토리 이동및 파일 선택이 가능하다.

	
vi ./   # 현재 디렉토리내용을 네비게이션 해준다. 
				

3.2. 파일 네비게이션 바 만들기

윈도우의 울트라 에디트와 같은 프로그램을 보면 왼쪽에 파일네비게이션이 있어서 원하는 파일을 바로 선택해서 편집하는 기능이 있다. vim 으로도 이러한 기능을 구현할수 있다. 이것은 vim 의 file navigation 기능과 창나누기 기능을 이용해서 구현하면 된다.

vi 가 실행되 상태에서 수직창 나누기 기능을 이용해서 ":20vs ./" 명령을 내려보자 그럼 그림과 같이 오른쪽에 파일 네비게이션 바가 생김을 알수 있다.

그림 1. 파일네비게이션을 만든 화면

이제 열기를 원하는 파일위치에 가서 shift+o 를 입력해보자, 그럼 옆의 편집창에 새로운 파일이 열리는것을 알수 잇을것이다. 여기에 더해서 편집장을 split 로 나누면, 여러개의 파일을 오가면서 편집이 가능해질 것이다. [vim 7에서는 shift+p로 단축키가 변경됐다]

3.3. 여러개의 파일 편집하기

위에서는 창나누기를 이용한 여러개의 파일편집에 대해서 알아봤는데, 또다른 방법이 있다. 처음에 vim 을 통하여 여러개의 파일을 open 하고 여러개의 열린 파일을 이동하면서 편집하는 방법이다. 먼저 vim을 다음과 같이 실행시킨다.

 
[yundream@localhost test]# vim file1.txt file2.txt ...
			
그러면 처음 화면은 file1.txt 편집화면일것이다. 2번째 파일인 file2.txt 편집화면으로 넘어가길 원한다면(앞에 있는 파일 편집)
:n
			
file2.txt 에서 file1.txt 를 편집하길 원한다면(뒤에 있는 파일편집)
:e#
			
split 를 이용해서 여러개의 파일을 편집할때와 마찬가지로, 각종 편집기능(복사,삭제,붙이기)이 서로 공유되므로 편하게 작업이 가능하다.

3.4. 잠시 쉘로 나가기

보통 vim상에서 쉘명령어를 실행시키기 위해서 :![명령어] 를 사용하는데, 이것 보다는 Ctrl+z 를 이용해서 쉘로 빠져나가서 작업하는게 더 편하다. shell 이 job control 기능을 이용한것으로, 쉘에서 원하는 작업을 수행하후 fg 명령을 이용해서 다시 vi 편집 상태로 되돌아 올수 있다. vim 사용자를 보면 가끔 쉘작업을 하기 위해서 vim 을 아예 종료 시켜서 쉘로 빠져나간 다음에 작업을 하고 vim 을 다시 실행시키는 경우가 있는데, 이제는 그럴필요가 없이 좀더 편하게 작업을 할수 있을것이다.

3.5. 선택된 block 를 다른 이름으로 저장하기

split 기능을 이용해서 창을 나누고, 원하는 블럭을 선택해서 복사한다음에, 새로만든창에 가져다 붙이기를 하면 된다.

그러나 이방법은 조금 복잡한 감이 없잖아 있다. 이럴때는 블럭을 선택해서 :'<,'>w [파일명] 하면 좀더 간단하게 원하는 작업을 수행할수 있다.

3.6. 빠른 괄호 이동

C나 C++ 을 사용하다보면 제어문이나 함수에서 많은 괄호('{','(')를 만나게 된다. 이때 괄호의 제일 마지막으로 이동하고 싶을때가 있을것이다. 이럴때는 ']}' 를 사용하면 된다. '[{' 를 사용하면 괄호의 처음으로 이동한다.

3.7. 위치 마크(mark)하기

일종의 북마크기능으로 자주참조할만한 라인을 마킹해두고 필요할때 간단히 해당 마킹지역으로 이동하기 위해서 사용한다. 마킹을 위해서는 명령모드에서 m키를 눌러서 마킹모드로 들어가면 된다. 그리고 영문 [a-zA-Z]키중 아무거나 눌러주면 된다. 만약 a를 눌러주었다면, 현재라인은 a이름으로 마킹된다. 이후 작업을하다가 a마킹라인으로 가고 싶다면 'a 해주면된다. 이 상태에서 원래 라인으로 되돌아가고 싶다면 ''를 눌려주면 된다.

물론 다중마킹도 허용한다. 마킹할수 있는 문자는 단일영문자이다. 마킹에 사용되는 영문자는 대소문자를 구분함으로 최대마킹가능한 수는 27*2가 될것이다.

3.8. 폴더(접기) 기능이용하기

vim 6.0 에 새로이 포함된 좋은 기능으로 코드의 특정영역을 접을수 있다. 그럼으로 코드를 분석할때 쓸데 없는 부분을 감춰줘서 좀더 편하게 분석이 가능합니다. visual block 를 이용해서 원하는 영역을 선택한다음 :zf 를 이용하면 해당영역이 접힌다. :zo 를 사용하면 접힌영영을 원상태로 복구할수 있고 :zc 를 사용하면 해당영역을 다시 접을수 있다. 또한 다중 접기를 허용해서 접근구역을 다시 접을수도 있다.

3.9. 간단한 man 페이지 참조

vim 을 이용 코딩중에 함수의 프로토 타입이 생각나지 않을때 주로 man page 를 참조하게 된다. 보통은 창을 하나따로 띄워서 그곳에서 man page 를 보는데, 코딩중에 간단하게 해당 함수에 대한 man page 를 볼수 있다. man page 를 원하는 함수 위로 커서를 옮긴다음 Shift + k 를 입력하면 함수의 man page 가 뜰것이다. 'q' 를 입력해서 man page 를 종료시키면 원래의 vim 화면으로 되돌아온다.

3.10. 함수/변수명 자동완성

코딩중에 가장 범하기 쉬운 잘못중의 하나가 변수명및 함수명 오타일것이다. 또 변수명이 기억이 잘 나지 않아서 처음 선언한곳을 다시 확인하는 작업역시 코딩을 매우 번거롭게 한다. 이때 함수 자동완성 기능을 이용하면 이러한 염려들을 줄일수 있다.

int client_sockfd 라고 변수 선언을 했다고 하자. 코딩중에 client_sockfd 를 쓸일이 있다면 cli^p 를 입력해보자. 그러면 변수 이름이 자동으로 완성되는것을 볼수 있을것이다. ^p는 Ctrl+p 이다.

3.11. ctags 를 이용한 쏘쓰 분석

쏘쓰를 분석하는데 있어서 가장 중요한 것은 역시 함수를 분석해서, 함수가 어떤일을 하는지 알아내는 것이다. ctags 를 이용하면 이러한 쏘쓰 분석작업을 좀더 수월하게 할수 있다. ctags 와 관련된문서는 ctags 를 이용한 쏘쓰 분석 을 참고하기 바란다.

3.12. 자동들여쓰기

프로그래밍 할때 indent 는 쏘쓰코드를 보기좋게 만들기 위한 필수 사항이다. 보통 tab 을 주로 쓰는데,

:set ai
			
명령을 이용하면 자동적으로 indent (auto indent) 를 적용시켜주므로, 좀더 코딩에만 집중할수 있도록 도와준다.
:set noai 
			
명령을 사용해서 auto indent 상태를 해제할수 있다.

요즘의 vim 은 기본적으로 auto indent 상태이므로, 별다른 설정없이 편하게 사용가능하다. 그러나 웹에서 가져다 붙이기를 할때 여기에 auto indent 가 적용되어서 걷잡을 수 없이 tab 이 들어가는 경우가 생길때도 있는데, 이럴때 set noai 를 이용해서 auto indent 를 해제하고 가져다 붙이기를 하면 된다.

3.13. 탭사이즈 조정하기

쏘쓰에서 indent 를 위해서 주로 탭을 사용하는데, 보통 이 탭 사이즈는 8로 되어 있다. 그런데 8이란 탭사이즈가 때로는 너무 커서, 쏘쓰가 화면밖으로 나가서 오히려 쏘쓰 보기를 어렵게 만들때도 있다. 이럴때 는 탭사이즈를 줄여야 하는데 다음과 같은 명령을 통해서 탭사이즈 변경이 가능하다.

:set ts=4
			

3.14. 라인 넘버링

코딩하다보면 라인넘버가 있으면 할때가 있다. 그럴때는

:set nu 
			
하면 된다.

그림 2. 라인 넘버링

라인넘버를 없애고 싶다면,
:set nonu
			
하면 된다.

3.15. 코드를 HTML로 저장하기

vim 은 또한 코드를 HTML 형태로 저장하는 기능을 가지고 있다. 이 기능을 이용하면 syntax highlight 된 상태 그대로 HTML로 변환이 가능하다. 쏘쓰코드의 예제를 만들어서 웹상에 올리고자 할때 유용하게 사용할수 있는 기능이다.

:so $VIMRUNTIME/syntax/2html.vim 
			

3.16. vim 설정파일 만들기

지금까지 우리는 다양한 설정을 통해서 vim 을 좀더 쉽게 사용하는 방법을 알아 보았다. 그런데, 탭사이즈를 적용하기 위해서 vim 을 실행시킬때 마다 ":set ts=4" 이런식으로 하면 작업이 매우 귀찮을것이다. 이럴때는 vim 을 위한 설정파일을 만들어서, vim 이 시작할때 설정파일을 읽어들여서 환경이 자동으로 설정되도록 하면된다.

자기의 계정(Home) 디렉토리에 보면, .vimrc 라는 파일이 존재 할것이다. (존재하지 않는다면 만들도록한다) 이것이 설정파일로 아래와 같은 방법으로 자기가 원하는 내용을 설정하면 된다.

set ts=4
set nu
			

"vi 에디터"를 사용하신다면 명령어를 이용해서 개행문자를 변환할 수 있습니다.

명령모드에서 :se ff=dos 를 입력하고 :w 로 저장하면 "MS 윈도우"용 텍스트로 저장됩니다.
반대로 :se ff=unix 를 입력하고 저장하면 "리눅스"용 텍스트로 저장됩니다.



출처 : https://realpython.com/blog/python/vim-and-python-a-match-made-in-heaven/?utm_source=Python+Weekly+Newsletter&utm_campaign=14f4381681-Python_Weekly_Issue_215_October_29_2015&utm_medium=email&utm_term=0_9e26887fc5-14f4381681-312705345#vim-extensions

VIM Extensions

VIM can do a lot of what developers need right out of the box. However, VIM is also massivelyextensible and there are some pretty killer extensions that make VIM behave more like a “modern” IDE. So, the very first thing you need is a good extension manager.

Extensions in VIM are often referred to as bundles or plugins.

Vundle

VIM has several extension managers, but the one we strongly recommend is Vundle. Think of it as pip for VIM. It makes installing and updating packages trivial.

Let’s get Vundle installed:

$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

This command downloads the Vundle plugin manager and chucks it in your VIM bundles directory. Now you can manage all your extensions from the .vimrc configuration file.

Add the file to your user’s home directory:

$ touch ~/.vimrc

Now set up Vundle in your .vimrc by adding the following to the top of the file:

set nocompatible              " required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)


" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

That’s it. You’re now set up to use Vundle. Afterward you can add the plugins you want to install, then fire up VIM and run:

:PluginInstall

This command tells Vundle to work its magic – downloading all the plugins and installing/updating them for you.

vim plugin install


For Windows users, check out the Windows Installation Instructions.


aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

반응형
Posted by Real_G