기본 콘텐츠로 건너뛰기

Linux Command 6

square72_blue.gif vi 에디터 사용법

1. vi 시작하기: vi filename

2. vi 끝내기: :w (save하기, 끝나지는 않는다.)

:q (빠져나옴,고치지 않았을때)

:wq (또는 ZZ) (save하고 빠져나옴)

:q! (고친 것을 포기하고 빠져나옴)

3. vi의 두 모드(mode)

1) 편집모드

- 화면 맨 아랫쪽 첫째 column에 ":"가 없는 경우를 말함. (vi를 시작했을 때 상태 그대로가 편집모드이다.)

- 대부분의 명령은 알파벳 글자 하나를 누름으로써 수행된다.

- 편집모드에는 string의 수정(R, replace), 삽입( i 또는 a, insert), 대치(s, substitution)모드 등이 별개로 존재하고 각 모드는 Esc키를 누름으로써 끝난다.

2) Command모드

- 편집모드에서 사용자가 ":"(콜론)을 쳐서 화면 맨 아랫쪽 첫째 column에 ":"가 있는 경우를 말함.

- command모드는 ":"를 쳐서 시작하고 엔터를 침으로써 끝이 난다.

- 이후 ":"로 시작되는 명령어는 모두 command모드를 의미한다.

4, cursor의 이동

    명 령

    설 명

h

l

k

j

0

$

w

b

:n 엔터

G 또는 :$ 엔터

'←'와 같다. *되도록 화살표키를 사용하지 말고 "h,l,k,j"를 사용하도록 !

'→'와 같다. ( 키보드에서 손을 떼지않고 cursor를 이동시킬 수 있고

'↑'와 같다. 터미날 Type에 구애받지 않는 vi 장점 중의 장점 )

'↓'와 같다.

cursor가 있는 현재 line의 첫 column으로

cursor가 있는 현재 line의 맨끝으로

다음 단어로(forward)

이전 단어로(backward)

파일의 n번 line으로

파일의 마지막 line으로

* Command모드에서 "."는 현재 line을, "$"는 마지막 line을 뜻한다.

5. 화면의 이동

명 령

설 명

CTRL-f

CTRL-b

CTRL-d

CTRL-u

화면을 한 페이지씩 앞으로(forward) 이동

화면을 한 페이지씩 뒤로(backward) 이동

화면을 앞으로(downward) scroll 이동

화면을 뒤로(upward) scroll 이동

6. 수정 & 삽입 & 삭제

    명 령

    설 명

r

R

현재 cursor 위치의 한 글자를 뒤이어 치는 한 글자로 바꿈.(그런다음 자동으로 편집모드로 복귀)

수정모드 시작 (현재 cursor 위치부터 Esc키를 누를 때까지 입력하는 글자들로 계속 덮어 씀)

i

a

삽입모드 시작 (현재 cursor 위치에 Esc키를 누를 때까지 입력되는 글자들을 삽입)

삽입모드 시작 (현재 cursor 뒤로 Esc키를 누를 때까지 입력되는 글자들을 삽입)

s

대치모드 시작 (현재 cursor 위치의 한 글자를 Esc키를 누를 때까지 입력되는 글자들로 대치)

x

D

dd

ndd

:n,m d 엔터

:.,m d 엔터

현재 cursor 위치의 한 글자를 지운다.

현재 line의 cursor 이후의 글자들을 지운다

현재 cursor가 있는 line을 지운다.

현재 line부터 n개의 line을 지운다.

n번 line에서 m번 line까지 지움.

현재 line에서 m번 line까지 지움.

* vi에서는 지워진 내용을 임시기억장소(buffer)에 저장하므로 지운 내용을 "p" 또는 "P"로 다른 곳에 복사할 수 있다. (7. 복사 & 이동 참조)

7. 검색 및 치환 (Search & Replace)

    명 령

    설 명

/string 또는 :s/string 엔터

string을 찾는다

- 다음 occurrence는 "n"(forward) 또는 "N"(backward)으로 찾는다.

:n,m s/string1/string2 엔터

:n,m s/string1/string2/g 엔터

:n,m s/string1/string2/gc 엔터

n번 line에서 m번 line까지의 "string1" 중 각 line에서 첫 번째로 나오는 "string1"만을 "string2"로 바꿈.

n번 line에서 m번 line까지의 "string1" 모두를 "string2"로 바꿈.

n번 line에서 m번 line까지의 "string1" 모두를 "string2"로 바꾸되

