레이블이 gvim인 게시물을 표시합니다. 모든 게시물 표시
레이블이 gvim인 게시물을 표시합니다. 모든 게시물 표시

2017년 11월 27일 월요일

Vim의 확장 기능; Key Mapping

시작하며....


오늘 주제를 정한 거는 Help였는데 정리가 잘되지 않아서 갑자기 주제를 바꾸게 되었어요.

Help는 조금 더 진행을 한 다음에 나와도 괜찮을 거 같다는 생각이 들었기 때문이죠.

Key Mapping도 굉장히 중요한 Vim의 능력 중의 하나예요.

그러니 같이 알아보아요!!


Windows에서의 Ctrl+F


지난 강좌에서 Ctrl+F의 명령어는 Page Down과 같다고 했지요.

하지만 윈도우에서 Ctrl+F를 눌렀을 때는 다른 프로그램처럼 찾기가 되는 걸 볼 수 있어요.



리눅스에서 동일하게 Ctrl+F를 눌렀다면 아마 Page Down이 되었을 거예요.

그런데 윈도우에서는 그렇지 않다니 이상하지요??

그 이유는 윈도우 vim의 설정 파일을 보시면 알 수 있어요.

"C:\Program Files (x86)\Vim\_vimrc"

위의 파일을 열면 아래와 같은 설정을 볼 수 있어요.



source는 해당 파일에서 실행 가능한 명령어를 읽어서 설정을 하는 거죠.

"$VIMRUNTIME/mswin.vim"의 위치는 아래와 같아요.

"C:\Program Files (x86)\Vim\vim80\mswin.vim" 

저 파일을 열어서 보면 아래와 같은 부분을 확인할 수 있어요.

if has("gui")
  " CTRL-F is the search dialog
  noremap <C-F> :promptfind<CR>
  inoremap <C-F> <C-\><C-O>:promptfind<CR>
  cnoremap <C-F> <C-\><C-C>:promptfind<CR>

  " CTRL-H is the replace dialog
  noremap <C-H> :promptrepl<CR>
  inoremap <C-H> <C-\><C-O>:promptrepl<CR>
  cnoremap <C-H> <C-\><C-C>:promptrepl<CR>
endif


if문에서 gui라는 Feature를 가졌느냐고 물어보네요.

가졌을 때 noremap, inoremap, cnoremap 라는 명령어가 수행된다라고 볼 수 있지요.

우선 저 명령어가 무엇인지 알아보기 전에 기본형을 알려 드릴게요.

map KEY 명령어_or_KEY

대충 저 정도가 형식으로 보면 되고요.

KEY명령어나 다른 Key로 Mapping 된다고 보시면 쉬울 거 같아요.

저 map 명령어는 크게 2가지로 구분할 수 있지죠.


  • map의 적용 모드 별
  • map의 용도 별


이 구분 방법으로 각각 자세하게 볼게요.


map의 적용 모드 별 구분


Vim의 가장 기초가 모드가 나누어져 있다는 거죠?

Mapping을 할 때에도 그때 그때 필요한 모드가 나누어져야 해요.

예를 들어 Normal 모드에서만 Mapping을 하고 싶을 때가 있을 텐데 Visual Mode 일 때도 Mapping이 되어 있으면 곤란하잖아요.

그래서 적용 모드 별로 map의 명령어가 조금씩 달라져요.


  • map : Normal, Visual, Select, Operator-pending
  • nmap : Normal
  • vmap : Visual and Select
  • xmap : Visual
  • smap : Select
  • omap : Operator-pending
  • map! : Insert and Command-line
  • imap : Insert
  • lmap : Insert, Command-line, Lang-Arg
  • cmap : Command-line


사실 막~ 외울 필요는 없어요.

:help map-overview

위의 명령어를 적으면 map에 대한 모드별 정보를 언제든 알 수 있어요.

그러니 help 명령어만 아시면 특별히 외울 필요 없다는 거죠.

