2008. 12. 19. 16:30

VI를 쓰다보면 어떤 파일을 열면 줄의 맨끝에 ^M이 붙어있는 경우를 볼 수 있다.

이건 Windows와 Unix/Linux 계열에서 사용하는 개행문자가 다르기 때문이다.

* 개행문자(New line)
  Windows : \r\n
  Unix/Linux : \n

** \r 이문자는 Carriage Return 이라고 하면 <CR> 로 표현되기도 하며 ASCII Table에서도 찾을 수 있다.


단순히 저문자를 치환으로 없애주기만 하면 된다. 또는 Dos용으로 보게 바꾸어도 된다.


1. ^M 문자 바꾸기
 :%s/^M//g

^M문자는 Ctrl+v Enter 를 누르면 나온다.
(여담으로는  gVIM에서는 이럴 필요도 없는 것 같다.)

2. 모드 변경하기
 :set fileformat=dos
2008. 12. 12. 16:38
 
vi 편집기란?  
파일을 생성하거나 편집하는데 사용하는 프로그램을 에디터(editor)라고 합니다.
유닉스에서 사용하는 에디터 중 vi 에디터 텍스트 편집기로 가장 대표적인 프로그램은 vi 에디터 입니다. vi 편집기는 Visual Editor로서, 모든 유닉스 시스템에 있으며 따라서 vi 편집기를 사용할 수 있다는 것은 어떤 유닉스 시스템에서도 문서 작업을 할 수 있다는 것을 의미합니다.

예를 들어 전자우편을 작성하거나, 프로그램을 작성하는 일, 또는 기타문서를 작성할 때에 편집기는 필수적인 연장(tool)입니다.



- vi 에디터 구성과 방법  
vi는 입력 모드와 명령어 모드 그리고 라인 모드의 세 가지 형태로 구성되어 있습니다.입력모드는 일반적은 텍스트 에디터와 같이 원하는 문자를 입력할 수 있는 상태를 말하고, 명령어 모드는 입력한 내용을 편집하기 위해서 다양한 편집 관련 명령어를 사용 할 수 있는 상태를 의미 한다.

따라서 입력 모드에서는 문자의 입력만이 가능하며 문단의 재구성과 삽입, 삭제 등의 편집 기능은 오직 명령어 모드에서만 사용할 수 있습니다.

vi를 실행한 직후에는 명령어 모드에 위치하게 되며 i(insert)나 a(append), o(open)를 입력하게나 <Insert> 키를 이용해서 입력 모드로 전환할 수 있다.

입력 모드에서 명령어 모드로 복귀할 때는 <Esc>키만을 사용합니다.입력     모드로 전화 i 또는 a 또는 o 또는 <Inset> 명령어 모드로 전환 <Esc>vi는 입력 모드와 명령어 모드 이외에 라인 모드를 추가로 갖고 있는데, 이는 셸 명령어나 외부 프로그램들을 에디터의 내부에서 직접 실행 시킬 수 있는 모드입니다.

라인 모드는 vi의 본체인 ex가 실행되는 상테이므로 보다 원초적인 텍스트 조작이 가능해진다. 또한 라인 모드는 셸과 직접 연결되어 파이프를 구성하기 때문에 작업 중인텍스느에 대해서 다양한 작업을 연결시킬 수 있다.

다른 모드와는 달리 라인 모드는 화면의 마지막 줄에 라인 모드임을 알리는 콜론(:)과 함께 입력한 내용이 출력되어 진행 중인 내용을 확인을 할 수 있도록 되어 있다. 라인 모드는 명령어 모드에서만 전환될 수 있으며, 입력 모드에서 직접 라인 모드로 들어올 수 없다.

따라서 vi 에디터는 실행 직후에 위치한 명령어 모드에서 입력 모드 그리고 라인 모드의 세 가지 모드를 상호 전환시키면서 작업을 진행하는 방식으로 사용된다.

그림 삽입.

라인 모드에서 :을 먼저 입역한 뒤에 원하는 명령어를 입력하는 방식으로 vi 명령어 이외의 셸 명령어와 외부 명령어들을 실행시킬 수 있다.


1.시작    
vi file  vi를 시작하여 지정한 파일 편집  
vi -R file  읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집
view file  읽기 전용(read- only) 편집기로서 vi를 시작하여 지정한 파일 편집  


2.종료    
:wq  데이터를 저장하고 종료  
:q!  데이터를 저장하지 않고 종료  


3. 디스플레이 제어하기    
^L  현재 화면을 다시 디스플레이하기  
:set number  내부 줄 번호 디스플레이  
:set nonumber  배부 줄 번호 디스플레이 않기  



4. 마지막으로 지운 것 복사하기    
p  마지막으로 지워진 것을 커서의 뒤/아래에 삽입  
P  마지막으로 지워진 것을 커서의 앞/위에 삽입  
xp  두 문자를 바꿈  
deep  두 단어를 바꿈  
ddp  두 줄을 바꿈  



5. 패턴 검색    
/rexp  지정된 정규 표현식에 대해 앞으로 이동  
/  이전의 패턴에 대해 앞으로 검색을 반복  
?rexp  지정된 정규 표현식에 대해 뒤로 이동  
?  이전의 패턴에 대해 뒤로 검색을 반복  
n  /나 ?명령에 대해 같은 방향으로 반복  
N  /나 ?명령에 대해 반대 방향으로 반복  


6. 약어의 사용    
:ab short long  short를 long에 대한 약어로 변경  
:ab  현재 약어 목록을 표시  
:una short  약어 short를 표시  


7. 줄 길이의 조정    
r<Return>  문자를 뉴라인으로 변경  
J  줄의 결합  
:set wm=n  오른쪽으로 n문자 위치에서 자동적으로 줄 나눔  

8. 커서 이동    
h<Left>  커서를 한 칸 왼쪽으로 이동  
j<Down>  커서를 한 줄 아래로 이동  
k<Up>  커서를 한 줄 위로 이동  
l<Right>  커서를 한 칸 오른쪽으로 이동  
<Backspace>  커서를 한 칸 왼쪽으로 이동  
<Space>  커서를 한 칸 오른쪽으로 이동  
-  커서를 이전 줄의 처음으로 이동  
+  커서를 다음 줄의 처음으로 이동  
<Return>  커서를 다음 줄의 처음으로 이동  
0  커서를 현재 줄의 맨 앞으로 이동  
$  커서를 현재 줄의 맨 끝으로 이동  
^  커서를 현재 줄의 첫글자(공백이나 탭이 아닌)로 이동  
w  커서를 다음 단어의 첫 글자로 이동  
e  커서를 다음 단어의 끝 글자로 이동  
b  커서를 이전 단어의 첫 글자로 이동  
W  w와 같음(문장 부호 무시)  
E  e와 같음(문장 부호 무시)  
B  b와 같음(문장 부호 무시)  
(  다음 문장의 처음으로 이동  
)  이전 문장의 처음으로 이동  
{  다음 문단의 처음으로 이동  
}  이전 문단의 처음으로 이동  
H  커서를 화면 맨 위로 이동  
M  커서를 중간으로 이동  
L  커서를 맨 아래로 이동  


9. 편집 버퍼를 통한 이동    
^F  한 화면 아래로 이동  
^B  한 화면 위로 이동  
n^F  n화면 아래로 이동  
n^B  n화면 위로 이동  
^D  반 화면 아래로 이동  
^U  반 화면 위로 이동  
n^D  n줄만큼 아래로 이동  
n^U  n줄만큼 위로 이동  


10. 셸 명령 실행    
:!command  vi를 중단하고 지정한 셸 명령을 실행  
:!!  vi를 중단하고 이전의 셸 명령을 실행  
:sh  vi를 중단하고 셸을 실행  
:!csh  vi를 중단하고 새로운 C-셸을 실행  



