Tech & IT/컴퓨터활용 Tips

나의 VI 명령어 노트

해피콧 2009. 10. 6. 01:00
'); }
'); }
VIM가장 잘 정리된 문서

Learning_the_Vi_Editor.zip일괄 주석 처리하기

Ctrl + v로 블럭 지정 후 Shift + i 로 //입력 후 ESC
Shift + v로 블럭 지정 후에 : 입력 후  :'<,'>s/^/\/\//

- 주석 추가
v로 비주얼모드에서 구간 설정 후
:'<,'>s/^/\/\//gc
a 키로 all 선택

- 주석 제거
v로 비주얼모드에서 구간 설정 후
:'<,'>s/^\/\///gc
a 키로 all 선택

- 주석 추가
v로 비주얼모드에서 구간 설정 후
:'<,'>norm i// (라인 앞에 //를 추가한다)

- 주석 제거
v로 비주얼모드에서 구간 설정 후
:'<,'>norm xx  (x의 개수만큼 앞에서부터 지워진다)

tab 조정
> or <
블락 지정 후 > or < 를 입력하면 한tab씩 이동

VIM설정 및 활용



N     찾은것중 위에것으로 가기
% s/find/substituent/g
자동 indentation :  Block 지정후 =
Block지정 : v G(끝)
Ctrl+W+V(vertical): Vi 가르기
Ctrl+W+W : 창 이동 
Ctrl+W+<(>) : 창 작게(크게) 

mutt: 메일읽기



===========================================================
vi에서 history buffer사용하기
-----------------------------------------------------------
The following was posted on the Irish Linux User Group mailing list:

<quote>
ok, let's say your cursor is on ok, and you delete this paragraph with
the command [d}] (just the d} part, for this mail i'm wrapping
keystrokes in []'s).  the reason you deleted it is because you want to
move it to another file.

so now you open the other file with [:e other.file.txt<return>].  as
you're scrolling down to where you want to put it, you accidentally
delete/yank some text.

you've saved the last file and now doing [p] just inserts the text you
just deleted/yanked.  how can you get back what you deleted?  vim
extends vi's numbered delete buffers so that they work from one file to
the next - switching files doesn't delete the numbered delete buffers.

the numbered buffers are numbered from 0 to 9.  ["0p] is the same as
plain old [p].  ["1p] is the buffer from the previous delete, ["2p] is
from the delete before that, etc.  note that while ["0p] has the last
delete or yank, the other numbered buffers only contain previous
deletes.

it's handy, and thanks to donncha for looking it up the other day while
i was on the train.

</quote>
Credit where credit due, it was Kevin Lyda who posted this.

============================================================================================
vi명령어 정리    출처 : http://myhome.hananet.net/~atopia/

1.1 VI 명령어 모드 3 가지 ##
1) ESC 모드
2) 편집모드
3) 콜론모드(ex모드)
1.2 VI 명령어의 간단한 문법 
(반복횟수)(편집명령)(반복횟수)(커서이동명령)
현재의 위치에서 커서 이동명령의 내용대로 문서의 
임의위치로 이동하는 순간, 편집명령어의 내용이 수행된다.
1.3 ESC 모드에서 사용되는 몇가지 기호
G         화일의 맨끝
^         현재줄의 맨앞 (빈칸무시)
0         현재줄의 맨앞
$          현재줄의 맨뒤
%         짝을 이루는 기호 확인하기
w         다음 단어
b          이전 단어
e          현재 단어의 끝 글자
1.4 여러가지 특수한 기호들
.        :  한글자를 대표하는 기호 (dos 의 ? 와 동일)
*        :  여러개의 문자를 동시에 대표하는 기호
^        :  줄의 처음시작.
$        :  줄의 맨끝.
%        :  처음줄부터 끝줄까지
\        :  특수한 기호들이 가지는 뜻을 없앨때 사용.
[ ]      :  일정한 제한을 두어 글자를 대표하고자 하는 기호.
[a-z]    :  a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z 를 대표 
[A-Z]    :  A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z 를 대표 
[AB]     :  A 또는 B
p[aeiou]t:  pat, pet, pit, pot, put 를 대표
[0-9]    :  0,1,2,3,4,5,6,7,8,9 를 대표

