'Vim/Tutorial'에 해당되는 글 17건

  1. 2013.02.05 파일 열기(고급)
  2. 2013.02.04 파일 관련 기능
  3. 2013.02.02 문자, 문자열 검색/치환
  4. 2013.02.02 vim 에러 처리
  5. 2013.02.02 명령어 표기법에 대해서
  6. 2013.01.16 Vim Key mapping
  7. 2013.01.15 유용한 명령어들 몇가지
  8. 2012.05.09 vim Tutorial (PDF파일)

파일 열기(고급)

Vim/Tutorial 2013. 2. 5. 02:45 |

버퍼(파일) 목록 보기

:ls, :buffers, :files 이라고 명령하면 열려 있는 파일 목록이 나타난다.

위의 3개 명령어 중에 하나를 선택하여 명령을 내리면 아래의 사진처럼 화면이 나온다.


vim에서는 편집 중인 문서를 버퍼(buffer)라고 부르며, 문서를 불러와서 보거나 작업하는 기억장치라는 의미로 사용된다. 버퍼가 특정 파일과 연결되어 있는 상태에서 불러오거나 저장되는 경우라면 '버퍼 = 파일' 이라고 말해도 큰 무리가 없지만, 빈 문서로 만들어진 경우라면 아직 파일과 연결된 상태가 아니므로 파일이라고 부를 수 없다.

그래서 파일명이 있든 없든 작업하는 문서를 가리켜 버퍼라고 한다. vim 매뉴얼을 읽을 때도 상황에 따라서 버퍼가 문서임을 알아두면 이해하기 쉬울 것이다.


vim은 종료하기 전까지 한 번이라도 열었던 파일의 목록을 모두 유지하고 있다. 위의 그림처럼 파일 목록이 7개이며, 각 파일명 뒤에는 몇 번째 행을 보고 있었는지도 표시된다. 

숫자와 파일명 사이에 표시되는 %나 # 기호는 해당 파일의 상태를 나타낸다.


버퍼 목록에 표시되는 기호

%                현재 편집 중인 버퍼

#                  바로 이전에 열었던 버퍼 혹은 다음에 열도록 예비된 버퍼. <CTRL-^>를 누르면 #이 표시된 파일이 열린다.

a                  활성된 버퍼(현재 화면에 보이는 버퍼). 창 분할 기능을 쓰는 경우에는 여러 파일에 a표시가 나타난다.

+                  변경된 부분이 있는 버퍼


버퍼 목록에 파일 추가하기

일반적으로 버퍼 목록은 열었던 파일들을 자동으로 추가하여 작성된다. 하지만 열지 않았던 파일도 수동으로 목록에 추가할 수 있다. 

사용법은 :n {pattern} 으로, :n 명령의 확장된 방법이다. 예를 들어 :n *.txt 라고 하면 현재 디렉토리에서 *.txt 에 해당하는 모든 파일을 찾아서 목록에 추가한 후, 첫 번째로 검색된 파일을 열어준다.

여기에 하위 디렉토리를 검색하는 기능을 추가하고 싶을 때는 **를 붙여서 :n **/*.txt 라고 명령하면 된다. 

이를 활용해서 :n doc**/*.txt 라고 하면 doc로 시작하는 디렉토리에 대해서만 검색할 수 있다. 

:n 명령어가 확장되듯 이전 파일로 이동하는 명령인 <CTRL-^> 과 :e #{n} 으로 확장되며, N에는 :files에서 보이는 파일 번호를 지정할 수 있다. 


버퍼 관련 명령어들

:ls                                파일 목록을 확인한다.

:buffers

:files

:n {pattern}              지정된 pattern으로 파일을 검색하여 목록에 추가하고 첫 번째 검색된 파일을 열어준다.


{N}CTRL-^                {N} 번째 파일 목록을 연다.

:e #{N}

:0f                             현재 버퍼를 목록에서 제거한다. 연결된 파일이 있다면 해제하여 [No Name]버퍼로 만든다. 

:r[ead] 파일              파일을 끼워 넣는다.



본문에 등장한 파일명 인식하여 열기

본문에 등장하는 파일명을 인식하여 해당 파일을 열 수 있다. 주로 프로그래밍 소스나 스크립트 파일에서 볼 수 있다.

만약, 파일중에 /etc/bashrc 파일이 나오면 이 파일을 불러와서 살펴볼 수 있다. 방법은 :e /etc/bashrc 라고 명령하면 되겠지만, 엔터까지 포함하면 무려 열 다섯 번이나 키보드를 눌러야 한다. 

그래서 더 편리한 방법으로 파일명 위에 커서를 두고 gf 를 입력하면 곧바로 파일을 열 수 있다. (이 명령은 goto file 이라는 의미)