그리고 map이라는 명령어를 기본으로 Prefix나 Postfix가 붙어 있는 형태이고 해당 문자들이 모드의 이름과 비슷한 점이 많아서 어렵지는 않을 거예요.


map의 용도 별 구분


용도 별로 아래와 같이 3가지로 나눌 수 있지요.


  • Key Mapping : map KEY 명령어_or_KEY, noremap KEY 명령어_or_KEY
  • Key Mapping 삭제 : unmap KEY, mapclear
  • Key Mapping 출력 : map, map KEY


위의 명령어는 가장 기본이 되는 명령어를 적은 거예요.

저 명령어에 모드별로 나누었을 때의 Prefix나 Postfix를 적어 주면 모든 map 명령어가 나오게 되지요.

물론 help 명령어로 찾아볼 수 있으니 무조건적인 암기보다는 help 사용법에 더 익숙해 지시는 게 좋을거 같아요.

사실 여기서 알아봐야 하는 건 map과 noremap의 차이가 더 중요한 거 같아요.


map과 noremap


map은 recursive mapping이고 noremap은 non-recursive mapping이라고 하네요.

recursive라는 의미가 순환인데 순환을 하면서 mapping이 된다는 의미로 보면 될 거 같아요.

map d y
map j d
noremap k d

위의 예를 가지고 이야기를 해 드릴게요.

처음 map을 보니 Key d를 Key y에 Mapping을 했어요.
( d -> y(복사) )

그러니 d를 눌렀을 때 y가 입력된 효과가 일어나게 되죠.

즉, 삭제하려고 했더니 복사가 되는 거죠.

그리고 두 번째 map을 보니 Key j가 Key d에 Mapping이 된다고 나오네요.
( j -> d )

그럼 여기까지 했을 때 Key j를 누르면 Mapping된 d의 본래 기능인 삭제가 될까요?

아니에요.

recursive라는 거처럼 d가 Mapping된 y까지 연결되어요.
( j -> d -> y(복사) )

그러니 j를 누르면 d가 불리고 d와 연결된 y가 최종적으로 불리게 되는 거죠.

하지만 noremap은 map과는 달라요.

recursive를 하지 않기 때문에 k를 눌렀을 때 Mapping된 d의 본래 기능인 삭제가 호출되는 거죠.
( k -> d(삭제) )

그러니 recursive를 하면 Mapping이 되지 않은 마지막까지 찾아가서 해당 명령어의 기능을 자신이 가지는 거라고 생각하면 될 거 같아요.

그럼 여기서 하나 질문...

위의 map 설정을 하고 아래와 같은 명령어를 입력하면 어떻게 될까요??

map y j

즉, y -> j -> d -> y 식이 되는 거겠죠??

일단 map 명령어는 문제없이 진행되는데 y, j, d 중의 하나의 명령어를 입력하면 아래와 같은 재귀맵핑 이라는 에러가 나올 거예요.



다시 Windows의 Ctrl+F


그럼 윈도우의 설정 파일에 적혀 있던 noremap, inoremap, cnoremap에 대해서 다시 볼까요???

<C-F>에 대해 적혀 있던 내용은 아래와 같아요.

noremap <C-F> :promptfind<CR>
inoremap <C-F> <C-\><C-O>:promptfind<CR>
cnoremap <C-F> <C-\><C-C>:promptfind<CR>

처음 명령어를 읽어 보면 Normal, Visual, Select, Operator-pending 상태에서 non-recursive로 Mapping을 하는데 Ctrl+F(<C-F>)는 :promptfind와 엔터(<CR>)이네요.

그러니 Ctrl+F를 눌러도 찾기가 나오는 거예요.

두 번째와 세 번째의 명령어는 각각 Insert Mode와 Command-line Mode에서의 Mapping이고요.

<C-\><C-O>는 Insert Mode에서 ESC를 누르면 커서가 한칸 앞으로 이동 하는 문제를 해결 한 후에 Command-line을 진입하기 위한 준비 작업입니다.