각각에 대해서 confirm을 한다.(y/n 물어봄.)

8. 복사 & 이동

    모드

    명령

    설 명

편집

모드

yy 또는 Y

nyy 또는 nY

dd

ndd

p

P

현재 line을 버퍼에 저장.

현재 line부터 n개의 line을 버퍼에 저장

현재 line을 지우고 그 내용을 버퍼에 저장.

현재 line부터 n개의 line을 지우고 내용을 버퍼에 저장

버퍼의 내용을 현재 line뒤에 붙인다.(paste)

버퍼의 내용을 현재 line앞에 붙인다.

* vi에서는 임시기억장소(buffer,버퍼)를 사용하므로 어느 한 부분을

버퍼에 넣어 "p" 또는 "P"로 이동하거나 복사할 수 있다.

( 버퍼는 다른 내용이 들어가면 그 이전 내용은 지워진다. )

command

모드

:n1,n2 y

:n1,n2 t n3

:n1,n2 m n3

n1번 line에서 n2번 line까지를 버퍼에 저장.(버퍼내용을 쓸때는 "p 또는 P")

n1번 line에서 n2번 line까지를 n3번째 line 뒤에 복사

n1번 line에서 n2번 line까지를 n3번째 line 뒤로 이동(move)

9. 꼭 알아두어야 할 것들

1) vi에서의 모든 명령은 소문자,대문자를 구별한다.

2) 수정(R), 삽입(i 또는 a), 대치(s) 등의 "string을 입력"하는 작업이 끝나면 반드시 Esc키를 눌러서 각 모드(수정,삽입,대치모드)가 끝났으며, 그 다음에 치는 글자는 '편집모드의 명령어'임을 vi에게 알려주는 것을 잊지말도록 !

3) 편집모드의 명령 앞에 숫자가 입력되면 그 숫자만큼 명령을 반복하라는 뜻이 된다. (예)글자"a"를 삽입하는 경우 명령은 "ia Esc"이지만, 만약에 "13ia Esc"라고 치면 "a"가 13개 삽입된다.

4) 그밖의 중요한 명령들.....

이전 명령의 반복

(편집모드에서) "."를 친다.

- vi 최대의 장점, vi-Editng실력은 "."활용에서부터 !

이전 명령의 취소(undo)

(편집모드에서) "u"를 친다.

n번째 column으로 가고싶을때

n| ( n값이 현재 line 끝의 column을 초과하면 cursor는

line 끝에 머문다. )

현재 line과 다음 line을 합할 때(join)

J

현재 line을 분리할 때

분리하고자 하는 위치에 "엔터"를 삽입(insert)한다.("i"명령이용)

line번호를 보면서 작업할려면? auto-indent를 하고 싶을 때

right margin을 주고 싶을 때

현재가 어떤 모드인지 display

괄호가 잘 match되는지?

( command모드에서 setting을 한다. ":set all 엔터"하면 모든 option이 출력된다.)

:set nu 엔터 (없앨때는 :set nonu 엔터)

:set ai 엔터 (없앨때는 :set noai 엔터)

:set wm=8 엔터 (right margin 8 column)

:set showmode 엔터

:set showmatch 엔터

* c-shell을 사용하는 system이라면 아래와 같이 "EXINIT"이라는

environment변수를 설정하여 미리 vi를 setting 할 수 있다.

% setenv EXINIT 'set nu ai wm=8 showmode' 엔터

현재 편집 중인 파일이름이 무엇이며 총 line수는 얼마인지?

: f 엔터 또는 CTRL-g

n번째 line에서 m번째 line까지를 다른 이름의 파일로 저장하고 싶을때

:n,m w filename 엔터 ( 이미 filename이 있는 경우에 덮어쓰는 경우라면 :n,m w! filename 엔터 )

다른 파일을 불러올 때

:re filename 엔터 (현재 line 뒤에 붙는다)

댓글

익명님의 메시지…
yeah... attractive style :))
익명님의 메시지…
좋은자료 감사합니다..

이 블로그의 인기 게시물

Ubuntu (Kubuntu) 에 desktop 파일 만들기

