'vi'에 해당되는 글 2건

  1. 2012.11.19 [Setting] VIM by 당신은 천하보다 귀중합니다. av930
  2. 2012.11.19 [단축키] VIM by 당신은 천하보다 귀중합니다. av930

[Setting] VIM

개발툴:Editor/VIM 2012. 11. 19. 19:03

Professional Editor Settings < 게시물은 Open Blog Site 저작권이 있음 >

참고로, 아래 화면은 참고로 NerdTree+ Tagbar+ SourceExplorer+ Jellybeans color scheme 적용한 화면입니다. 그럼 시작합니다.  

   

   

  • VI 소개

Vi 1976 Bill Joy line editor ed(Ken Thomson) 불편함을 느껴 만든 것으로 줄씩만 편집 가능한 단위 편집기(ed) 아니라, 화면을 보면서 편집 가능하다는 뜻에서 비쥬얼 에디터(VIsual editor)라고 이름 짓게 되었다.

당시에는 컴퓨터에 코드를 넣어놓고 그것을 line 읽어와서 수정하거나 삭제 또는 추가하고, 다시 원하는 라인을 읽어와 해당 line 대해서 수정/삭제/추가하면서 구동시켰다고 한다. Memory 작은 시절 어쩌면 당연한 이야기일지는 몰라도 상당히 불편한 작업임에 틀림이 없었다. 시절의 line editor concept으로 만들어 것이 Linux 명령어인 sed 이다.

다음은 line editor ed 실행 화면이다. 명령어 사이 사이로 txt 있다. 대화식으로 원하는 것을 요청을 해야만 어떤 동작을 해준다. 최근의 editor windows 개념은 기본서비스(default) 훌륭하다는 것이다. 그것에 대한 부가가치는 지불해야 한다.

run ed editor

read 1240 byte

Print #1~#5

   

     

   

   

   


Delete #3

Print #1~#5

   

   

   

     

   

Search "missing"

          

   

현재 vi라고 한다면 당연히 original VI 아닌 1991년에 Bram Moolenaar  vi upgrade해서 만든 "VIM" 말한다. Vi 실행한다고 해도 실제로는 vim으로 symbolic link 걸려있는 것을 확인할 있을 것이다(참고> ls -al `which vi`). 그러나 문제는 VIM(VI Improved) 변종이 너무 많아, 사실 자신이 정확히 어떤 환경의 vim 사용하고 있는지 알기 어렵다는 것이다. 물론 대개의 경우 필요도 없으나, 여기까지 읽은 당신은 vim IDE 쓰고 싶은 사람일 것이므로일단 Mac VIM이나, GVIM, terminal VIM 등의 category로는 분류가 가능하다. 그러나, 세부야 어떻게 되었던, 현재 사용하고 있는 것은 VI 아닌 VIM 사용하고 있다는 사실이다.

< GVIM >                                                                                                      < Mac VIM >

   

  보통 VI 처음 사용하게 되는 사람들이 겪는 가장 불편한 점은 ESC key 누르면mode change되어 원하지 않게 입력이 되거나, 아무 입력도 되는 점이다. 마우스가 없던 시절 나온 editor이므로 GUI button 아닌, key on/off 의해 mode change 되어야 하는 시절이라 ESC 당시엔 매우 탁월한 선택이었다. 그러나 현재의 ESC key 대한 느낌 역시 " 이렇게 만들었어?" 라는 불만 섞인 말이 자연스럽게 나오게 만든다. 하지만 VI 만들던 당시 키보드를 살펴보면 원래 의도는 그것이 아니었음을 있다.

   

   