또한 <C-\><C-C>는 Command-line을 빠져 나가는 명령어 이고요.


Windows에서 Ctrl+F를 Page Down으로 사용하기


위의 내용이 길었지만 이걸 하는 방법에 대해서는 쉽게 알 수 있겠지요???

적용된 Mapping Rule을 삭제 하면 되요.

그건 unmap 명령어를 사용하면 되겠지요?

물론 Insert와 Command-line Mode에서도 모두 삭제 하도록 해야 하고요.

그럼 다음과 같은 명령어 셋이 나오겠지요??

unmap <C-F>
iunmap <C-F>
cunmap <C-F>


마치며....


실제로 예제를 든건 Ctrl+F에 Mapping된 명령어를 제거하는거 였지만...

그걸 위해 Mapping에 대한 전반적인 내용은 보았습니다.

사실 실전이 가장 중요한데...

이 Mapping은 나중에도 엄청 나오니까 그때 다시 보면서 연습을 하도록 할게요.

그럼 또 다음에 뵙겠습니다.

감사합니다.





2017년 11월 21일 화요일

Vim의 기본; Option과 설정 파일


시작하며....


무엇이든 하나씩 차근차근 배우는 걸 좋아합니다.

그리고 그 단계에는 왜 해야 하는지를 먼저 이해 하고 앞으로 나아가는 게 재미있더라고요.

누가 시켜서 억지로 넣는다기 보다는 왜 그걸 해야 하면 좋은지를 먼저 알고 나면 더 기억에도 남고요.

그러니 이번에도 왜 필요한지 알아 가면서 계속 진행하도록 할게요.


설정 변경


Vim은 기본적인 설정을 변경할 수 있어요.

물론 기본 상태로도 간단한 편집기로는 사용할 수도 있는데 Vim을 사용하는 분들은 개발자분들이 많겠지요?

그럼 개발자에 어울리는 형태로 변경하면 좋을 거 같아서요.

물론 개발하지 않는 분들도 각자 취항대로 변경 하는 방법을 알면 좋겠죠?

여기서는 일단은 제가 사용하는 설정들을 보여 드릴게요.

제가 설명을 안 드리는거 외에는 구글에서 검색 하여 해당 Option을 찾으면 돼요~


줄 번호 출력


저는 개발을 할 때 라인에 줄 번호가 있는 게 좋더라고요.

Source Insight 같은 Tool을 사용할 적에도 항상 기본적으로 줄 번호를 추가해 두곤 하죠.

그런데 아시는 거처럼 Vim의 기본 설정은 줄 번호가 출력되지 않아요.

그렇지만 개인이 원한다면 넣을 수 있죠.

명령어는 다음과 같아요.


  • :se[t] nu[mber]          


지난 번 강좌에서 Command-line Mode에 진입한 거 기억하시죠?

그거처럼 :를 눌러서 Command-line Mode로 변경하시고 set number를 적으면 돼요.

set은 가장 흔하게 사용되는 Command 중에 하난데요.

option에 대해 Setting을 하거나 option의 값을 변경하는 역할을 하지요.

option의 종류가 궁금하신가요?

그럼 다음과 같은 명령어를 적어 보세요.


  • :help option-list


그럼 set 으로 설정할 수 있는 option의 종류들이 나와요.



위의 그림은 일부이고 아래로 쭉~~ 내려서 확인할 수 있지요.

방금 확인하니 381개 정도가 있네요.

많지요?? ㅎㅎㅎ

그러니 필요한 건 찾아가면서 알아 가야 한다고 말씀드리는 거예요.

이게 외울 수 있는 정도가 아니거든요...;;;;

그리고 위에 se[t]라고 적은 부분을 보고 이상하다고 생각하실 수 있는데요.

이건 set의 se까지만 적어도 명령어로 인식 된다는 거예요.

