2009년 12월 04일
비가 새는 집
# by | 2009/12/04 11:47 | 트랙백 | 덧글(0)
| 제목 : [vi강좌: 03] 문자열 검색 글쓴이: 이원영(javaservice) 1999/05/03 09:43:15 조회수:1875 줄수:97 |
제 목:[vi강좌: 03] 문자열 검색 올린이:iyany (최인환 ) 99/01/05 00:56 읽음:455 관련자료 없음 -----------------------------------------------------------------------------[문자열 검색]vim에서 기본적인 검색 명령은 아래의 두가지 입니다. / , ?/은 아래방향으로 문자열을 검색하고,?은 윗방향으로 문자열을 검색합니다./은 마지막에 검색했던 문자열을 아래방향으로 검색을 하고,?은 마지막에 검색했던 문자열을 윗방향으로 검색을 합니다.n은 마지막으로 수행했던 문자열 검색을 같은 방향으로 수행하고,N은 마지막으로 수행했던 문자열 검색을 다른 방향으로 수행합니다.<예제>------------------------------------------------------------------------------1: *README.dos for version 5.0u of Vim: Vi IMproved.2:3: This file explains the installation of Vim on MS-DOS and Windows systems.4: See "README" for information about Vim.첫번째줄의 *위치에서 /Vim을 수행하면 첫번째로 나타나는 Vim의 V위치로 커서가이동하고, 그곳에서 /를 입력하면 Vim on MS-DOS의 V로 커서가 이동합니다.그 위치에서 n을 입력하면 네번째 줄의 Vim.의 V로 커서가 이동합니다.이곳에서 다시 N을 입력하면 Vim on MS-DOS의 V로 커서가 이동하고,?을 입력하면 첫번째 줄의 Vim의 V로 커서가 이동합니다.------------------------------------------------------------------------------간혹 그런 생각을 하곤합니다. 어느 단어 위에 커서가 위치하는데, 그 단어를 검색해보고 싶다는...그런 경우에 사용되는 명령은 *,#,g*,g#입니다.------------------------------------------------------------------------------* : 커서의 단어와 완벽하게 일치하는 문자열을 아래방향으로 검색합니다.# : 커서의 단어와 완벽하게 일치하는 문자열을윗방향으로 검색합니다.g* : 커서의 단어와 일치하는 문자열을 아래방향으로 검색합니다.g# : 커서의 단어와 일치하는 문자열을 윗방향으로 검색합니다.------------------------------------------------------------------------------여기 까지는 명령의 설명이었고, 문자열 검색에서 빠질 수 없는 정규표현식에 관해??간단하게설명 하겠습니다.정규표현식은 문자열 검색시 또는 치환시에 자주 사용되는 것으로 문자열에 관한 규칙을나타냅니다.vi에서 자주 사용되는 것은 아래와 같습니다.------------------------------------------------------------------------------. : 한 글자를 의미합니다. (어떤 글자이든 상관치 않습니다.)^ : 행의 처음을 뜻합니다.$ : 행의 마지막을 의미합니다.\< : 단어의 처음을 의미합니다.\> : 단어의 마지막을 의미합니다.[a-z] : a부터 z까지의 임의의 문자[^a-z] : a부터 z까지의 문자를 제외한 문자\s : 공백\S : 공백을 제외한 모든 문자\e : 키\t : 키\r : 키\b : 키* : 이전 글자가 0개 이상 나오는 모든 문자열\+ : 이전 글자가 1개 이상 나오는 모든 문자열\= : 이전 글자가 0,1개 나오는 문자열------------------------------------------------------------------------------<예제>------------------------------------------------------------------------------1: *README.dos for version 5.0u of Vim: Vi IMproved.2:3: This file explains the installation of Vim on MS-DOS and Windows systems.4: See "README" for information about Vim.*의 위치에서 /e.s를 치면 version의 e로 커서가 움직이고, 다시 /e.s를 치면systems의 e로 커서가 움직이게 됩니다.*위치에서 \^RE를 하게되면 첫번째 줄의 README는 검색되지만, 네번째 줄의README는 검색이 안됩니다. |
# by | 2009/11/06 15:23 | 트랙백 | 덧글(0)
| 제목 : [vi강좌: 02] Text Object Motion 글쓴이: 이원영(javaservice) 1999/05/03 09:40:51 조회수:1176 줄수:140 |
제 목:[vi강좌: 02] Text Object Motion 올린이:fantasia(최인환 ) 98/11/29 23:33 읽음:478 관련자료 없음 -----------------------------------------------------------------------------|Text Object Motion|이번 강좌에서는 단어 또는 문장에 따른 커서의 움직임에 대해서 설명하겠습니다.단어사이를 움직이는 키는 'w'입니다. 단어를 나누는 표시는 보통 공백이 사용되는데공백뿐만 아니라 '.'','':',';'등도 단어를 나누는 표시입니다.이런 표시로 구분되는 단어사이를 움직이는 키가 'w'이고, 공백만을 기준으로 움직이는 키는 'W'입니다.예를 들면,------------------------------------------------------------------------------README.dos for version 5.0u of Vim: Vi IMproved.This file explains the installation of Vim on MS-DOS and Windows systems.See "README" for information about Vim.1. Go to the directory where you want to put the Vim files. Examples: cd C:\ cd D:\editors2. Unpack the zip archive. This will create a new directory, in which all the Vim files are placed. Examples: pkunzip -d gvim50.zip unzip vim50w32.zip3. Add the Vim directory to your path. The simplest is to add a line to your autoexec.bat. Examples: set path=%path%;C:\vim-5.0 set path=%path%;D:\editors\vim-5.0That's it!------------------------------------------------------------------------------위의 글에서 첫줄의 README의 'R'에 커서가 있을 경우 'w'를 누르면 커서는 dos 앞의 '.'로옮겨가고 'W'를 누르면 for의 'f'로 옮겨 갑니다.'w'키는 다음 단어의 첫 글자로 커서를 옮기게 합니다. 하지만, 빈번하게 다음 단어의 마지막단어로 커서를 옮기고자 하는 욕구(?)가 생깁니다. 이런 경우에는 'e'를 누르면 됩니다.------------------------------------------------------------------------------w : 단어 사이 이동 (forward 방향)W : 공백으로 구분되는 단어 사이 이동 (forward 방향)e : 단어의 마지막 글자로 이동. (forward 방향)E : 공백으로 구분되는 단어의 마지막 글자로 이동 (forward 방향)b : 단어 사이 이동 (backward 방향)B : 공백으로 구분되는 단어 사이 이동 (backward 방향)ge : 단어의 마지막 글자로 이동. (backward 방향)gE : 공백으로 구분되는 단어의 마지막 글자로 이동 (backward 방향)------------------------------------------------------------------------------그럼 이번에는 문장 사이의 커서 이동에 관해서 알아봅시다.------------------------------------------------------------------------------) : 문장사이 이동. 다음 문장의 첫번째 글자로 이동 (forward 방향)( : 문장사이 이동. 다음 문장의 첫번째 글자로 이동 (backward 방향)} : paragraph 사이 이동. 다음 paragraph의 첫번째 단어로 이동 (forward 방향){ : paragraph 사이 이동. 다음 paragraph의 첫번째 단어로 이동(backward 방향)------------------------------------------------------------------------------다음에 설명할 내용은 프로그래밍을 할 경우에 도움이 되는 커맨드 입니다.c 프로그램을 짜는 경우에 자주 하는 실수가 괄호 (, { 등을 제대로 못 닫거나#if과 #else #endif 등의 패어를 제대로 사용 못하거나, 주석을 제대로 못닫는경우의일입니다.괄호를 열었는데 안 닫았을 경우 닫히지 않은 '('로 움직이는 명령은 '[('입니다.------------------------------------------------------------------------------#include "run.h"void main(int argc,char *argv[]){ unsigned short int ch; unsigned short int count=0; unsigned short int one,two,thr,foR,fiv,six,sev,eig; unsigned short int flag = ZERO; unsigned short int bit = HIGH; unsigned short int outcount = 0; if ( (fpin = fopen(argv[1],"rt")) == NULL) { printf("File open error \n"); exit(-1); } while( ( ch = fgetc(fpin) ) != EOF){ one = ( ch & ONEB ) & ONEB ; two = ( ( ch & TWOB) >> 1 ) & ONEB; thr = ( ( ch & THRB) >> 2 ) & ONEB; foR = ( ( ch & FORB) >> 3 ) & ONEB; fiv = ( ( ch & FIVB) >> 4 ) & ONEB; six = ( ( ch & SIXB) >> 5 ) & ONEB; sev = ( ( ch & SEVB) >> 6 ) & ONEB; eig = ( ( ch & EIGB) >> 7 ) & ONEB; if ( eig ==flag ) count++; else { if ( bit == HIGH ) { outcount = count << 8; bit = LOW; } else { outcount = outcount | count; printf("%d",outcount); outcount = 0; bit = HIGH ; } count = 1; flag = !flag; }------------------------------------------------------------------------------위와 같은 프로그램이 있는 경우에, int argc의 a에서 '[('을 치면 main(의 (로 커서가 움직이고'])'을 치면 argr[])의 )로 커서가 움직입니다.------------------------------------------------------------------------------[( : 닫히지 않은 (로 이동 (backward)]) : 닫히지 않은 ])로 이동 (forward)[{ : 닫히지 않은 {로 이동 (backward)]} : 닫히지 않은 }로 이동 (forward)[# : 닫히지 않은 #if 또는 #else로 이동 (backward)]# : 닫히지 않은 #else 또는 #endif로 이동 (forward)[* : 닫히지 않은 /*로 이동 (backward)]* : 닫히지 않은 */로 이동 (forward)-------------------------------------------------------------------------------지금까지 2회에 걸쳐서 커서의 움직임에 관해서 강좌를 했습니다.다음에는 pattern searching에 관해서 설명을 하도록 하겠습니다. |
# by | 2009/11/06 15:22 | 컴터 | 트랙백 | 덧글(0)
우연히 예전에 내가 썼던 글을 퍼가서 게시판에 있는 거를 발견했다.
VI에디터에 관한건데 지금도 유용해서 다시 퍼온다.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 제목 : [vi강좌: 01] 입력과 문자 단위 커서 이동 글쓴이: 이원영(javaservice) 1999/05/03 09:39:34 조회수:1658 줄수:176 |
제 목:[vi강좌: 01] 입력과 문자 단위 커서 이동 올린이:fantasia(최인환 ) 98/11/24 00:28 읽음:599 관련자료 없음 -----------------------------------------------------------------------------vim (1)제가 vi를 쓰게 된것은 우습게도 windows 덕분 이었습니다.주로 유닉스를 쓰다가- X-windos가 아닌 더미 터미날이 었습니다.-제 PC를 갖게되어 windows95를 깔았는데, 상당히 귀찮더군요.키보드도 만지다가, 마우스 만지다가..짜증..그러다가 알게된게 alt-tab등 여러가지 hot-key였지요. 이렇게 해서 윈도우즈 자체의 불편함은 해소(?)했는데,vi만큼 제 게으름을 채워주는 에디터는 없더군요.그래서 다시 vi로 돌아오게 되었답니다.회사에서 선배가 vi에 관한 글을 써달라고 해서 짬짬이 적고 있는데,이곳에서 함께 올리도록 하겠습니다.그럼 강좌를 시작합니다.vi에 관해서 다룬 대부분의 책을 보면 insert mode(vi mode)와ex mode에 관해서 먼저 이야기를 하는데, 물론 이 개념이 vi에서상당히 중요하기는 하지만, 처음에는 그냥 생각없이 명령을 쓰는 것이더 좋을 듯해서 이것에 관한 설명은 뒤로 미룹니다.지금은 그냥 글자를 쳐 넣을 수 있는 상태와 커서를 옮기기위한 상태두가지를 생각하시기 바랍니다.커서를 움직이기 위한 상태를 만들기 위해서는 esc를 눌러야하고,글자를 처 넣기 위한 상태를 만들기 위해서는 'i'키를눌러야한다고생각하시기 바랍니다.에디터에서 가장 중요한 기능은 글을 쳐 넣는 방법입니다.vi에서 글을 넣기 위해서 사용하는 키는 아래와 같습니다.---------------------------------------------------------i : 현재 커서위치에 글을 삽입I : 현재커서가 위치한 줄의 맨 앞문자의 위치에 글을 삽입a : 현재 커서위치의 다음에 글을 삽입A : 현재 커서가 위치한 줄의 맨끝에 글을 삽입o : 현재 커서가 위치한 줄의 다음줄에 글을 삽입O : 현재 커서가 위치한 줄의 윗줄에 글을 삽입----------------------------------------------------------어느 에디터나 그렇듯이 글을 쳐 넣는것 외에 가장 필요한것은 커서의 이동 입니다.최근의 대부분의 vi clone들에서는 커서키를 사용하는 것을 허용(?)하지만 원래의 vi 커서 이동키는 hjkl입니다.------------------------h : 왼쪽으로 한칸 이동j : 아래로 한칸 이동k : 위로 한칸 이동l : 오른쪽으로 한칸 이동-------------------------그런데 긴 문장의 중간에 있을때 맨 앞으로 가야할 일이 있다면,과연 h를 한참 눌러서 가야하는가?윈도우즈의 에디터에서도한번에 갈 수 있는데, 게으른 사람을 위한에디터인 vi에서 없을리는 당연히 없겠죠..^^'0'을 누르면 맨 앞으로 가고, 만일 tab이나 white space가 있는 경우맨처음 나타나는 문자의 처음으로 가려면 '^'을 누르면 됩니다.그럼 당연히 한 줄의 맨 끝으로 가는 명령도 있겠죠, '$'를 누르면한 줄의 맨 끝으로 갑니다.----------------------------------------0 : 커서가 있는 줄의 맨 앞으로 이동^ : 커서가 있는 줄의 맨 처음 글자로 이동$ : 커서가 있는 줄의 맨 끝으로 이동----------------------------------------vi에서는 enter를 치기 전까지는 한 줄로 인식을 합니다.하지만, 엔터를 치기 전까지 많은 글을 쳐 넣는다면 화면에는 여러줄로보일 수도 있겠죠. 이런 경우 화면에 보이는 줄로 커서를 움직이려면 어떻게해야 할까요? 화면을 기준으로 명령을 쳐 넣으려면 'g'를 먼저 쳐야합니다.즉, 화면에서 보이는 줄의 맨 앞으로 커서를 움직이려면 'g0'을 치면 됩니다.예를 하나 들겠습니다.-------------------------1 abcdefghijklmnopqrstuvwxyz0123452 .........-------------------------위와 같은 글이 있다고 생각할 때 첫번째 줄은 많은 글을 쳐 넣어서vi에서는 한줄로 생각하는 줄이 화면상에서는 두 줄로 보이게 됩니다.커서가 0의 위치에 있을 때, '^'을 치면 어떻게 될까요?a의 위치로 가게 됩니다. 하지만 'g^'을 치게되면 0의 위치에서 o의 위치로가게 됩니다.-----------------------------------------------------------------------g0 : 화면에서 보이는 커서가 위치한 줄의 맨 앞으로 이동g^ : 화면에서 보이는 커서가 위치한 줄의 공백으로 제외한 첫 글자로 이동g$ : 화면에서 보이는 커서가 위치한 줄의 맨 끝으로 이동gk : 화면에서 보이는 커서가 위치한 줄에서 한줄 위로 이동gj : 화면에서 보이는 커서가 위치한 줄에서 한줄 밑으로 이동-----------------------------------------------------------------------'gh', 'gl'은 왜 없을까요??다른 에디터에서는 보기 힘든 기능-최소한 제가 써본 에디터에서는- 중에 vi에서 지원하는 기능은 원하는 줄 또는 원하는 컬럼으로 커서를 이동 시킬 수 있다는 것입니다.ex mode, 즉 ':'을 친 상태에서 번호는 치면 번호에 해당하는 줄로 커서가 이동합니다.숫자를 치고 '|'-pipe입니다.-을 입력하면 숫자에 해당하는 컬럼으로 커서가 이동합니다.----------------------------------:N : N에 해당하는 줄로 이동N| : N에 해당하는 컬럼으로 이동----------------------------------위에서 설명한 커서 이동 명령으로만으로 vi를 자유자재(?)로 사용할 수 있습니다.하지만, 위의 명령만으로 사용하다보면 또 불편함을 느끼게 됩니다.예를 들면 N번째 줄의 첫번째 문자로 이동하는 경우에는 :N^을 연속해서 쳐야 합니다.세번이나 줄을 쳐야하는 불편함을 해소하기위해 vi에서는 NG라는 명령을 지원합니다.이 명령이 설명하는 것은 N번줄의 첫번째 문자로 커서를 이동시키라는 뜻입니다.------------------------------------------------G : 마지막줄의 첫번째 문자로 이동gg : 첫번째 줄의 첫번째 문자로 이동NG or Ngg : N번째 줄의 첫번째 문자로 이동- : 현재 커서 위치의 윗줄의 첫번째 문자로 이동+ : 현재 커서 위치의 다음줄의 첫번째 문자로 이동-------------------------------------------------지금 까지는 문서의 내용과는 전혀 상관없이 커서를 이동하는 방법에 관해서 설명했습니다.이번에는 문서의 내용과 관련되서 커서를 움직이는 방법에 관해서 설명하겠습니다.------------------------------------------------------------------------------1. Go to the directory where you want to put the Vimfiles. Examples: cd C:\ cd D:\editors2. Unpack the zip archive. This will create a new directory, in which all the Vim files are placed. Examples: pkunzip -d gvim50.zip unzip vim50w32.zip3. Add the Vim directory to your path. The simplest is to add a line to your autoexec.bat. Examples: set path=%path%;C:\vim-5.0 set path=%path%;D:\editors\vim-5.0That's it!------------------------------------------------------------------------------위와 같은 문서가 있을 때 '1' 글자에 커서가 위치했을 때 Examples의 'E'로 커서를 이동하기위해서 가장 쉬운 방법은 무엇일까요?현재 배운 방법에서는 $hhhhhhhh입니다. 하지만 vi에서는 이것도 불편해서 fE만 치면 가능하게기능을지원합니다. fE가 무엇일까요??f는 현재 커서 위치에서 오른쪽으로 처음 가 나오는 문자로 이동하라는 내용입니다.그럼 왼쪽으로 처음 나오는 문자로 이동하는 것은 무슨 명령일까요?'F'입니다.-------------------------------------------------------------------------------f : 현재 커서가 위치하는 곳에서 오른쪽으로 처음으로 이 나오는 곳으로 커서 이동F : 현재 커서가 위치하는 곳에서 왼쪽으로 처음으로 이 나오는 곳으로 커서 이동t : 현재 커서가 위치하는 곳에서 오른쪽으로 처음으로 이 나오는 곳의 바로 앞으로 커서 이동T : 현재 커서가 위치하는 곳에서 왼쪽으로 처음으로 이 나오는 곳의 바로 앞으로 커서 이동-------------------------------------------------------------------------------(*) vi에서의 상식vi에서 대부분의 명령은 숫자를 친후 명령을 치면 그 명령을 N번 반복합니다.예를 들면 위의 f을 Nf로 치면 가 N번째 나오는 곳으로 커서를 이동 합니다. Nl의 경우는 커서를 N번 오른쪽으로 이동 하겠죠.이상으로 첫번째 강좌를 마감합니다.첫 강좌에서는 단어의 삽입방법과 문자단위의 커서 이동에 관해서 설명했는데, 다음 강좌에서는 단어 단위의 커서 이동에 관해서 설명하겠습니다. |
# by | 2009/11/06 15:22 | 컴터 | 트랙백 | 덧글(0)
# by | 2008/06/16 23:18 | 잡념들 | 트랙백 | 덧글(0)
# by | 2008/06/12 16:10 | 트랙백 | 덧글(0)
◀ 이전 페이지 다음 페이지 ▶