Linux/vim2009. 11. 25. 17:10
 
 
초강력 에디터 vi, emacs

구글 검색을 통해 검색되는 관련 자료들을 모아모아 보았다. 앞으로 더 좋은게 발견되면 추가할 것이다.

JimyLinux







http://mwultong.blogspot.com/2006/09/vim-vi-gvim-find-and-replace.html

[문자열 찾기 바꾸기] Vim (Vi), Gvim 리눅스 텍스트 에디터 - 찾기/치환 Find and Replace

GVim 또는 Vim에서 문자열을 찾거나 치환(바꾸기)하는 방법입니다.

문자열 찾기(Find)

* 현재 문서를 편집중이라면, 키보드의 Esc 키를 눌러 편집모드에서 빠져나옵니다.

* 키보드의 슬래쉬(/)키를 누르고, 찾을 문자열을 입력합니다. 만약 foo 라는 문자열을 찾는다면
/foo
이렇게 하면 됩니다.

그런데 /키는, 위에서 아래로 찾는 것입니다.

아래에서 위쪽 방향으로 찾으려면 물음표(?)키를 사용합니다. 현재 커서 위치의 위쪽에 있는 foo 라는 문자열을 찾으려면
?foo
라고 하면 됩니다.


다음 문자열 계속 찾기

다음 문자열 찾기는 소문자 n 입니다. 만약 foo 가 여러 개 있다면, 아래쪽 foo들을 계속 찾게 하는 것입니다.

역방향으로 계속 찾으려면 대문자 N 을 누릅니다.


대소문자 구분 없이 찾기

Vim은 대소문자를 구분하여 찾기에 불편합니다. Vim 설정 파일인 .vimrc 또는 _vimrc 파일에,
set ignorecase
이런 줄을 삽입하면 대소문자 구분 없이 찾기를 할 수 있습니다. (▶▶ [.vimrc] Vim / Gvim 설정 파일 예제 - 리눅스 텍스트 에디터 참고)



문자열 바꾸기(치환)

* 현재 문서를 편집중이라면, 키보드의 Esc 키를 눌러 편집모드에서 빠져나옵니다.

* 콜론(:)을 누르고 %s/foo/bar 라고 하면 모든 foo라는 문자열이 bar로 한꺼번에 치환됩니다.

다음과 같이 c 라는 옵션을 붙이면
:%s/foo/bar/c
바꿀 때마다 바꾸어도 좋은지 물어보기에 더 안전합니다. y를 누르면 바꾸고, n을 누르면 다음으로 건너뛰고, a를 누르면 모두 바꿉니다.


:%s/<foo>/bar

이렇게 하면 정확하게 foo에 일치될 때만 바꿉니다. 즉 foo는 바꾸지만, foo 앞뒤로 다른 문자열이 붙어 있는 경우, 예를 들어
fooZZZ
ZZZfoo
ZZZfooZZZ
이런 문자열 속의 foo 는 바꾸지 않습니다.



대소문자 구분없이 바꾸려면
:%s/foo/bar/i
이렇게 i 옵션을 붙입니다. 이것은 ".vimrc" 파일을 고치지 않아도 작동합니다.




전역 치환

이 경우
foofoofoofoofoofoofoofoo

이렇게
barfoofoofoofoofoofoofoo

문장의 첫번째 foo만 bar로 치환됩니다. 문장의 모든 foo를 bar로 치환하려면
:%s/foo/bar/g
이렇게 g 옵션을 사용합니다.


:%s/foo/bar/gi
이렇게 여러 옵션을 혼용할 수도 있습니다.




패턴을 이용한 찾기 바꾸기 응용
글쓴이 : 탐험가 (2001년 10월 06일 오후 04:09) 읽은수: 5,495 [ vi # 트랙백(0) 인쇄용 페이지 본문 E-Mail로 보내기 ]
vi 상황

자바에서 Vector를 이용하여 코딩하고 있었는데.. Vector는 불필요한 Synchronized를 위한 처리를 해서

오버헤드가 쩜 있을꺼 같아서.. 크기가 고정된 것은 String[](배열)로 바꾸려고 한다

vListData.get(1) --> vListData[1]로...1의 값은 숫자이고 여러 값으로 바뀔수 있음..

기존 해결책
검색해서....다 바꾼다..-_-aa

( 검색 한게 어딘가..-_-aa )

해결책
패턴 매칭으로..찾아본다..

:%s/vListData.get(([0123456789]*))/vListData[1]/g

끝~~

조금 설명하면.. 앞의 패턴에서 ( 과 ) 사이의 것을

대치할 패턴의 1에 넣는 것이 핵심이다.

두개 있으면 2하면 될까? 모르겠다...-_-aa

여튼..정확한 설명은 아니구요...대충 그렇지 않을까 싶은거니

확실하게 아는 분 있으면...답글 달아주세요..

혹..확인하며 바꾸고 싶으면..끝에 g대신 gc를 입력하면

검색한다음... 바꿀 부분을 알려준다...그때..y를 누르면

바꾸어준다...

혹 잘못된거 있으면 알려주시길..

Unix PowerTools란 책을 참고했습니다..

편안한 하루!

p.s SunOS에서 VI만 쓰는데 VI에서 Syntax Highlight쓸 수 없나요?

VIM을 깔면 보안상 문제는 안생기나요? -_-aaa

<  여러파일 확장자 바꾸기 | FTP계정만 주고 Shell계정은 주지 않기  >
패턴을 이용한 찾기 바꾸기 응용 | 답장: 2개(RSS) | 본문에 답장
정렬 : 
답장 무우 (2001년 12월 09일 오전 09:35)
[0123456789] 는 [0-9] 요로케...
2같은것도 다 먹는다는 거.. 실험해 보셔서 아셨져?

1 2 로 두개의 문자열 swap 을 할 수 있을 겁니다.
:%s/(앗싸)(좋구나)(108계단)/231/g
이렇게 하시면
'앗싸좋구나108계단' 이 '좋구나108계단앗싸' 로 바뀝니다.

이거 왕입니다. 엄청난 양의 데이터를 가진 문서에서
순서바꾸기를 할 때 정말끝내줍니다.

123 def ghi
432 ius dkf
089 cdo lks

이걸 숫자를 가운데로, 두번째는 끝, 세번째 처음으로 보내려면

:%s/([0-9]*) ([a-z]*) ([a-z]*)/3 2 1/g

제가 아는 한도에서는 이게 가장 깔끔 -_-/~

정규 표현식의 세계는 오묘한것 같아여 넘 흑 ㅠ.ㅠ/~
[ 이글에 답장 | 본문에 답장 | 책갈피 ]

답장 임동현 (2001년 10월 08일 오전 09:30)
vim 까세요..

vi 에서 느낄수 없는 수많은 기능이 존재합니다.

보안상 문제가 있을까요?.

거의 /tmp 이런 문제 빼곤 없을걸요?.

지금은 아마 다 패치 되지 않았나 쉽네요..

물론.. syntax on 도 되지요..



 문자열 바꾸기

:%s/ABC/DEF/g    global substitution
:%s/ABC/DEF/c    check 
 
# 내용수정

    * cw: 단어 바꾸기
    * r  : 한글자 바꾸기   R: 모두 바꾸기
    * ~ : 대소문자바꾸기


# : <범위>s/old/new/<옵션>

    * Ex)
          o :s/add/plus/g
                + 전체 문서에서 add 를 plus로 치환
          o :s//etc///etc/local//g
                + 현재 편집중인 전체 문서에서 /etc/ 를 /etc/local/ 로 치환

http://www.gentoo.org/doc/ko/vi-guide.xml

텍스트 치환

텍스트의 패턴을 치환하기 위해 우리는 ex 모드를 사용한다. 만약 여러분이 현재 줄에서 처음으로 나타나는 패턴을 치환하고 싶다면, :s/<regexp>/<replacement>/라고 입력하고 <ENTER>를 치라. 여기에서 <regexp>는 여러분이 찾고자 하는 패턴이고 <replacement>는 바꿀 문자열이다. 현재 줄에 있는 모든 패턴을 치환하고 싶다면 :s/<regexp>/<replacement>/g라고 입력하고 엔터를 치라. 파일 안에 있는 모든 패턴을 치환하고 싶다면, :%s/<regexp>/<replacement>/g라고 입력하라. (보통 여러분은 이것을 원할 것이다.) 만약 여러분이 파일 안에 있는 모든 패턴을 치환하고 싶지만, vi가 각각의 변경에 대해 여러분의 확인을 받도록 하고 싶다면 :%s/<regexp>/<replacement>/gc라고 입력하고 엔터를 치라. (g는"global"을, c는 "confirm"을 의미한다.)





http://mwultong.blogspot.com/2006/09/regex-numbers-only.html

[정규식] 숫자로만 이루어진 행 찾기/매치시키기 - 정규표현식 REGEX Numbers Only

문서 중에서, 숫자로만 이루어진 행만 찾는 정규식입니다. 0에서 9까지의 아라비아 숫자 외의 다른 글자가 섞여 있으면 찾지 않습니다.

울트라에디트/EmEditor 정규식

에디터의 "찾기" 대화상자에서, Use Regular Expressions 에 체크해 주어야 "정규식으로 찾기"가 작동합니다. (정규식이 아닌 일반 텍스트를 찾기 위해서는 이 옵션을 해제해야 합니다.)

숫자로만 이루어진 행 찾기는 다음과 같습니다.

^d+$


^ : 행의 첫부분
d : 0~9까지의 숫자
+ : 바로 앞의 글자 (여기서는 숫자)가 1개나 1개 이상 있음. (즉 숫자가 최소한 1개 있음)
$ : 행의 마지막 부분


Vim / Gvim 정규식

Vim(VI) 에디터에서는 다음과 같이 합니다.

/^d+$


/ : 이것은 정규식의 일부가 아니고 빔 에디터의 찾기 명령입니다.

또한, 이렇게 + 앞에 를 붙여야 합니다.


http://www.joinc.co.kr/modules.php?name=News&file=article&sid=49


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' 를 사용하지 않을경우 라인에서 처음에 검색된 문자만 치환하고 다음 라인으로 넘어간다.


http://ling.snu.ac.kr/hpshin/class/LangAndCom0402/lecture/regExp.htm

정규표현식 기초

저자 전정호 (mahajjh@myscan.org)

 

Copyright (c) 2001 Jeon, Jeongho.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

 

이 글은 유닉스 사용과 관리에 필수인 정규표현식을 설명합니다. 또, 정규표현식을 처리하는 C 라이브러리도 마지막에 설명합니다.

'Linux > vim' 카테고리의 다른 글

Vim에서 ruby, python을 지원하도록 설치하는 방법  (0) 2013.08.01
vi 창 설정  (0) 2009.11.25
vim 팁  (0) 2009.11.24
vim 단축키  (0) 2009.11.23
/etc/vim/vimrc  (0) 2009.11.23


Posted by bayron