그러니 :se nu 까지만 적어도 :set number와 같다는 거죠.

그리고 다시 줄 번호를 보이지 않게 하는 방법은 아래와 같아요.




  • :se[t] invnumber

별로 어려운 건 없지요?? ^^


swp, un, backup 파일들


제가 폴더에 source.c라는 파일을 만들고 이걸 Vim으로 작업했다고 해 봐요.

작업이 완료되고 저장을 하면 어떻게 될까요??

당연히 저장되겠지요?? ^^

뭐.. 그런 의도로 물어 본 건 당연히 아니겠죠..;;;

일단 같은 폴더로 이동해 볼까요????



분명히 source.c 라는 파일밖에 없었는데 무료 3개의 파일이 더 생겼어요.

각각 무엇인지 알아볼까요?


.source.c.swp


swap 파일이라고 불러요.

하는 일은 혹시나 PC가 갑자기 꺼져서 저장한 파일을 날려야 할 때 있잖아요?

그때 swap 파일이 있으면 복원이 가능하데요.
(그런데 저는 지금까지 복원을 해 본 적이 없어요.ㅎㅎ)

또 복수의 사용자가 같은 파일을 수정하는 걸 막을 수 있죠.

굉장히 예전에는 개인용 컴퓨터 보다는 동시에 같이 사용하는 경우가 많았다고 해요.

그래서 동시에 한 파일에 접속 하는걸 막아야 했던거죠.

만약 위의 두 기능을 사용하지 않을 거라면 아래 명령어를 입력 하시면 돼요.


  • :set noswapfile


만약에 swp을 사용하고 싶다면 no를 뺀 :set swapfile을 입력 하면 돼요.


.source.c.un~


un이 붙은 거 보니 undo 느낌이 나지 않나요??

맞아요.

우리가 문서를 편집하고 저장 후 종료를 했어요.

그리고 다시 문서를 편집하려고 했더니 이전에 수정했던걸 다시 원복하고 싶은 거예요.

그래도 이미 Ctrl+z를 눌러도 종료를 했으니 당연히 원복되지 않겠죠.

하지만 Vim은 un~ 파일이 있기 때문에 원복을 할 수 있어요.

편집을 하고 저장한 다음에 종료하고.. 다시 열어 보세요.

u를 누르시면 이전에 편집한 게 다시 원복 될 거예요.^^

하지만 이 기능이 필요 없으면 아래 명령어를 입력 하시면 됩니다.

필요 하다면 하단 명령어를 입력하시고요.


  • :set noundofile


사실 있으면 좋겠지만...

폴더 안에 이것저것 많이 생기는 게 저는 별로 안 좋더라고요.

그래서 일단은 막아 두었지요.

다시 사용하고 싶으면 아래 명령어를 입력 하시면 되요.


  • :set undofile



source.c~


그냥 단순 백업 파일이에요.

backup 자체를 하기 싫다면 아래 두 명령어를 입력해 주세요.

:set nobackup
:set nowritebackup

writebackup은 백업을 만드는 순서를 말하는 거예요.

writebackup : 저장 후 Backup 파일 생성
unwritebackup : 저장 전의 자료로 Backup 파일 생성 후 저장

사실 writebackup의 옵션은 큰 상관이 없는데 혹시 Backup에 대해 알고 싶으신 분이 있을지 몰라 적어 두네요.


열심히 그렸는데...

한번 봐 주세요~

어려울건 없을거 같은데 모르시겠으면 알려 주세요.

다시 설명해 드릴게요.

혹시 백업 파일을 만드려면 no를 뺀 :set backup 하시면 되는 거 아시죠?? ^^


Tab 과 space


회사 마다 그리고 언어마다 각자의 코딩 스타일이 있지요.

그 중에 Tab과 Space는 가장 기본적인 스타일인 거 같아요.