참고로 emacs 역시 이러한 key pattern 마찬가지인데 2 이상의 CTRL(meta) key 난무하는 emacs 최적화 keyboard 역시 ctrl 위치가 지금의 keyboard 형태는 아니었다고 한다. 현재까지도 VI Emacs진영 모두 황금위치에 배치된 caps-lock key 어쩔 몰라 난감해 하고 있다. 이런 이유로 VI user중에는 CAPS TAB key ESC 설정하여 사용하는 사람도 있다. (http://vim.wikia.com/wiki/Avoid_the_escape_key)

요즘 처럼 다양한 OS 일반적인 시대에 Linux mac 그리고 windows 오가면 programing 해야겠다고 하면, vi 수렴하게 된다. 물론 최근에는 다양한 고급기능을 갖춘eclipse 수렴할 수도 있으나, 아직은 기본(performance, memory, management) 충실치 못한 것이 사실이다. 그렇다고 vi 쉬운 것도 아니다. editor마다 넘어서야 하는 진입장벽이 있다는 것이다. 어째 "vi notepad 아닌 notepad++정도로 써야겠다" 마음먹으면 이제 골치 아파진다. 아주~~

이는 vimrc 파일을 handling해야 하는데, 문법이 상상을 초월한다. 참고로 이런 문법은 Ansi-C문법과 유사하며, 최근의 script 언어가 그렇듯이 한꺼번에 실행하는 batch mode 대화식의 interactive mode 모두 제공한다. Batch mode. vimrc 대부분의 plug-in들이 동작하는 방식이며, interactive mode: help functions 라고 치면, vimscript에서 사용할 있는 function, :help map라고 치면 vim shortcut keyboard mapping 보여주는 이런 식이다.

VI 처음 배우는 사람을 위해서 친절하게도 vimtutor라는 program 있는데, 여기서는 따라 해보기로 step by step으로 vi 배울 있는 program terminal형태로 지원한다. terminal 창에 vimtutor라고 쳐서 실행해보자.

   

   

  • Plugin 소개

위에서 editor 논쟁으로 발전될 같아, editor에서 대한 평을 가급적 줄였는데, Vi emacs eclipse 필적 가능하다는 것은 단순히 빠른 성능으로 고유의 영역을 확보했기 때문은 아니다. vi vimscript(vimL)라는 mini language 지원한 이후부터 기능이 기하급수적으로 확장되었으며, 이로써 현재 내로라하는 editor 어깨를 나란히 있게 되었다ViM.org 공식사이트에서 등록된plugin갯수을 확인해 있는데, 현재 4000 이상이 등록되어 있다. 개인적으로 이중에 100 가량을 test해보았는데, 5%수준인 200/4000 정도만 가치 있는 결과물로 추측된다.

   

이로써 있는 교훈은 
하나로 완성된 결과물로서 packaging되어 제공되지 않는 open source 수고로움이 대단히 소모적임을 있다. 참고로 Visual Studio 대비 완성도를 생각해보면서 어떤 개발 모델이 최고의 완성도를 가져오게 하는가? 라는 질문에 봉착하게 된다. 요새 Android 해답을 제시하고 있다
.

   

그럼 어떤 plugin들이 존재할까? 앞에서 말했지만 4000 이상의 plugin 존재하므로 "editor에서 상상할 있는 대부분의 기능들이 이미 개발되어 있다" 있는데, Vim.org에서는 왼쪽 아래그림과 같이 분류되어 있다.

   

   

   

VIM Version 확인

이러한 plug-in 설치하기 위해서는 먼저 해당 vi plug-in 구동될 있는 환경인지 검사해야 한다. 본인 역시 초기에 이런 배경 지식이 없어, plugin 설치하기 위해 일이나 삽질한 경험이 있다. Vim version 확인은 ":version" 명령을 치면 compile 환경이 나오는데, 여기서 GUI 어느 정도 지원하는지... Ruby등의 추가 language 지원하는지 검사해야 한다. 따라서 말은 사용자의 환경에 따라 vi 기능도 달라질 있다는 것을 의미하는데, 참고로 주로 여기서는 cygwin vi linux teminal vi 사용하였으며, GVIM이나 Mac VIM 사용하지 않았으나 둘은 terminal version보다 지원 범위가 높으므로 그냥 사용해도 무방하겠다. (참고로, 또한 plug-in 개발자도 천차만별이어서 그런지, plug-in 설치될 있는 최소 조건을 기록해놓는 사람이 있는가 반면, 대충~~그냥 배포 하는 사람들도 상당 많다는 것을 알게 되었다.)

   

   

   

Plugin 설치

plugin 설치하기 위해서는 plugin 보통 .vim dir아래 복사해서 넣으면 되는데, 간단히 zip 풀면 아래 directory안으로 자동으로 들어가는 구조로 된다. 그러나 이런 방식도 zip/tar 풀면 default 새로운 dir 추가로 생성된다든지, 기존의 다른 plug-in overwrite 한다든지 하는 이유 때문에, 제대로 설치 되지 못하는 경우가 많았다.

~/.vim (참고로 .vimrc .vim/ HOME directory 아래 위치하며, .vim dir plugin 보관하는 장소로 쓰인다.)

   

Vimball

그래서 vimball이라는 (VBA 확장자를 가진) 압축 파일로 packaging하여 제공하게 되었는데, 이는 vi xxx.vba 연후 "source %" 입력하면 vi 자동으로 plugin 해당 dir 풀어주는 형식이었다. 그러나 위의 2방식 모두 plugin 제거할 때는 마찬가지로 문제가 발생하게 되는데, 이는 어디로 무슨 파일이 들어갔는지, 이미 섞여버린 후여서 제거할 전혀 이력을 파악할 없다는 것이었다.

à  시기의 .vim dir 구조

~/.vim
├── autoload
├── colors
├── doc
├── ftplugin
├── indent
├── lib
├── plugin
└── syntax'

따라서 이런 불편함을 제거 하기 위해 아래와 같은 구조로 plugin dir Plugin마다 상호 독립화 하게 만든 것이 바로 pathogen이다.

   

~/.vim

├── autoload
├── bundle
│ ├── Align
│ │ ├── autoload
│ │ ├── doc
│ │ └── plugin
│ ├── FuzzyFinder
│ │ ├── autoload
│ │ │ └── fuf
│ │ ├── doc
│ │ └── plugin
│ ├── The-NERD-Commenter
│ │ ├── doc
│ │ └── plugin
│ ├── The-NERD-tree
│ │ ├── doc
│ │ ├── nerdtree_plugin
│ │ └── plugin
│ └── ... 
└── doc

   

이제 pathogen으로 dir 분리함으로 아주 쉽게 plugin 관리할 있게 되었는데, 좀더 추가적인 need 있었다. plugin 검색하고/설치하고/제거하고/update하는 자동화된 process 필요하였다. 이를 위해 vundle 등장하게 된다. vundle 마치 eclipse plugin 설치하듯이 설치를 가능케 하는데, update history 관리하기 위해서는 git source control system 미리 설치해주어야 한다. (여기서도 git 사용하니 미리 설치하길 바란다.). vundle install 방법은 https://github.com/tpope/vim-pathogen 여기에 있다
추가적으로 현재 github social-coding이라는 개발자의 coding community 발전해 가고 있는데, 현재까지 개발된 VI plugin 모두 github에서 hosting하고 있다. 그럼 앞에서 plugin 설치/관리가 매우 쉬워졌음을 알게 되었는데, 그렇다면 어떤 plugin 설치해야 할까? Vundle 유일한 단점은 plugin 대한 설명이 없다는 것인데…… 
그래서 http://www.vim.org/scripts/script_search_results.php 사이트의 설명과 고수들의 blog들을 찾아 다니면서 맛을 보는 일이 필요하다. 글을 작성하는 역시 일일이 나열할 없을 만큼 수많은 site 돌아다녀서, 죄송하고 민망하게도 들의 노고를 이렇게 정리해놓는 것으로 대신하려고 한다
.

   

  • VIM 설정 따라 하기

지금까지의 작업을 이제 하나씩 해보자
참고로. vimrc(보통 git으로 관리되는. vim 상위 dir. vimrc 존재) 역시 git repository 관리하면 편한데, 이는 여러 서버나 장소에 무관하게 동일한 설정으로 작업하기에 수월하기 때문이다. 아래 "따라 하기" 보면 알겠지만 .vimrc .vim 넣어서 관리하게 된다
.

  1. github.com 연결된 git repository .vim dir 생성
    shell
    에서
    > git clone git://github.com/av930/Android_VIM.git ~/.vim 
    shell
    에서 > ln -fs ~/.vim/.vimrc ~/.vimrc
  2. .vimrc 설치해야 하는 plug-in HOME dir .vimrc link파일등 초기화 작업을 자동 실행한다
    vi
    열린 상태에서 > F1+z 누르면 설치가 시작된다
    .
  3. vi 새로 시작한 , 한글 명령어로 사용법 확인 vi 사용 시작
    vi
    열린 상태에서
    > F1

 

참고 (다음은 중요하지 않으니 pass해도 좋음)

1. 주기적으로 해줘야 하는
shell
에서 > git pull origin #update하기, 최신 vim 수정을 받고 싶을경우

2. .vimrc 열고 VIM 변수를 편집.(여러개의 configuration사용시)
#default dir
~/.vim 그대로 쓰겠다면 과정은 pass
#
이는 .vimrc 파일 여러 개를 사용할 경우를 위해 설정해야 하는 값이다.
#VIMRC_PATH
변수(root dir) VIM_PATH(.vim dir) .vimrc파일이 존재하는 곳으로 설정

   

  • Android 개발자 초기화

Android 개발자를 위해 조금 편의성을 제공한다. 물론 fugitive 대부분의 plug-in들이 android 적용을 바탕으로 내용들이다. 그러나 요새 linux-kernel이나 기타 project 동일하게 적용되므로 common 사항이라 하겠다. 위에서 따라 하기에 이어 계속 따라 하면 된다. 참고로 과정은 반드시 초기화 과정이 끝난 상태이어야 하며, ctag install 되어 있어야 한다.

  1. shell에서 > cd android-src # android full source root dir 이동
  2. vi 열린 상태에서 > F12 + c #android ctag 생성
  3. vi 열린 상태에서 > F2 + c #android file jump filelist 생성

   

  • VIM 설정 update 하기

가끔 bug 수정하거나, 신규 plugin 설치하거나 key mapping 재배열 하는 경우가 있는데, 그때 update 통해서 기존 기능을 upgrade 있다.

  1. .vimrc update하기 
    shell
    에서
    > git pull origin master
  2. 새로 추가된 Plugin 있으면 Update하기 
    vi
    열린 상태에서
    > F7 u #BundleInstall!
  3. 기존 삭제된 Plugin 있으면 삭제하기
    vi
    열린 상태에서
    > F7 c #BundleClean!
  4. 새로 추가된 Plugin manual index 생성 
    vi
    열린 상태에서
    > F1 u

   

  • VIM key-mapping

F1 누르면 한글 설명이 보이며, 바로 가기를 지원하기 위해 단축키 설명은 F# + hh 형태로 만들었다. (example F8 + hh등을 눌러보라.) . F1 toggle 동작하므로 설명 창을 닫을 역시 사용이 가능하다. 참고로 vi original help: help 참조 해볼 있다.

   

F1 : 설명과 도움말

F2 : ctrlp : file search

F3 : grep : string search

F4 : fugitive : git source control system integration

F5 : minibuffexpl : open file list 관리

F6 : zoomwin : window mangement

F7 : bundle : plugin management

F8 : nerdtree à directory browsing

F9 : tagvar : class layout manager

F10: source explorer : symbol look up

F11: ctag jump out : jump out from F12 view

F12: ctag jump in : jump to symbol

   

한글 설명이 깨져 보이는 현상이 있을 있는데, 이는 terminal program설정(shell 설정이 아님)에서 recv/trans coding UTF-8 지정해주면 된다.

   

 

   

   

  • 마치며

GUI vim 대신 terminal 사용한 것은 어떤 환경에서도 같은 동작을 보장하기 위함이다. 이런 기준으로 plug-in 선택도 하게 되었는데, Taglist 대신 Tagvar 사용하고, Bufexpl 대신 minibufexpl 사용한 것과 FuzzyFinder, Command-T대신에 CtrlP 사용한 것은 이렇게 저렇게 사용해보고 변경 하게 되었다. Vim 계속 설정해보면서 c/c++/java code completion 등의 욕심이 사라지지 않았지만, editor heavy해짐이 싫어진다. 언어에 따라 최적의 tool 존재하니 만능 툴을 만든다면 최종적으로 OS 되어 버릴 같아 정도에서 만족하기로 하였다.

   

Posted by 당신은 천하보다 귀중합니다. av930

댓글을 달아 주세요

준비한 단축키 소개가 이제 어느 정도 막바지에 이르렀다. 오늘은 가장 많이 사용하는 editor인 vim에 대해서 소개하려고 한다. 아직도 VI(VIsual Editor), VIM(Vi IMproved) 혼용해서 불러지고 있지만, 엄밀히 말하면 지금 사용하고 있는 editor는 vim이다.

 

   

ESC key로 mode change를 해서 사용하도록 설계된 vi는 이것 때문에 좋아하는 사람과 싫어하는 사람이 극명히 갈리는 editor이다. VI를 design한 시점에 주로 사용되는 keyboard는 현재 사용하고 있는, (ESC key가 keyboard 왼쪽 가장 상단에 위치한 형태) 키보드가 아니었으며, 현재의 tab 정도에 위치하였다. 그래서 그렇게 design된 것이었다.

   

이유야 어째튼 마우스가 없던 모든 것을 keyboard로 해야 했던 시절에 출발한지라 모든 기능이 keyboard로 가능하다. 최근 mouse까지 추가하여 별도의 기능을 제공하기도 하지만 H,J,K,L로 이어지는 커서 이동은 과히 독특함을 넘어 유별나다 할 수 있다.

VI를 사용하면서 가장 큰 난적은 환경이다. Shell과 terminal type, 그리고 각 os마다 존재하는 수많은 VI 가 사용자에게 혼란을 주기 때문이데, 이를 잘 이해한다면 언제 어디서나 최적의 환경 속에서 작업이 가능하다.

   

그럼 단축키를 알아보자.

구분

명령

단축키

    

    

설명

    

    

    

    

    

    

파일

    

    

    

    

    

   

종료

   

   

:q

그대로 종료하기

   

   

   

   

:q!

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

   

   

   

   

:wq

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

   

   

   

   

:wqa!

현재 열린 창을 모두 저장하고 종료하기

   

   

   

   

:x

:wq와 동일한 명령

   

   

   

   

ZZ

:wq와 동일한 명령

   

   

   

   

   

   

   

열기

vi file file…

   

다중파일 열기

   

   

   

   

   

다른 file로 이동할 때는 프롬프트 상에서 :n 이라 입력한다.

   

   

   

   

:shell

VI를 종료하지 않고 shell 화면으로 나갈 수 있다.

   

   

   

   

exit

다시 VI로 이동할 때는 exit라 입력한다.

   

리프레쉬

CTRL+

   

L

화면 리프레쉬

   

   

   

   

   

   

   

복구

   

   

   

시스템이 갑자기 꺼졌을 때(최악의 상황) 복구하는 명령은 VI -r [작업하던 file name]

   

   

   

   

   

   

편집

    

    

    

    

    

   

삽입

   

   

i

현재 커서의 위치부터 삽입

   

   

   

   

a

현재 커서의 위치 다음부터 추가 시작

   

   

   

   

A

현재 줄의 마지막에 추가 시작

   

   

   

   

I

현재 줄의 처음에 추가 시작

   

   

   

   

o

현재 라인의 아래에 새로운 라인을 열어준다

   

   

   

   

O

현재 라인의 위에 새로운 라인을 열어준다.

   

   

   

   

   

   

   

삭제

   

   

x

커서 위치의 한문자 삭제

   

   

   

   

X

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

   

   

   

   

dw

커서가 있는 단어 삭제

   

   

   

   

dW

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

   

   

   

   

db

커서가 앞에 있는 단어 삭제

   

   

   

   

dB

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

   

   

   

   

d)