11. 패턴에 의한 치환    
:s/pattern/replace/  현재 줄의 치환  
:lines/pattern/replace/  지정한 줄의 치환  
:line,lines/pattern/replace/  지정한 범위의 치환  
:%s/pattern/replace/  모든 줄의 치환  


12. 데이터 읽기  
:liner file  file의 내용을 지정한 줄 다음에 삽입  
:r file  file의 내용을 현재의 줄 다음에 삽입  
:liner !command  command의 결과를 지정한 줄 다음에 삽입  
:r !command  command의 결과를 현재의 줄 다음에 삽입  
:r !look pattern  지정한 pattern으로 시작된 단어 삽입  


13. 정규 표현식을 사용하기 위한 특수 기호    
.
뉴라인을 제외한 모든 단일 문자와 대응

*
영 또는 그 이상의 선행 문자와 대응

^
줄의 시작과 대응

$
줄의 끝과 대응

\<
단어의 시작과 대응

\>
단어의 끝과 대응

[ ]
묶여진 문자중의 하나와 대응

[^ ]
묶여진 문자를 제외한 아무것하고나 대응

\
이어지는 기호를 문자 그대로 해석


14. 줄 번호    
nG  줄번호 n으로 건너뛰기  
1G  편집 버퍼의 첫 줄로 건너뛰기  
G  편집 버퍼의 마지막 줄로 건너뛰기  
:map g lG  g가 lG와 같도록 매크로 정의  

15. 삽입    
i  입력 모드로 전환, 커서 위치 앞에서 삽입  
a  입력 모드로 전환, 커서 위치 뒤에서 삽입  
I  입력 모드로 전환, 현재 줄의 앞에 삽입  
A  입력 모드로 전환, 현재 줄의 끝에 삽입  
o  입력 모드로 전환, 현재 줄의 아래에 전개  
O  입력 모드로 전환, 현재 줄의 위에 전개  

16. 편집하고 있는 파일을 바꾸기    
:e file  지정한 파일의 편집  
:e! file  지정한 파일의 편집, 자동 점검의 생략  

17. 내용 고치기    
r  단지 한 글자만 변경(입력 모드로 바뀌지 않음)  
R  입력하는 대로 겹쳐 써서 변경  
s  삽입에 의해 한 단어의 변경  
C  커서의 위치로부터 줄 끝까지 삽입에 의한 변경  
cc  전체 줄을 삽입에 의한 변경  
S  전체 줄을 삽입에 의한 변경  
cmove  커서부터 move까지 삽입에 의해 변경  
~  대,소문자 바꾸기  


18. 고치기의 취소 또는 반복    
u  편집 버퍼를 수정했던 마지막 명령을 취소  
U  현재 줄을 저장  
.  편집 버퍼를 수정했던 마지막 명령 반복  

19. 문자 삭제    
x  커서가 있는 문자 삭제  
X  커서의 왼쪽 문자 삭제  
D  커서부터 줄의 끝까지 삭제  
dd  현재 줄의 전체 삭제  
dmove  커서부터 move까지 삭제  
dG  커서부터 편집 버퍼의 끝까지 삭제  
d1G  커서부터 편집 버퍼의 맨 앞까지 삭제  
:lined  지정한 줄의 삭제  
:line, lined  지정한 범위의 삭제  

20. 여러 줄의 복사와 이동    
:linecotarget  지정한 줄을 복사하여 target 줄 밑에 삽입  
:line, linecotarget  지정한 범위를 복사하여 target 줄 밑에 삽입  
:linemtarget  지정한 줄로 이동하여 target 줄 밑에 삽입  
:line, linemtarget  지정한 범위로 이동하여target 줄 밑에 삽입  

21. 데이터를 처리하기 위한 셸 명령의 사용    
n!!command  n번 줄에서 command의 실행  
!move command  커서부터 move까지 command 실행  
!move fmt  커서부터 move까지 줄들을 형식 맞추기  

22. 데이터 저장하기  
:w  원래의 파일로 데이터를 저장  
:w file  지정한 파일로 데이터를 저장  
:w>> file  지정한 파일에 데이터를 추가  

2008. 12. 12. 16:35
내가 애용하는 VIM 에서 정규표현식을 사용하는 방법이다.

너무나도 강력한 에디터인 VIM이다..ㅎㅎ 알면 알수록

[범위]/s/[target pattern]/[replacing pattern]/[옵션] [카운트]


옵션
c : 치환전 확인
g : 글로벌 치환
p : 치환된 마지막 라인 출력

예제
:1,10s/yes/no/g 처음 10행 치환
:%s/[Hh]ello/Hi/gc 치환 확인 물음
:s/Fortran/\U&/ 3 다음 3행의 "Fortran"을 대문자로 치환
:g/^[0-9][0-9]*/s//Line &:/ 숫자가 있는 모든라인에 Line: 추가

----------------------
[vi] 파일 오가며 편집하기
----------------------
:e#

"f4yy → :w → :e other_file → "fp
:f 버퍼에 4라인 복사후 붙이기
"F6yy
:f 버퍼에 6라인 추가

2008. 11. 24. 22:21

VIM UTF-8 Encoding

dEVELOPER's/VIM 2008. 11. 24. 22:21
나는 VIM을 쓴다. 편하니까. 안써본 사람들은 중독성 강한 이 프로그램을 잘 모른다..

최근에 파일 열다가 황당했다 완전 전부 깨지는 것이 아닌가.. UTF-8 때문이었다.

찾다 보니 VIM에서 바로 해결 가능한 좋은 방법이 있었다.

VIM을 실행한 상태에서 두 명령만 내리면 된다.

set tenc=korea
set enc=utf-8

역시 VIM은 좋다. ㅋㅋ
2008. 11. 24. 22:04
어디에선가 보고 나름대로 내가 쓰기 편하고 좋은 것들만 뽑아서 정리한 것들이다

다른 좋은 것들도 있지만 실상 잘 안써서..(뭐 사실 몰라서 못쓰는게 맞다, 방대한 기능을 활용못하는..ㅋㅋ)

이정도만~ 어쨌든 출처는 그리 자랑스럽지 못한 나의 개인 홈페이지다.

1번은 적당히 추가하고 나머진 파일 만들어서 1번 파일 있는데다 넣으면 끝.

http://eph.pe.kr/zboard/bbs/view.php?id=linux&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=40&PHPSESSID=fbfdf252c38bcdb05d845562a0d6340f
(참 길기도 하지..)

1번은 적당히 추가하고 나머진 파일 만들어서 1번 파일 있는데다 넣으면 끝.
1번은 원래 있는 파일이고 나머진 만든 파일이니 이름은 자기 마음대로~~

1. _vimrc

-----------------------------------------------------------------
"My Setting
source $VIMRUNTIME/../ephron_config.vim
source $VIMRUNTIME/../MyMapFunction.vim
source $VIMRUNTIME/../CustomFunction.vim
-----------------------------------------------------------------

2. ephron_config.vim
-----------------------------------------------------------------
set tags=./tags
set nu
set ci
set ai
set si

set sw=4
set ts=4
if has("gui_running")
        set lines=50
        set co=120
endif
"End of My Settings

"Customizing My Color Setting
colorscheme desert

"Customizing Plugin Setting
-----------------------------------------------------------------

3. CustomFunction.vim
-----------------------------------------------------------------
if version >= 500
func! GetTodayDate()
        exe "read !date/t|sed 's/-//g'"
endfunc
endif
-----------------------------------------------------------------

4. myMapFuction.vim
-----------------------------------------------------------------
map <F1> v]#ezf
map <F2> v]}zf
map <F3> zo
map <F9> a// EPHRON_<Esc>:call GetTodayDate()<CR> + kkkJxA
"map <F11> :25vs ./<CR>:set nonumber<CR>^Ww
map <F11> :WMToggle<cr>

"방향키 설정
-----------------------------------------------------------------