그럼 Tab은 몇 칸으로 설정(기본은 8칸) 할지 그리고 Tab을 눌렀을 때 Space로 채우게는 어떻게 할지를 알려 드릴게요.


  • :set softtabstop=4 tabstop=4 shiftwidth=4 expandtab
  • :set smartindent


우선 Tab의 간격에 대한 옵션은 softtabstop과 tabstop, shiftwidth가 다 인거 같아요.

softtabstop은 Tab 키를 눌렀을 때 이동하는 정도예요.

shiftwidth는 "&gt;&gt;"나 "&lt;&lt;"를 입력했을 때의 이동 간격이고요.

tabstop은 잘 모르겠어요.;;;

설명을 읽어 봐도 잘 이해가 되지 않더라고요..;;;

일단 다른 분들도 같게 두더라고요.

expandtab은 Tab을 space로 변경하는 옵션이에요.

저는 보통 space로 적용하는 게 편하더라고요.

지금 회사에서 적용하는 코딩 스타일도 그렇고요.

smartindent는 자동으로 indent를 해주는 건데요.

엔터를 쳐서 새로운 라인으로 같을 때 위의 Tab과 같은 간격 혹은 Tab을 하나 더 나아가서 첫 글을 적도록 하는 거예요.

사용하시면서 엔터를 쳐 보시면 아실 거예요.


우선 이 정도의 설정만 하면 기본적으로 편집 관련한 옵션은 다 적용한 거 같아요.

물론 필요하시면 google에게 문의를 하면 다 나오기도 하더라고요.

정 모르시겠으면 저한테 물어보세요.

같이 찾아 드릴게요.^^


설정 파일 _vimrc


위 처럼 set을 통해 원하는 데로 설정을 하셨나요??

그런데 아세요???

해당 vim을 종료하고 다시 vim을 켜면 이전에 설정했던 내용이 모두 사라져요.

그래서 다시 설정해야 하죠.ㅠㅠ

그런 일을 막기 위해서 설정 파일인 _vimrc라는게 있지요.

OS 별로 _vimrc의 위치가 달라지는데 일단은 윈도우에 대해서만 알려 드릴게요.

"C:\Program Files (x86)\Vim\_vimrc"

위의 파일이 설정 파일이에요.

해당 파일을 열어서 아까 위에서 설정한 내용을 아무 위치에 적어 넣으면 돼요.

어느 위치인지 걱정되시면 가장 아래에 추가해 주세요~

set noswapfile
set nobackup
set nowritebackup
set noundofile
set smartindent
set softtabstop=4 tabstop=4 shiftwidth=4 expandtab "tab to 4 spaces
set number

보시는 거처럼 앞에 ":" 부분을 빼고 추가해주시면 되지요.

이렇게 무언가 처음부터 설정을 하려면 _vimrc를 이용하시면 됩니다.

간단한 설정이지만 본인의 입맛에 수정할 수 있다는 점에서 도움이 되었으면 좋겠습니다.

감사합니다.


2017년 11월 19일 일요일

Vim의 기본; 편집 및 종료



시작하며....


MS Word나 한글 같은 프로그램을 이용하여 글을 쓸 때 입력 이외에 가장 많이 하는 것 무엇일까요?

개인차가 있기는 하겠지만 저 같은 경우는 수정을 위해 이동, 삭제, 복사, 붙여넣기, 저장이 될거 같습니다.

아마 이 정도만 알아도 편집기로서의 능력은 충분할거라 생각을 해요.

그러다가 Vim에 대한 관심이 생긴다면 그 후에 더 많은 것을 해도 되겠지요.


0. 준비


배울 때는 단순하게 외운다고 해서 되는건 아니라고 봐요.

실제로 해 보는 것이 가장 좋겠지요.

그래서 저도 해보자고 하고 싶습니다.

시간이 괜찮으신 분들은 아래의 내용을 미리 vim_basic.c로 만들어 주세요.
(아래에는 오류가 있으니 일단 만들어만 두세요~)