본문의 파일명을 인식해서 열어주는 명령어

gf                                커서 위치의 파일명을 인식해서 열어준다.

<CTRL-W> f             커서 위치의 파일명을 분할된 창에 열어준다.

<CTRL-W> gf           커서 위치의 파일명을 탭에 열어준다.


gf 는 디렉토리가 포함된 경우 경로 전체를 인식할 수 있으며, 경로가 없고 파일명만 있는 경우에는 현재 디렉토리와 path 옵션에 설정된 디렉토리를 순서대로 검색한다.


Tip: 

유닉스 계열의 vim에서는 path에 시스템 헤더 디렉토리가 기본으로 포함되어 있으므로 C 언어 헤더를 검색할 수 있다. 예를 들어 C 언어 소스코드의 #include <stdio.h> 가 있다면 stdio.h 위에 커서를 두고 gf를 누르면 시스템 헤더 파일을 찾아서 열어준다.

만일 사용자가 검색 대상 디렉토리를 추가하고 싶다면 path에 추가하면 된다. 예를 들어 ~/doc 를 추가하고 싶다면 :set path+=~/doc 라고 명령하면 된다. 

자주 쓰이는 파일들이 있다면 설정 파일인 .vimrc 에 경로를 추가해두면 되겠다.


'Vim > Tutorial' 카테고리의 다른 글

오퍼레이션 펭딩 모드 / 약어 매크로 / 레지스터 활용  (0) 2013.02.05
공백 지우기  (0) 2013.02.05
파일 관련 기능  (0) 2013.02.04
문자, 문자열 검색/치환  (0) 2013.02.02
vim 에러 처리  (0) 2013.02.02
Posted by scii
:

파일 관련 기능

Vim/Tutorial 2013. 2. 4. 03:13 |

열었던 파일 다시 열기

a.c 파일을 작업하다가 e! b.c 를 불러들였다는 가정하에, 

그럼 현재 b.c 파일을 편집하고 있을텐데 여기서 <CTRL-^> 를 누르면 이전 파일인 a.c 파일이 열린다. 계속 <CTRL-^>  를 누르면 a.c 파일과 b.c 파일 사이를 오갈 수 있다. 

이렇게 한번 열었던 파일을 다시 열 수 있는 이유는, vim이 최근에 연 파일 목록을 기억하고 있기 때문이다.


한번에 여러 파일 열기

vim a.txt b.txt c.txt 라고 명령하면 a.txt가 열린 상태로 vim이 시작되지만, 내부적으로는 세 파일이 목록에 등록이 된다. 이 상태에서 :n 이나 :N 명령을 사용하면 파일 사이를 전환할 수 있다. 반복 횟수를 지정하여 :2n 이라고 하면 두 번째 뒤의 파일로 이동한다.

파일 사이를 이동할 때, 실제로는 현재 파일을 닫고 다음 파일을 여는 순서로 진행되므로 변경된 내용을 저장하지 않으면 역시 에러가 발생한다. 

만일 변경된 내용을 버리고 강제로 다른 파일을 열려면 느낌표(!) 기호를 넣어 :n! 이나 :N! 으로 명령하면 된다. 


여러 파일 닫기

여러 파일이 열려 있을 때 :q 로 종료하려고 하면 다른 파일이 있기 때문에 종료되지 않는 경우가 있다. 이를 무시하고 종료하려면 :q! 나 모든 윈도우를 다는 :qa 명령을 사용하면 된다.


Tip: 표준 입력을 통해서 읽어오기

유닉스, 리눅스, 맥에서는 다른 프로세스에서 출력된 결과를, 표준 입력을 통해 vim에서 읽어 올 수 있다. 

예를 들어, ps -ef 명령의 결과를 vim으로 가져오고 싶다면 쉘에서 'ps -ef | vim -' 명령을 실행하면 된다. (아니면, vim에서 'r !ps -ef' 명령을 내려도 된다.)

이때 '-' 는 표준 입력을 의미한다. 이 기능은 명령의 결과가 길거나 실행 결과를 편집해야할 때 유용하다. 




다양한 파일 저장법

파일을 저장하는 명령에는 :w 외에도 다른 이름으로 저장하거나 변경점이 있는지 확인해서 저장하는 명령도 있다. 


파일을 저장하는 다양한 명령어

:w filename                        파일을 저장

:sav filename                    현재 파일을 다른 이름으로 저장(save as)

:up                                        변경 사항(update)이 있는 경우에만 저장

:x                                         vim을 종료하면서 변경 사항이 있는 경우에는 저장 (일반 모드에서는 ZZ)