현재행부터 문장의 나머지 삭제

   

   

   

   

dG

현재행부터 파일의 나머지 삭제

   

   

   

   

dL

현재행부터 화면의 나머지 삭제

   

   

   

   

d0

행의 0번째 char(시작)부터 현재 앞 문자까지 지운다.

   

   

   

   

d1G

현재 행부터 file의 시작까지 지운다.

   

   

   

   

dnG

현재 행에서 n 번째까지 지운다.

   

   

   

   

dd

현재행 삭제

   

   

   

   

ndd

n개의 라인을 지운다.

   

   

   

   

D

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

   

   

   

   

d}

문단의 나머지 삭제

   

   

   

   

dH

화면의 시작까지 삭제

   

   

   

   

J

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

   

   

   

   

   

   

   

바꾸기

   

   

r

커서에 있는 문자 대치

   

   

   

   

s

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

   

   

   

   

cb

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

   

   

   

   

cB

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

   

   

   

   

C

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

   

   

   

   

c

특정 텍스트 바꾸기

   

   

   

   

c}

문단의 나머지 바꾸기

   

   

   

   

cm

표시까지 모든 것 바꾸기

   

   

   

   

ch

화면의 시작까지 바꾸기

   

   

   

   

R

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

   

   

   

   

S

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

   

   

   

   