#include <stdio.hh>

int main()
{
    printf("Hello World");
   
    int i;
    int sum;

    for ( i = 0; i < 10; i++ ) {
        sum = sum + i;
    }
   
    printf("sum = %d", sum);

    return 0;
}

그리고 Vim으로 열어서 진행 하도록 하겠습니다.

여는 방법은 해당 파일 위에 마우스 커서를 두고 우 클릭을 하면 "Edit With Vim"이 보일거예요.

그걸 클릭하시면 아래와 같은 창을 보실 수 있을거예요.




1. 이동


키보드에 손을 올려 보세요.

그럼 왼손의 집게손가락이 키보드 F에 올려지고 오른손의 집게손가락은 J에 올려지게 되죠.

이 상태에서 사람이 가장 편하게 누를 수 있는 키보드가 무엇일까요??

움직이지 않는 상태니까.

아마 asdf jkl; 중에 하나의 키보드가 될거예요.

그래서일까요? Vim은 가장 편한 키보드 중 j를 아래로 이동하라는 명령어로 설정해 두었어요.

그리고 왼쪽 옆에 있는 키인 h를 왼쪽 이동, k는 위로 이동, l은 오른쪽 이동으로 설정 되어 있어요.



그럼 이동을 하셔서 아래 그림의 h까지 커서를 이동해 보세요.
(이동은 Normal Mode에서만 가능해서 혹시 글자가 입력 되신다면 Esc키를 누르시고 이동하시면 됩니다. 대신... 절대 화살표는 사용하지 마세요. 연습 중이잖아요~)



조금더 편하게 이동하는 방법이 있는데 그건 다른 편에 또 이야기 하겠습니다.


2. 삭제


글자를 삭제 하는 방법은 여러가지가 있어요.

그 중에서 제가 자주 사용하는 것만 알려 드릴게요.
(그 외의 명령은 필요하시면 찾으시면 나올 것이고 없다면 직접 만드셔도 되요.^^)


  • x : 커서 위의 글자 하나를 삭제
  • dd : 한 줄 삭제
  • diw : 한 단어 삭제
  • v[영역선택]d : 영역을 선택하여 삭제
  • V[영역선택]d : 줄 단위를 선택하여 삭제

  • u : 수정 취소
  • Ctrl+r : 수정된거 재복구


위의 명령어는 모두 Noraml Mode에서 사용되어 집니다.

지금은 h를 하나 삭제하려고 하는 것이니 x만 눌러서 삭제를 하도록 하겠습니다.

그럼 아래 처럼 되겠지요.



아래 보니 "printf("Hello World");" 부분이 있는데 이건 삭제를 하죠.

해당 줄에 커서를 두고 dd를 눌러 보세요.

그럼 삭제가 될거예요.



diw는 아무 곳에 가서 한번 테스트를 해 보세요.

만약에 잘못 삭제를 하였다면 u를 누르시면 복원이 되고요.
(윈도우의 Ctrl+z와 같은 효과입니다.)

그리고 u를 너무 많이 눌렀거나 실수로 눌렀다면 Ctrl+r을 누르세요.

복구 버튼 입니다.

다음은 v와 V인데요.

모드 중에 v와 V에 대해 이야기 한 적 있죠.

v나 V를 누르게 되면 Visual Mode가 되는데...

한번 눌러 보세요.

그리고 hjkl(이동키)로 이곳 저곳으로 이동을 해 보세요.

그럼 선택 영역을 지정 할 수 있지요.

아래 그림 처럼 선택을 한 후에....



d를 누르시면 삭제가 되지요.

다시 u를 눌러서 원복을 해 보세요.

V(대문자)는 한 줄 단위로 선택영역을 지정하는거예요.

원하는 만큼 선택하고 d를 누르면 선택한 모든 줄이 삭제 되지요.


3. 복사와 붙여넣기


삭제를 했으니 복사를 해 볼까요??

제가 자주 사용하는 복사 명령어는 다음과 같아요.


  • yy : 한 줄 복사
  • yiw : 한 단어 복사
  • v[영역선택]y : 선택된 영역 복사
  • V[영역선택]y : 선택된 줄 복사



  • p : 복사된 부분 붙여넣기


삭제인 d 명령어 대신 y 명령어를 사용해요.

다른 편집기에서 사용하는 Ctrl+c는 copy의 약자인데... y는 yank라고 잡아 채다의 느낌이라네요.

그럼 붙여넣기는 무엇일까요.

paste인 p를 사용하면 됩니다.

그리고 하나 더 이야기 해 드리고 싶은 것이 있는데요.

d 입니다.

d는 위에서 삭제 하기로 알려 드렸지만..

단순 삭제 보다는 자르기라고 보시는게 더 좋아요.

그러니 d로 삭제 하고 p를 누르면 삭제된 내용이 붙여 넣어지는 것을 볼 수 있을거예요.

d와 p를 이용해서 테스트 해 보고 u로 원복해 보세요.


4. 입력


입력 하려면 어떻게 하면 될까요?

굉장히 단순한데...

Input Mode로 진입하면 됩니다.

Input Mode로 진입을 할 때 제가 자주 사용하는 명령어는 다음과 같아요.


  • i : 현재 커서 앞에서 입력 가능 <= 가장 사용 빈도 높음
  • a : 현재 커서 뒤에서 입력 가능
  • I : 현재 라인 맨 앞에서 입력 가능
  • A : 현재 라인 맨 뒤에서 부터 입력 가능
  • o : 다음 라인 맨 앞에서 입력 가능
  • O : 이전 라인 맨 앞에서 입력 가능


보통은 i를 가장 많이 사용하는데 조금 익숙해 지면 다른 경우로도 연습을 해 보세요.

키보드를 하나라도 적게 입력 하고 사용하는게 좋으니 익숙 해 지면 더 편하게 입력을 할 수 있게 되겠죠.^^

그리고 여기서 하나를 말씀을 드리면 Input Mode에서는 hjkl로 이동할 수가 없어요.

그러니 Input Mode 일 때는 어쩔 수 없이 화살표로 이동을 해야 하는데...

화살표 사용이 너무 싫다면 Esc 키를 눌러 Normal Mode로 빠져 나가 이동 후 다시 i를 눌러 Input Mode로 오시면 되지요.^^

그럼 마무리를 위해 입력을 하나 하죠.

함수 시작 전 첫 줄에 printf("Hello Vim\n"); 이라고 입력해 보시겠어요?

최종 결과물은 다음과 같겠네요.




5. 저장 및 종료


이렇게 수정을 한 후에 저장을 해보겠습니다.


  • :w : 저장
  • :q : 종료
  • :wq : 저장 후 종료
  • :w! : 강제 저장
  • :q! : 강제 종료



":" 글자 기억하시나요??

바로 Command-line Mode로 진입할 수 있는 명령어 입니다.

:를 누르면 아래 부분에 글을 입력 할 수 있게 커서가 나와요.

그림....

여기에 w를 입력하고 Enter를 누르면 저장이 된거예요.

그리고 w 대신에 q를 누르면 종료가 되어요.

w를 누르고 q를 입력해 보시면 Vim이 종료 되는 것을 확인 할 수 있지요.

명령어 뒤에 !를 누른다면 강제라는 의미인데....

예를 들어 저장하지 않고 종료를 하려고 할 때 :q만 입력 하면 Vim은 저장이 되어 있지 않다고 종료를 거부해요.

그럴 때 !를 뒤에 붙여주면 강제로 종료를 하게 되는거죠.


이제 Mode는 모두 배우게 되었고 가장 기본 적인 편집 능력까지 가지게 되었습니다.

남은건...

익숙해 지는거죠!!

그리고 설정을 조금씩 바꾸는 방법에 대해서 배워 볼게요.

감사합니다.^^


2017년 11월 18일 토요일

Vim의 기본; 윈도우 Vim 설치 및 모드에 대해서


윈도우 Vim 설치 및 모드에 대해서


시작하며...


보통 Vim을 처음 보게 되는 곳은 리눅스에서 개발을 할 때 일거예요.
(개발자 외의 분들은 더더욱 모르겠지요.)

개발자가 처음부터 찾아서 Vim을 알고 사용했다면 선배나 지인이 추천을 해서가 아니었을까요?

저는 리눅스에서 개발을 하는 사람으로 어쩔 수 없이 Vim을 봐야 했지요.

그 후 Vim을 사용하면서 그 편리성에서 빠져 나오지 못하고 윈도우에서도 사용하고 싶다는 마음에 이렇게 글을 쓰게 되었네요.

혹시 자신은 윈도우라서 Vim을 사용하고 싶어도 못 쓴다는 분들을 위해 일단 설치 하고 기본 Vim을 보도록 하죠.


윈도우 Vim 설치


물론 윈도우에서는 좋은 편집기들이 있습니다.

그래도 Vim의 매력에 한번 빠지면 꼭 다른 OS에서도 사용을 하고 싶게 되더라고요.

저는 윈도우, MAC과 안드로이드에도 Vim이 설치가 되어 있습니다.
(안드로이드는 자주 사용되지는 않지만 그래도 설치는 해 두었어요.^^)

Vim을 알기 위해서는 일단 설치를 하고 사용해봐야 하니 우리나라에서는 가장 보편화된 OS인 윈도우에서 설치 하고 명령어를 알아 보죠.

https://vim.sourceforge.io/download.php#pc

위의 사이트에서 가장 최신의 실행 파일을 받으면 되요.

현재(2017.11.18)는 "gvim80.exe"가 가장 최신 버전이네요.

설치는 단순하게 Yes와 Next를 누르면 될거예요.

그럼 바탕 화면에 아래와 같은 파일들이 생겼다면 설치가 완료된 것입니다.


gVim이란 GUI Vim의 약자인데 크게 중요한건 아니니 넘기셔도 되요.

위의 그림 중에 gVim 8.0을 클릭하여 실행 하면 아래와 같은 그림이 나와요.


그리고 한번 화살표를 통해 이동해 볼까요??

아마 커서가 움직이지 않는다는 것을 알 수 있을거예요.

참으로 답답하죠.

그리고 어떤 키는 눌러도 입력조차 되지 않아요.

예를 들어 "e"를 누른다면 경고음만 들릴 뿐 아무런 동작도 하지 않지요.

이런 점이 처음에 Vim을 어렵다고 여기는 것인데...

사실 알고 보면 별거 없지요.

이제 하나씩 배워 보도록 하지요.


모드에 대해서


Vim을 처음 다룰 때 가장 기본이 되는건 Mode라는 것을 알아야 한다는 거죠.


위에 처럼 Vim은 4가지 모드로 나뉘어 지죠.

각 모드로 진입을 하기 위해서는 화살표 방향에 있는 알파벳이나 Key를 누른다면 해당 모드로 진입을 할 수 있습니다.

그리고 각 모드를 간단하게 설명하면 아래와 같아요.


  • Normal Mode(Command Mode) : 처음 Vim을 열면나오는 모드로 이동이나 복사 같은 명령어(Normal Command)를 실행하는 모드
  • Visual Mode : 글을 영역 별로 선택 할 때 사용하는 모드
  • Command-line Mode : Vim에 명령어(Normal Command외의 Command)를 실행하거나 검색을 위한 모드
  • Insert Mode : 입력을 위한 모드

각 모드의 특징은 위와 같은데 사실 글 보다는 그림으로 보면서 진행하면 더 좋기는 해요.

그렇지만 실제 예제를 진행하면서 각 모드에 대해 더 알아 보도록 하겠습니다.