Package 관리자등을 통해 직접 Repository 에 있는 Application 을 설치하는 경우에는 필요한 경로와 파일, Category 로 분류된 Icon 등록 등이 자동적으로 이루어지나 firefox, eclipse 등 새로운 버전을 새로 설치할 경우, 다음과 같은 절차를 통해 시작메뉴에 등록시킬 수 있다. 다음은 eclipse-SDK-3.6-linuxx-gtk.tar.gz 을 받아 설치 등록하는 것을 예로 든다. 1. 다운받은 파일을 /usr/lib에 압축해제한다. (물론, super user 계정으로 실행해야 한다.) 2. 보통의 경우, /usr/bin Directory 는 PATH 에 물려 있으므로 다음과 같은 실행 파일을 만들어 놓는다. # cd /usr/lib # chmod +x eclipse # cd /usr/bin # sudo nano eclipse eclipse 파일에는 아래의 내용을 입력하여 넣는다. export ECLIPSE_HOME="/usr/lib/eclipse" $ECLIPSE_HOME/eclipse $ * # sudo chmod 755 eclipse 3. Desktop Menu 에 추가하려면 # cd /usr/share/applications # sudo nano eclipse.desktop [Desktop Entry] Encoding=UTF-8 Name=Eclipse Comment=Eclipse IDE Exec=eclipse Icon=/usr/lib/eclipse/icon.xpm Terminal=false Type=Application Categories=GNOME;Application;Development' StartupNotify=true 이렇게 입력한 파일을 저장하면, 시작메뉴 > 개발 > Eclipse 아이콘이 생성되어 메뉴에서 직접 실행할 수 있게된다.

VC++(MFC)에서 ADO와 ADOX를 이용한 MDB 파일 생성 / 연동 / 압축에 관한 모든 것

VC++(MFC)에서 MDB 생성 / 압축 / 연동 □ 개 요 ○ Access로 생성하는 DB 파일인 MDB 파일의 생성과 압축 및 기본 DB연동(데이터의 추가, 삭제, 검색, 수정)에 대한 내용 ○ 다이얼로그 기반의 MFC 프로젝트 상에서 위의 작업들을 수행하는 CDataBase라는 사용자 정의 클래스를 만들고 구현 □ 준비 작업 ○ stdafx.h에 다음을 import 한다. /* DB 사용을 위한 설정*/ #import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF", "EndOfFile") /* DB 파일 압축을 위한 설정*/ #import "C:\Program Files\Common Files\System\ado\msjro.dll" no_namespace /* DB 파일 생성을 위한 설정*/ #import "c:\Program Files\Common Files\system\ado\msadox.dll" using namespace ADODB; using namespace ADOX; ※ ADO(msado15.dll) 자체에서는 DB 파일 생성과 압축에 대한 라이브러리가 없기 때문에 각각에 필요한 DLL 파일을 Import 해야 한다. 하지만 ADOX(msadox.dll)와 단순히 같이 Import하면 충돌하기 때문에 서로 namespace를 지정해 준다. 또한 인터넷에 돌아다니는 일부 코드는 msadox.dll를 Import할 때 rename 혹은 no_namespace 옵션을 주곤 하는데 이를 위와 같이 해제한다. ○ 초기화 작업을 수행한다. => 프로젝트의 메인파일 (TestDlg.cpp)의 BOOL CTestDlgAPP::InitInstance()에 다음 내용을 추가 /* Ole 컨트롤의 지원을 위한 작업을 가능하게 함*/ AfxEnableControlContainer(); if (!...

우분투에 연결된 프린터, 스캐너를 윈도우즈에서 공유하여 사용하는 방법

[Sharing Printer and Scanner through Network] 전제조건 ( 사용환경 ) 복합기가 연렬되어 프린터와 스캐너 서비스를 공급할 대상 : Ubuntu 16.10 (Yakkety Yak) 64bit 공유된 프린터와 스캐너를 사용할 대상 : Windows 10 64bit 사용 중인 복합기 : Canon-MX318 (PIXMA MX310 Series) Server-side setup $ sudo apt update $ sudo apt-get install cupsys cupsys-client xinetd $ sudo apt-get install samba smbfs swat $ sudo dpkg-reconfigure xinetd $ sudo apt install cups cups-pdf xsane sane-utils xscanimage gscan2pdf $ sudo adduser saned lp $ sudo gedit / etc/cups/ printers.conf 웹브라우저의 http://snjee-nb2-ubuntu:631 에서 설정된 내용들이 표시된다. $ sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original $ sudo chmod a-w /etc/cups/cupsd.conf.original $ sudo gedit /etc/inetd.conf sane-port stream tcp nowait saned.saned /usr/sbin/saned saned $ sudo touch /etc/xinetd.d/saned $ sudo gedit /etc/xinetd.d/saned service saned { socket...