2. 커서 움직이기
2.1 글자 단위 이동
         위쪽으로
        
         \  k                    사선을 옆으로 그어 놓은 이유는 보통
          \                      초보자들이 h, l 은 잘 구별하는 반면
왼쪽으로  h  \   l  오른쪽으로     k, j 를 항상 혼동하기 때문이다
            \
          j  \                   항상 h,j \ k,l 로 기억해두면 잊지않
                                 게 된다.
       아래쪽으로
2.2 줄 단위 이동
^       :   줄의 맨앞으로 (빈칸무시)
0       :   줄의 맨앞으로
$       :   줄의 맨뒤로
%       :   짝을 이루는 기호 확인하기
+       :   다음줄의 첫번째 글자로
-       :   윗줄의   첫번째 글자로
n|      :   현재줄의 n 번째 열로 (n은 임의의 숫자)
H       :   화면상에 처음줄로
M       :   화면상의 중간줄로
L       :   화면상의 마지막줄로
nH      :   화면상의 처음줄로부터 n 줄 밑으로
nL      :   화면상의 마지막줄로부터 n 줄 위로
G       :   맨 마지막줄로 (go)
nG      :   n 번째줄로
gg      :   맨 마지막줄로
ngg     :   n 번째줄로
:n      :   n 번째줄로
2.3 단어 단위 이동
w :   한단어 오른쪽으로 (word)
b :   한단어 왼쪽으로 (back)
e       :   현재 단어의 끝으로 이동 (end)
E       :   현재 단어의 끝으로 이동 (구두점 무시 - 영문자에 해당 - ? . !.)
)       :   다음 문장의 시작으로
(       :   이전 문장의 시작으로
}       :   다음 문단의 시작으로
{       :   이전 문단의 시작으로
]]      :   다음 섹션의 시작으로
[[      :   이전 섹션의 시작으로
2.4 화면단위 이동
Control - F(orward)   한화면   밑으로 이동.
Control - B(ackward)  한화면   위로   이동.
Control - D(own)      반쪽화면 밑으로 이동.
Control - U(pon)      반쪽화면 위로   이동.
Control - E           커서는 현재위치 그대로 화면만 한줄씩 위로   이동
Control - Y           커서는 현재위치 그대로 화면만 한줄씩 아래로 이동
z                     커서의 위치와 함께, 화면상의 맨위로
nz                    n번 라인을 화면상의 맨위로
z.                    커서의 위치와 함께, 화면상의 중간으로
z-                    커서의 위치와 함께, 화면상의 맨아래로
## Control - G        현재 편집문서의 정보 보여주기
## Control - L        화면 재표시 (글자가 깨졌을경우)
## Control - R(edraw) 화면 재표시 (글자가 깨졌을경우)

3. 편집하기
3.1  복사, 붙이기, 합치기
y       :   (Yank)    복사하기
          yy        한줄복사
          2yy       두줄복사
          nyy       n줄 복사 (n 은 임의의숫자)
          yw        한단어 복사
          y2w       두단어 복사
          y$        그줄 끝까지 복사
          y0(y^)    그줄 처음까지 복사
          yG        문서의 끝까지 복사
          Y         한줄복사 (yy 와 동일)
## 마지막 명령어의 반복 ##
.       :   마지막에 수행한 명령어를 반복한다.
          2.        명령어를 2번 반복한다.
p       :   (Put or Paste) 붙이기
          p         아래로(오른쪽으로) 붙이기
          2p        아래로(오른쪽으로) 두번 붙이기
          P         위로(왼쪽으로) 붙이기 
          2P        위로(왼쪽으로) 두번 붙이기
J       :   (Join)    두줄 합치기
          J         현재줄을 윗줄에 붙이기 (두줄 합치기)
          3J        세줄합치기
3.2 지우기, 복구하기, 바꾸기
d       :   (Delete)  지우기
          dd        한줄지우기
          2dd       두줄지우기
          ndd       n줄지우기 (n 은 임의의숫자)
          dw        한단어 지우기
          d2w       두단어 지우기
          d$        그줄 끝까지 지우기
          d0(d^)    그줄 처음까지 지우기
          dG        문서 끝까지 지우기
          D         그줄 끝까지 지우기 (d$ 와 동일)
u       :   (Undo)    복구하기
          u         한번복구하기
          2u        두번복구하기
c       :   (Change)  바꾸기
          cc        한줄바꾸기
          2cc       두줄바꾸기
          ncc       여러줄 바꾸기 (n 은 임의의숫자)
          cw        한단어 바꾸기
          ce        한단어 바꾸기 (공백 제외)
          c2w       두단어 바꾸기
          c$        그줄 끝까지 바꾸기
          c0(c^)    문서 끝까지 바꾸기
          C         그줄 끝까지 바꾸기 (c$ 와 동일)
r       :   (Replace) 한글자 바꾸기
          r         한글자 바꾸기
          2r        두글자 바꾸기
## r 명령어는 insert 모드로 바뀌지 않는다. ## 
R       :             바꾸면서 덮어 쓰기
s       :             한글자 지우고 insert 모드로 - cl 와 동일 -
S       :             한줄지우고 insert 모드로 - cc 와 동일 -
~       :             대문자 <-> 소문자 바꾸기 - 영문자에만 해당 -
## 지우기와 바꾸기의 차이점은 바꾸기 명령어 후에  ##
## vi 편집모드로 바뀐다.                          ##
4. 찾기
/pattern              pattern 이라는 단어 찾기 - 위에서 아래로
?pattern              scully 라는 단어찾기 - 아래에서 위로
/       :             찾기반복 - 위에서 아래로 
n       :             찾기반복 - 위에서 아래로
?       :             찾기반복 - 아래에서 위로
N       :             찾기반복 - 아래에서 위로
fx      :             현재줄에서 x문자 찾기 - x 는 한개의 글자 -
Fx      :             현재줄에서 반대방향으로 x문자 찾기 - x 는 한개의 글자 -
tx      :             현재줄에서 x문자를 찾아서 바로전에 커서놓기
Tx      :             현재줄에서 반대방향으로 x문자를 찾아서 바로후에 커서놓기
;       :             현재줄에서 한글자 찾기반복 
'       :             현재줄에서 한글자 찾기반복 - 반대방향으로 -
## 찾기와 편집명령의 응용 ##
d/simple              simple 이라는 단어가 나올때까지 지우기
d/^scully             줄의 맨앞에 scully 라는 단어가 나올때까지 지우기
y/yahoo               yahoo 라는 단어가 나올때까지 복사하기
5. 편집모드 지정하기
i       :   insert    현재커서위치
          10i*      * 문자를 10개 집어넣기
          25i=-     =- 를 25개 반복하기
I       :             현재커서가 위치한 줄의 맨처음에
a       :   append    현재커서위치 바로 다음에
A       :             현재커서가 위치한 줄의 맨끝에
o       :   open      현재커서위치 바로 아래줄에
O       :   Open      현재커서위치 바로 윗줄에 
6. 위치 기억하기
mx      :   mark      현재의 커서위치를 x 라는 문자로 기억          
`x      :             기억된 x 위치로 이동
``      :             이동하기 전의 위치로 (제자리)
'x      :             기억된 x 위치의 맨 앞으로 이동
''      :             이동하기 전 위치의 맨앞으로 이동 
7. 버퍼 이용하기
"xyy    :             x 라는 이름의 버퍼에 한줄 복사 하기
"xp     :             x 라는 이름의 버퍼에 저장된 내용을 붙이기
## 잠시 쉬었다 가기 ##
:=                    현재 줄번호 보여주기
:/pattern/ =          pattern 이 위치한 줄번호 보여주기

8. ex 명령어 익히기
8.1 ex 명령어의 기본형식 
:k,l command m
(범위지정) (명령어) (명령이 수행될 위치)
----------------------------------------
예)
:1,10 co 50           1 줄 부터 10 줄 까지를 50 줄 이후로 복사.
:34,50 d              34 줄 부터 50 줄 까지 삭제.
:100,150 m 10         100 줄 부터 150 줄까지를 10 줄 이후로 옮김.
:.,$ d                현재줄부터 끝까지 지우기
:.,+20 co -4          현재줄부터 20줄을, 4줄 위에 복사하기
:-,+ t 0              위, 아래로 한줄(총 3줄)씩을, 문서 맨위에 복사하기
:/pattern/ d          pattern 이 들어있는 줄 지우기
:/pattern/ -nd        pattern 이 들어있는 줄로부터 n 번째 윗줄 지우기
:/pattern/ +nd        pattern 이 들어있는 줄로부터 n 번째 아랫줄 지우기
:/pattern1/,/pattern2/ d
                    pattern1 이 들어있는 줄부터, pattern2 가 들어있는 
                    줄까지 지우기
:.,/pattern/ m 23     현재줄부터 pattern 이 들어있는 줄까지, 23번줄 이후로 
                    옮기기
8.2 g 옵션 붙이기
:g/pattern            화일전체에서 마지막으로 pattern 이 쓰여진 줄로 가기 
:g/pattern/ p         화일전체에서 pattern 이 있는줄 보여주기
:g/pattern/ nu        화일전체에서 patterm 이 있는줄을 번호와 함께 보여주기
:60,124 g/pattern/ p  60,124 줄 사이에서 pattern 이 들어있는줄 보여주기
8.3 저장 및 종료하기
:w                    저장하기 (write) :q                    종료하기 (quit)
:wq                   저장하고 종료하기
:x                    저장하고 종료하기 (:wq 와 동일)
:w!                   강제로 저장하기 (read-only 로 열었을경우)
:q!                   편집한 내용을 저장하지 않고 종료하기
:w new_file_name      새로운 파일이름으로 저장하기
:w %.new              현재화일 이름에 .new 를 붙여서 새로운 화일로 저장.
:230,$ w file_name    230 줄부터 끝줄까지 file_name 으로 저장하기
:.,600 w file_name    현재줄부터 600줄까지 file_name 으로 저장하기
:1,10 w new_file      1줄부터 10줄까지 new_file 로 저장하기
:340,$ w >> new_file  340줄부터 끝줄까지 new_file 에 추가하기
8.4 읽기
:r[ead] filename      현재위치에 filename 읽어들이기
:r /usr/local/data    현재위치에 /usr/local/data 읽어들이기
:185 r /usr/local/data
                    185줄 이후에 /usr/local/data 읽어들이기
:$ r /usr/local/data  맨끝줄 이후에 /usr/local/data 읽어들이기
:0 r /usr/local/data  맨윗줄에 /usr/local/data 읽어들이기
:/pattern/ r /usr/local/data
                    pattern 이 존재하는 줄에 /usr/local/data 읽어들이기
8.5  다중편집하기
vi file1 file2 file3
:args                 편집중인 화일목록 보여주기
:n[ext]               다음 화일로 넘어가기
:prev[ious]           이전화일로 돌아가기
## 편집중인 화일이 저장되지 않으면 다음 화일로 넘어갈수 없다. ##
새로운 화일 편집하기
:e[dit] file_name     새로운 file_name 편집하기.              
:e!                   현재의 편집중인 내용을 무시하고 가장 최근에 
                    편집한 내용을 다시편집하기
8.6 g 옵션과 바꾸기
:m,n s/old/new/g      
:g/pattern/ s/old/new/g
-------------------------
:1,30 s/his/the/gc    1 줄부터 30 줄까지 his 를 the 로 바꾸면서 확인하기.
:g/BX/ s/Esc/ESC/g    BX가 있는줄만 찾아서 Esc 를 ESC 로 바꾸기.
:% s/editer/editor/g  처음줄부터 마지막줄까지, editer 를 editor 로 바꾸기
:g/editer/ s//editor/g
                    위와 동일("s/" 다음에 인자가 없어서 윗줄과 같은효과)