※ 새로운 파일로 저장하면서 편집 중인 파일도 바꾸는 명령: sav[!] {file}


변경 사항이 있을 때만 파일 저장하기

:up 명령은 변경 사항이 있는 경우에만 저장하고 변경 사항이 없을 때는 아무일도 하지 않는다. 이에 비해 :w 명령은 무조건 저장하므로 변경 사항이 없을 때도 디스크 입출력이 발생하는데, 여러 사용자가 공동으로 사용하는 서버에서는 이러한 디스크 입출력은 부담이 된다. 

따라서 :up 명령을 권장한다. 

:x 명령은 :up과 :q 명령을 결합한 형태로서 :wq 대신 사용할 수 있다. 많은 사용자들이 :wq 로 vim을 종료하는데, :w 명령은 무조건 저장하여 디스크 입출력을 발생시킨다는 단점이 있다. 

따라서, 이제부터는 :wq 대신 :x나 ZZ 의 사용을 권장한다.




창 분할

창 수평 분할

:sp 명령을 입력하면, 창이 위/아래로 분할된다. 단축키로는 <CTRL-W> s 이다.

다른 파일로 창을 분할하고 싶다면 :sp file 명령을 사용하면 된다. 기본적으로 새 창과 기존 창은 균등한 크기로 나뉘며, 새창의 크기를 직접 지정하려면 sp 명령 앞에 크기를 넣으면 된다. 

예를 들어 :10sp file 로 명령하면 새로 생성되는 창의 크기는 10행이 된다. 


창 수직 분할

:vs 명령을 입력하면(vertical), 창이 왼쪽/오른쪽으로 분할 된다. 단축키로는 <CTRL-W> v 이다.


창 분할 명령어 정리