cW

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

   

   

   

   

cc

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

   

   

   

   

cO

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

   

   

   

   

c)

문장의 나머지 바꾸기

   

   

   

   

cG

파일의 나머지 바꾸기

   

   

   

   

cL

화면의 나머지 바꾸기

   

   

   

   

cw

현재 위치에서 단어 교체

   

   

   

   

cfc

현재 위치에서 `c' 문자까지 변경

   

   

   

   

` . '

VI에서 마지막 명령을 반복하라는 뜻이다.

   

   

   

   

   

   

   

복사

   

   

yw

커서가 있는 단어를 복사

   

   

   

   

yW

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

   

   

   

   

y

특정한 다음 텍스트 복사

   

   

   

   

y)

문자의 나머지 복사

   

   

   

   

yG

파일의 나머지 복사

   

   

   

   

yL

화면의 나머지 복사

   

   

   

   

yb

커서가 있는 앞 단어를 복사

   

   

   

   

yB

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

   

   

   

   

yy

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

   

   

   

   

y}

문단의 나머지 복사

   

   

   

   

yH

화면의 시작까지 복사

   

   

   

   

   

   

   

붙여넣기

   

p

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

   

   

   

   

dw p

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

   

   

   

   

d p

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

   

   

   

   

d} p

문단의 나머지로 이동

   

   

   

   

dH P

화면 시작 부분으로 이동

   

   

   

   

P

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

   

   

   

   

dw P

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

   

   

   

   

d) P

문장의 나머지로 이동

   

   

   

   

dG P

파일의 나머지로 이동

   

   

   

   

dL P

화면의 나머지를 이동

   

   

   

   

   

   

   

블럭명령

   

   

   

   

   

: 10,20w [file name]

블록을 file에 저장

   

   

: 10,20w >> [file name]

블록을 file에 추가

   

   

: 10,20r [file name]

10에서 20까지에 file을 읽어 현재 줄에 삽입

   

블록 자르기

   

   

수정/삭제를 하면 버퍼에 그 내용을 복사(yank)

   

블록 복사

   

yw

한 단어 버퍼에 기록

   

   

   

   

y$

줄의 끝까지 기록

   

   

   

   

yy

현재 줄을 버퍼에 기록

   

   

   

   

   

==> 역시 name을 주어 buffer에 기록 할 수 있다.

   

블록붙이기

   

p

현재 커서 위치 오른쪽에 추가한다.

   

   

   

   

P

현재 커서 위치 왼쪽에 추가한다.

   

   

   

   

namep

buffer에 있는 name의 블록을 현재 위치에 추가

   

   

   

   

   

   

이동

    

    

    

    

    

   

   

   

   

f문자

다음에 나타나는 "문자"로 이동

   

   

   

   

F문자

이전에 나타나는 "문자"로 이동

   

단어 단위

   

w

다음 단어의 맨처음으로 이동

   

   

   

   

W

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

   

   

   

   

e

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

   

   

   

   

E

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

   

   

   

   

b

이전 단어의 맨처음으로 이동

   

   

   

   

B

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

   

줄단위

   

   

0

커서를 라인의 시작으로 이동(숫자 0임)

   

   

   

   

$

커서를 라인의 끝으로 이동

   

   

   

   

Enter

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

   

   

   

   

+

다음 행의 처음으로 이동합니다.

   

   

   

   

-

이전 행의 처음으로 이동합니다.

   

   

   

   

n

   

   

   

   

   

G

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

   

   

   

   

M

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

   

   

   

   

H

화면의 처음으로 이동

   

   

   

   

L

화면 끝으로 이동

   

   

   

   

숫자G

커서를 숫자 라인만큼 이동

   

문장단위

   

(

문장의 시작으로 이동

   

   

   

   

)

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

   

   

   

   

{

문단의 시작으로 이동

   

   

   

   

}

문단 끝으로 이동

   

   

CTRL+

   

F

한화면으로 앞으로 이동

   

   

CTRL+

   

B

한화면으로 뒤로 이동

   

   

CTRL+

   

U

반화면 앞으로 이동

   

   

CTRL+

   

D

반화면 뒤로 이동

   

방향키를 이용한

<-, Del

왼쪽으로 커서 한 칸 이동

   

커서 이동 명령

   

->

오른쪽으로 한 칸 이동

   

   

   

   

SpaceBar

   

   

   

   

윗 줄로 커서 이동

   

   

   

   

아래 줄로 커서 이동

   

   

   

   

Home

줄 처음 칸으로 이동

   

   

   

   

PageUp

화면 위로 이동

   

   

   

   

PageDown

화면 아래로 이동

   

   

   

   

Enter

다음 줄 첫 칸으로 이동

   

   

   

   

Esc

다음 줄 첫 칸으로 이동

   

   

   

   

:sp filename

새창 생성

   

창단위

CTRL+

   

ww

창간이동

   

   

CTRL+

   

wt

맨위창으로

   

   

CTRL+

   

wb

맨아래창으로

   

   

CTRL+

   

wj

위창

   

   

CTRL+

   

wk

아래창

   

   

CTRL+

   

wc

현재창 닫기

   

   

CTRL+

   

w_

현재창 최대화

   

   

20 CTRL+

w_

현재창 높이를 20으로

   

   

   

   

   

   

검색

    

    

    

    

    

   

검색

/pattern

   

패턴을 앞방향으로 검색

   

   

?pattern

   

패턴을 뒷방향으로 검색 (dir path slash(/)가 들어가는 검색시 사용하면 된다.)

   

   

n

   

   

이전 검색 앞방향으로 반복

   

   

N

   

   

이전 검색 뒷방향으로 반복

   

   

:s/

   

   

old를 new로 치환해 준다.

   

치환

[범위]s/old/new/[cgi]

[범위]숫자, $, .(현재 위치)등을 지정한다.

   

   

   

   

   

[cgi] c는 변경여부를 묻는 플래그이고, g는 한줄의 모든 것을 변경하며,

   

   

   

   

   

I 는 검색시 대소문자를 구분하지 않는다.

   

   

   

   

   

10줄에서 파일의 끝까지 수행

   

   

   

   

   

   

   

   

   

   

   

   

옵션

    

    

    

디폴트

`

   

   

:set autoindent

off

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

   

   

:set autoprint

on

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

   

   

:set errobells

off

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

   

   

:set number

off

줄 번호를 나타나게 함

   

   

:set report

5

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

   

   

:set showmatch

off

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

   

   

:set wam

on

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

   

   

:set ignorecase

on

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

   

   

:set tabstopp=n

8

탭 공백을 n 수만큼 지정

   

   

:set wrapmargin=n

0

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

     

   

이런 단축키가 당신에게 능숙함을… 그리고 그 능숙함이 좀 더 빠른 퇴근을… 그리고 퇴근 후 잠자리에 들기 전, 삶의 본질에 대해서 생각할 수 있는 시간 20분만이라도 할애 해주길 바란다. (Jesus is my Christ)

Posted by 당신은 천하보다 귀중합니다. av930

댓글을 달아 주세요