:[#]sp [파일명]                        [#]CTRL-W s                상하로 창을 분할. 파일명 생략하면 현재 파일을 의미

:[#]vs [파일명]                        [#]CTRL-W v                좌우로 창을 분할

:[#]new [파일명]                        [#]CTRL-W n            상하로 분할하고, 위쪽에 새로운 창을 만듦

:[#]vnew [파일명]                        [#]CTRL-W v           좌우로 분할하고, 왼쪽에 새로운 창을 만듦


여러 파일을 분할된 창에 열기

vim을 시작하면서 여러 파일을 분할도니 창에 열고 싶다면 -o 옵션을 사용하면 된다. 

vim -o hello.c hello2.c

이렇게 옵션을 넣으면 위쪽 창에 hello.c 를, 아래쪽 창에 hello2.c 를 열어준다.

소문자 -o 대신에 대문자 -O 를 사용하면 창은 좌우로 분할된다.


창 크기 조절

창의 크기를 조절할 때는 <CTRL-W> 에 +,- 를 사용하여 크기를 키우거나 줄일 수 있다. 

그리고 현재 열린 창의 크기를 모두 균등하게 만들 때는 <CTRL-W> = 를 사용한다.


분할된 창의 크기를 조정하는 명령어

CTRL-W =                    모든 창의 크기를 동일하게 조절

CTRL-W [#]+                # 크기만큼 크기를 키운다. #을 생략하면 1을 키운다.

CTRL-W [#]-                # 크기만큼 크기를 줄인다.




파일 내용 비교하기

vim 을 시작할 때 -d 옵션을 사용하여 vim -d file1 file2 처럼 명령하면, file1과 file2 를 수직 창 분할로 열면서 내용이 서로 다른 부분을 강조하여 표시해준다.

윈도우용 vim에서는 여러 파일을 선택한 뒤에 마우스 오른쪽 팝업 메뉴의 '빔으로 Diff' 를 실행하면 된다.


※ 다른 점을 비교한 후, 다른 점을 가져오는 기능(do)과 다른 점을 복사해 넣는 기능(dp)도 사용할 수 있다 


:diffthis 명령을 양쪽 모두 실행시키면, vim이 실행되어있는 상태에서 두 파일을 비교할 수 있다. 

그리고, :diffget, diffput 의 명령을 이용하면 다른점을 파일로 복사해 올 수 있다.




탭 페이지

창 분할 기능에는 결정적인 단점이 있다. 바로 분할할 때마다 편집 화면이 반으로 줄어든다는 점이다. 

그래서 vim 7 버전에서는 전체 화면에서 여러 파일을 열 수 있는 탭 페이지 기능이 추가되었다.


탭으로 열기

:tabedit aa.c 라곰 명령하면 화면 상단에 탭이 생기면서 현재 파일몇에 aa.c 파일의 탭이 열린다.


탭 사이 이동하기

:tabprevious 명령은 이전(previous) 탭으로 이동한다. 

:tabnext 명령은 다음(next) 탭으로 이동한다.

단축 명령인 :tabn, :tabp 으로 할 수 있다.

단축키인 <CTRL-PageDown>, <CTRL-PageUp> 이 많이 쓰인다. 주의할 점은 터미널에서는 <CTRL-PageDown>, <CTRL-PageUp> 키가 스크롤다운, 스크롤업으로 예약되어 제댜로 작동하지 않을 수 있다는 점이다.


탭 이동 명령

:[#]tabn[ext]                                다음 탭으로 이동, 일반 모드의 gt와 동일    

[#]gt                                                #에 숫자를 지정하면 탭 번호가 지정됨

[#]<CTRL-PageDown>               


:[#]tabp[revious]                        이전 탭으로 이동, 일반 모드의 gT와 동일

[#]gT                                             #에 숫자를 지정하면 반복수가 지정됨

[#]<CTRL-PageUp>

:tabm[ove] [#]                            #번째 탭으로 현재 탭을 이동시킨다(0부터 시작).  #이 생략되면 가장 오른쪽으로 이동.


탭 열고 닫기

:tabclose 명령을 입력하면 탭을 닫을 수 있다.

새 파일을 탭으로 여는 명령은 :tabnew 이다. 파일명을 지정하면서 새 탭을 열고 싶다면 :tabnew filename 명령을 사용한다.


탭 생성과 종료 명령

:[#]tabe[dit] filename            #번째 탭에 파일을 연다. #이 생략되면 현재 탭 뒤에 생성. 번호는 0부터 시작

:[#]tabnew filename            #번째 위치에 비어있는 탭을 만든다.

:[#]tabc[lose]                          #번째 탭을 닫는다. #을 생략하면 현재 탭을 닫는다.

tabedit, tabnew, tabclose 의 앞에 숫자를 넣으면 열거나 닫는 탭의 숫자를 정할 수 있다.


Tip:    vim 시작 시 여러 파일을 탭으로 열기

vim을 시작하면서 여러 파일을 탭으로 열고 싶은 경우!! 이를 위해서 -p 옵션이 제공된다. 

예를 들어 vim -p aaa.txt bbb.txt 라고 명령하면 두 파일이 각각 탭으로 열린다

'Vim > Tutorial' 카테고리의 다른 글

공백 지우기  (0) 2013.02.05
파일 열기(고급)  (0) 2013.02.05
문자, 문자열 검색/치환  (0) 2013.02.02
vim 에러 처리  (0) 2013.02.02
명령어 표기법에 대해서  (0) 2013.02.02
Posted by scii
:

vim은 문자 하나부터 단어, 문자열, 각종 패턴까지 다양한 방식의 문자를 검색할 수 있다. 이러한 검색 기능은 크게 문자 검색하기와 문자열 검색하기로 나눌 수 있다. 

물론 문자열 검색하기로도 문자 하나를 검색할 수 있지만, 나중에 자동화(매크로) 기능 등을 사용할 때는 문자 검색하기 기능을 주로 쓰기 때문에 따로 알아두는 것이 좋다.


문자 검색하기 : Find Charactor

어느 파일에서 f, 를 입력해보자. 그 후 세미콜론(;) 과 쉼표(,) 를 눌러보자. 그러면 방식을 쉽게 이해할 수 있을것이다.

즉, f는 다음에 나오는 문자를 탐색하라는 명령이다. f다음에 쉼표를 입력했으므로 쉼표를 찾는다. 

세미콜론(;)은 '다음 검색' 명령이며, 쉼표(,)는 '이전 검색' 명령이다.


문자 검색 기능

fc                    문자 c를 전방 검색

Fc                    문자 c를 후방 검색

tc                    문자 c를 전방 검색하여, 검색어의 한 칸 앞으로 이동

Tc                    문자 c를 후방 검색하여, 검색어의 한 칸 뒤로 이동

;                    가장 최근에 검색한 명령을 재검색

,                    가장 최근에 검색한 명령을 반대 방향으로 재검색




문자열 검색

문자열 검색이란 하나 이상의 문자나 기호, 공백으로 이루어진 문장 혹은 패턴을 찾는 기능이다.

일반 모드에서 /re라고 입력하면 문자열 re를 검색한다. 여기서 슬래쉬 문자(/)는 검색하는 기능을 호출하며, 명령행 모드를 호출하는 콜론(:)처럼 커서가 하단으로 이동한다.

문서 내에 검색 결과가 여럿이라면 n과 N을 이용해서 이동할 수 있다. 또한, /를 누른 후 위, 아래 화살표나 j,k를 사용하면, 이전에 검색했던 문자열도 불러올 수 있다.

n                    다음 검색 결과로 이동

N                    반대 방향의 검색 결과로 이동


커서 위치의 단어 검색

커서가 위치한 특정 단어를 검색하는 경우에는 단어를 입력하는 대신 별표(*)를 누르면 된다. 

하지만 별표로 검색하면 단어 단위로만 검색하게 된다. 따라서 앞뒤로 공백이 있거나 문장부호로 분리된 문자열만 검색 대상이 된다.

화면 하단에 나타나는 검색어도 '찾는문자열' 을 의미하는 정규 표현식인 \<찾는문자열\> 로 바뀐다.


※ 검색 후 발게 표시된 단어를 해제하고 싶을 때

1. /wejldkfjj123lj 처럼 절대 검색될 수 없는 문자열을 입력. 하지만 매우 긴 문서에서는 처리속도가 상당히 느리다.

2. :nohl 을 명령한다. 이 명령은 굳이 검색에 의해서가 아닌 하이라이트 부분까지도 모두 제거.

2. :set hls! 이거나 set nohls 를 명령한다. !는 toggle이다. 즉, on/off




문자열 교체하기

교체(substitution) 명령은 명령행 모드에서 사용한다. 

:%s/찾을문자열/바꿀문자열/g 

맨 앞은 교체 명령이 적용될 범위이고, s는 교체 명령어이다. s 다음에 나오는 문자 하나는 교체 명령어에서 사용할 구분자가 되는데, 일반적으로 슬래쉬(/) 를 사용한다. 

하지만 다른 문자를 사용해도 상관없다. 예를 들어, 슬래쉬 대신에 쉼표를 구분자로 사용한다면...

:%s,찾을문자열,바꿀문자열,g 이렇게 적을 수 있다.


문자열 교체 옵션

g                범위 내에서 검색된 모든(global) 문자열을 교체

i                대소문자를 무시(ignore case)

c                문자열을 교체하기 전 교체 여부를 확인(confirm)

e                교체 과정 중 에러를 무시한다. 에러 메시지도 표시하지 않음


문자열 교체 전 확인하기

%s,aaa,bbb,c 이렇게 명령을 한다면...교체 여부를 물어올 것이다.

확인 옵션인 c가 지정되면 일곱 가지 확인 입력(y/n/a/q/l/^E/^Y)을 선택할 수 있다.

y                교체를 허용

n                교체를 거부

a                앞으로 남은 모든(all) 교체를 실행

q                교체 작업을 끝냄(quit)

l                현재 행(line)의 교체 작업만 하고 교체 작업을 끝냄

^E                아래로 한 행을 스크롤하여 보여줌

^Y                위로 한 행을 스크롤하여 보여줌


교체 문자열에 구분자가 포함된 경우

교체 명령어에서 구분자로 슬래쉬를 사용한다면, 교체할 문자열에 슬래쉬가 포함되었는지를 주의해야 한다. 예를들어 /home/sun을 /user/sun 으로 바꾸려고 다음과 같은 명령을 사용하면 구분자가 너무 많다는 에러가 발생한다

:%s//home/sun//user/sun/g

이는 /home/sun이나 /user/sun에 포함된 슬래쉬를 모두 구분자로 판단했기 때문이다. 이런 에러를 막으려면 교체 문자열에 포함된 슬래쉬를 이스케이프(escape)해야 한다. 

이스케이프(escape)란, 명령행을 해석할 때 해당 문자를 제외(escape)한다는 의미이며, 해당 문자 앞에 역슬래쉬(\)를 붙이면 된다. 

그러나 이스케이프 횟수가 많아지면 가독성이 나빠지기 때문에, 차라리 구분자를 다른 문자로 바꾸는 것이 더 좋은 방법이 될 수 있다.


이스케이프한 명령과 구분자를 다른 문자로 바꾼 명령을 비교

:%s\/home\/sun/\/user\/sun/g

:%s,/home/sun,/user/sun/g

이 두 명령의 결과는 동일하다.




특수 문자 교체하기

특수 문자란 시각적으로 출력 가능한 일반 문자나 숫자, 기호를 제외한 나머지 문자로서 탭과 개행 문자(엔터 역할)가 대표적입니다. 이런 특수 문자들은 입력하는 방법이나 찾는 방법이 일반 문자와 다르다.


운영체제에 따른 텍스트 파일 저장 방식

도스                                    CR+LF

유닉스(맥 OS X 포함)            LF

구형 매킨토시(OS 9이하)        CR

※ CR(Carriage Return): ASCII의 13번 코드이며 커서를 행의 시작 부분으로 보낸다.

※ LF(Line Feed): ASCII의 10번 코드이며 커서를 다음 행으로 내립니다.


윈도우는 도스에서 발전했기 때문에 도스 형식을 사용한다. 따라서 엔터를 칠 때마다 CR과 LF 문자가 입력된다. 

유닉스 형식에서는 엔터를 칠 때 LF 하나만 입력된다. 이런 차이 때문에 도스에서 만든 텍스트 파일을 유닉스에서 열면 각 행의 끝에 CR 문자가 하나씩 더 보이고, 반대로 유닉스에서 작성된 텍스트 파일을 윈도우에서 열면 개행 문자를 찾을 수 없으므로 모든 행이 한 줄로 길게 붙어서 보인다.

이러한 형식 차이 때문에 서로 다른 운영체제끼리 텍스트 파일을 주고받으려면 변환 작업을 거쳐야 한다. 즉, '도스->유닉스'로 변환할 때는 CR+LF문자를 찾아서 CR문자를 빼주고, '유닉스->도스'로 변환할 때는 LF문자를 찾아서 앞에 CR 문자를 더해주어야 한다.

그런데 vim은 편집할 파일을 텍스트 파일로 간주하기 때문에 <CR> 같은 특수 문자는 화면에 표시하지 않는다. 그러나 변환 작업에서는 <CR> 문자를 보고 지워야 하기 때문에 특수 문자도 표시해주는 바이너리 모드에서 작업해야 한다.


바이너리 모드

vim에서 바이너리 모드로 파일을 여는 방법은 두 가지가 있다. 

첫째는 vim시작시 -b 옵션을 추가하여 'vim -b 파일명'으로 명령하면 된다. 그러나 윈도우용 vim은 이 방법을 쓰기가 번거롭다.

두 번째는, vim을 실행한 후 바이너리 모드(:set binary)를 켜고 파일을 여는 것이다.


1. 윈도우용 gvim실행

2. :set binary 명령으로 바이너리 모드 옵션을 켠다.

3. 파일 열기를 실행해서 파일을 읽어 들인다.


도스 형식 파일을 유닉스 형식 파일로 변환하기

<CR> 문자(^M)를 제거하면 유닉스 텍스트 형식이 된다. 

교체 명령어에서 찾을 문자열은 ^M으로 지정하고, 바꿀 문자열에는 아무것도 지정하지 않는다. 그런데 주의할 점은 화면에 보이는 ^M 문자는 특수 문자이기 때문에 ^과 M을 각각 입력하지 않고, <CTRL-V> <CTRL-M>을 눌러서 입력해야 한다.

만일 이 방식이 마음에 들지 않으면 ^M대신 \r을 사용하여 :%s/\r//g 라고 명령해도 된다.

또한 윈도우용 vim에서는 <CTRL-V>가 붙여넣기 기능으로 사용되므로, 이런 문제를 피하기 위해 <CTRL-V> 대신 <CTRL-Q>를 사용해도 된다.

모든 행이 한 줄로 붙어서 나온다. 이는 메모장이 유닉스 텍스트 형식을 인식할 수 없어 때문에 일어나는 결과이다.


유닉스 형식 파일을 도스 형식 파일로 변환하기

유닉스 형식에서 작성된 텍스트를 도스 형식으로 변환하기 위해서는 행 끝에 <CR> 문자를 추가해야 하며, 이 작업은 굳이 바이너리 모드에서 할 필요가 없다.

유닉스 형식의 텍스트 파일을 연 다음 :%s/$/\^M/g 라고 명령한다. 찾을 문자열은 행의 끝을 의미하는 $이고, 교체할 문자열은 <CR> 문자를 의미하는 ^M을 이스케이프하여 역슬래쉬를 앞에 붙인다.


텍스트 형식 변환 옵션

실제로 '유닉스 -> 도스', '도스 -> 유닉스' 로 변환할 때는 간단한 방법이 존재한다. 바로 fileformat 옵션을 설정하는 방법이다.

예를 들어 :set fileformat=dos 라고 설정하고 저장하면 해당 파일이 도스 형식으로 저장된다. dos 외에 unix, mac 등을 지정할 수 있다.

fileformat은 ff로 줄여서 쓸 수도 있다.




※ 현재 커서가 위치한 문자의 ASCII 코드 값을 알아내는 명령은 :ascii 이다. :as 로 줄여 써도 된다.

리눅스라면, 쉘에서 man ascii 명령어를 사용해 전체 ASCII 코드 값을 볼 수 있다.


'Vim > Tutorial' 카테고리의 다른 글

파일 열기(고급)  (0) 2013.02.05
파일 관련 기능  (0) 2013.02.04
vim 에러 처리  (0) 2013.02.02
명령어 표기법에 대해서  (0) 2013.02.02
Vim Key mapping  (0) 2013.01.16
Posted by scii
:

vim 에러 처리

Vim/Tutorial 2013. 2. 2. 04:21 |

만약, 터미널에서 vim으로 파일을 편집하다가 잠시 터미널로 나와서 다른 작업을 하고 실수로 다시 멀티태스킹했던 파일을 열 경우...(아래의 사진처럼)


즉, 파일을 두 번 열려고 할 경우 vim은 경고 메시지를 띄운다.


이런 에러가 나는 이유는..?

vim에서 파일을 열면 스왑(swap) 파일을 하나 생성한다. 생성된 스왑 파일은 원래 파일명 앞에 마침표(.)를 하나 붙여서 숨김 파일로 만들고, 뒤에는 .swp의 확장자명을 붙인다. 

이 스왑 파일에는 편집 과정의 모든 이력이 저장되어 실행 취소(undo) 용도로 사용되는데, vim이 정상적으로 종료되면 스왑 파일은 자동으로 삭제된다. 하지만 vim이 종료하지도 않았는데 또 같은 파일을 열면 스왑 파일을 만들지 못하기 때문에 에러가 발생한다.

이 에러에 대해 vim에서는 다섯 가지 해결책을 제시한다. 

               읽기 전용으로 파일을 연다.

E                무시하고 파일을 편집한다.

R                복구 모드로 파일을 연다.

Q                vim을 종료한다.

A                vim을 종료한다.(core 파일을 만들 수 있다면 만든다. 디버깅 용)


읽기 전용(O)으로 열어보는 경우, 기존 스왑 파일에 아무런 영향을 주지 않는다.  그러나 편집(E)으로 열어보는 경우, 나중에 서로 덮어쓰는 경우가 발생할 수 있다.


복구 모드(R)는 vim이 비정상적으로 종료하여 스왑 파일의 내용이 원본 파일에 저장되지 못한 경우에 사용된다. 이때는 안내 메시지가 약간 다르기 때문에 쉽게 판단할 수 있다.

이를 테면, 위의 사진에는 process ID 부분의 pid 번호 뒤에 'still running' 이라는 메시지가 있었지만, 비정상적으로 vim을 종료한 경우에는 pid 번호 뒤에 'still running' 메시지가 보이지 않게 된다. 또한 하단에 실행 가능한 명령에 D(delete)가 나타나게 된다.

따라서 이런 경우에는 복구 모드로 파일을 열면 스왑 파일에 저장된 파일 내용을 불러오게 된다. 그러면 사용자는 이전 원본 파일과 복구된 내용을 비교해서 저장 여부를 결정하면 된다.

복구 후에도 원본 스왑 파일은 삭제되지 않으므로 에러 화면이 계속 나타날 수 있다. 그러므로 복구를 해서 스왑 파일이 필요 없는 경우라면 안내 화면에서 d를 눌러 스왑 파일을 삭제해주도록 한다.


※ Q나 A는 아무런 작업을 하지 않고 vim을 종료하는 기능인데 A의 경우는 디버깅용 덤프 파일을 생성하는 점이 다르다.


'Vim > Tutorial' 카테고리의 다른 글

파일 관련 기능  (0) 2013.02.04
문자, 문자열 검색/치환  (0) 2013.02.02
명령어 표기법에 대해서  (0) 2013.02.02
Vim Key mapping  (0) 2013.01.16
유용한 명령어들 몇가지  (0) 2013.01.15
Posted by scii
:

명령어 문법을 표기할 때 괄호가 없거나 { } 괄호로 둘러싸인 부분은 필수(required)로 입력해야 하며, [ ] 괄호는 옵션(optional)으로 생략 가능한 부분이다.


ex)    cmd [ -c ]  [ -s {expr | sfile} ]  {dfile}


예를 들어 위와 같은 명령에서 -c는 써도 되고 생략해도 되며, -s {expr | sfile} 부분도 옵션이지만 일단 -s가 쓰인 경우라면 expr이나 sfile 중 하나는 꼭 써야 한다는 뜻이다.

그리고 마지막의 dfile은 빼먹으면 안 되는 부분이다.


'Vim > Tutorial' 카테고리의 다른 글

문자, 문자열 검색/치환  (0) 2013.02.02
vim 에러 처리  (0) 2013.02.02
Vim Key mapping  (0) 2013.01.16
유용한 명령어들 몇가지  (0) 2013.01.15
vim Tutorial (PDF파일)  (0) 2012.05.09
Posted by scii
:

Vim Key mapping

Vim/Tutorial 2013. 1. 16. 17:10 |

I want to map <Ctrl + S> as Save command in Vim.

Becuase <Ctrl+s> stops the output in the terminal, it's important to change the shortcut first using stty command. 



># stty stop ^K        // vim에서 Ctrl+s를 쓰기위하여 리눅스의 stty중 stop부분을 Ctrl+K로 바꿨다.


In the terminal, <Ctrl+S> command is stop printing inputs 


># vim .vimrc

map <C-S> :w<CR>                 'command mode

map! <C-S> <Esc>:w<CR>       'insert mode        // map에 !를 붙여서 insert모드에서도 가능하게끔 하였다.




위에 처럼 셋팅하면 vim 에디터에서 ctrl+s로 저장을 할 수 있다. 

하지만 그 순간뿐이다. 재부팅하거나 터미널을 다시 시작하면 위에 했던 일련의 셋팅들이 모두 초기화된다. 

그래서 자신의 shell 환경설정 파일을 수정해야 한다. 

내 shell은 bash shell 이므로 $HOME ./bashrc 를 수정하였다. 




References

1. How to map keys in vim, http://how-to.wikia.com/wiki/How_to_map_keys_in_vim

2. Mapping keys in Vim - Tutorial, http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-_Tutorial_%28Part_1%29

3. Mapping Keys, http://newbiedoc.sourceforge.net/tutorials/vim/mapping-vim.html.en


'Vim > Tutorial' 카테고리의 다른 글

vim 에러 처리  (0) 2013.02.02
명령어 표기법에 대해서  (0) 2013.02.02
유용한 명령어들 몇가지  (0) 2013.01.15
vim Tutorial (PDF파일)  (0) 2012.05.09
vi editor  (0) 2012.05.02
Posted by scii
:

폴딩하기

: 코드해석이나 코드작성할 때 참고하지 않아도 되는 함수나 블록들을 폴딩화 시키면 좀 더 깔끔하게 작업을 할 수 있다.

zf    :    폴딩을 한다.

zo    :    폴딩을 연다.

zc    :    폴딩을 닫는다.

블록 지정한 후 zf 를 하면 폴딩이 된다.

폴딩을 여는 것은 zo, 닫는 것은 zc 이다.




위치 마킹하기

: 자주가는 함수부분이나 특정한 곳을 임의로 마킹할 수 있다. 그러면 작업 속도가 좀 더 빨라질 것이다.

m[임의의 알파벳]    :    마킹

`[마킹한 알파벳]    :    마킹된 위치로 돌아갈 때 (` 기호는 backtick을 의미)


마킹의 세가지 종류

1. A-Z    :    전역 마킹 - 현재 파일을 포함한 다른 파일 간의 마킹이 가능하다. (다른 파일간에도 이동)

2. a-z    :    지역 마킹 - 현재 파일 내에서만 마킹이 가능하다. (현재 파일에서만 이동)

3. ~/.viminfo 파일에서 자동으로 지정한 0-9


:marks    :    마킹한 모든 정보를 보여준다. 




편집중에 명령어의 결과값을 편집기에 삽입하기

파일을 합칠때 혹은 명령을 내린 후 콘솔화면에 출력되는 결과가 필요할 수도 있다. 그럴 때 쓰면 유용하겠다.

:r ![명령]    :    명령이 수행된 결과가 현재 커서의 위치에 끼워 넣어진다.

ex) :r !file1.c    :    현재 커서의 위치에 file1.c 내용이 끼워 넣어진다.




'Vim > Tutorial' 카테고리의 다른 글

vim 에러 처리  (0) 2013.02.02
명령어 표기법에 대해서  (0) 2013.02.02
Vim Key mapping  (0) 2013.01.16
vim Tutorial (PDF파일)  (0) 2012.05.09
vi editor  (0) 2012.05.02
Posted by scii
:


vimbook-OPL.pdf


문자열 치환: %s/old/new/g  => %는 문서전체, s는 치환, old는 찾는 문자열, new는 바꿀 문자열, g는 한줄에 여러개 있는 것 다 바꿈. global


화면 분할: ctrl + sw -v 또는 :split, vsplit


분할된 화면에서 파일 부르기: E, e/mnt/rrr/hello.cpp


좌우 비교: diffthis (양쪽에서 모두 명령어를 넣어주어야한다.)


서로 다른 블록에서 반대쪽으로 내용 덮어쓰기: diffput


서로 다른 블록에서 반대쪽 내용으로 덮어쓰기: diffget

'Vim > Tutorial' 카테고리의 다른 글

vim 에러 처리  (0) 2013.02.02
명령어 표기법에 대해서  (0) 2013.02.02
Vim Key mapping  (0) 2013.01.16
유용한 명령어들 몇가지  (0) 2013.01.15
vi editor  (0) 2012.05.02
Posted by scii
: