기본적인 문자열 탐색 


vim에서 특정한 문자열을 찾는 방법은 표준 모드에서 정방향으로 찾을 경우 슬래쉬(/), 역방향으로 찾을 경우 물음표(?)키를 누른 후 찾기 원하는 문자열을 입력하기만 하면 된다.


명령 라인에 /int  int라는 문자열 전방탐색

명령 라인에 ?int  int라는 문자열 후방탐색


문자열 탐색의 결과는 다음의 사진과 같다.


 

탐색된 문자열에 노란색 하이라이트가 표시된 것은 vim의 옵션에서 hlsearch 옵션이 활성화(on) 되었기 때문이다하이라이트를 없애려면 :set nohlsearch 또는 :set nohl 명령을 입력하여 해당 옵션을 비활성화(off) 하면 된다.

 

그리고 탐색이 이루어진 후 커서를 다음에 일치하는 문자열로 이동하려면 소문자 n키를 누르고 이전에 일치하는 문자열로 이동하려면  대문자 N을 누른다. , 슬래쉬(/)로 정방향 탐색을 할 경우 n키를 누르면 커서는 문서의 정방향에 있는 탐색된 문자열로 이동하고, N키는 문서의 역방향에 있는 탐색된 문자열로 이동한다. 하지만 물음표(?) 역방향 탐색을 할 경우 정반대가 되어 n은 문서의 역방향으로 이동하고 N은 문서의 정방향으로 이동하게 된다.


소문자 n  다음 일치하는 문자열로 커서 이동

대문자 N  이전 일치하는 문자열로 커서 이동


커서 위치 단어 자동 탐색


명령 모드에서 별표(*)를 누르면 커서가 위치한 단어를 자동으로 탐색한다. 이때 별표(*)를 누르는 것은 명령 라인에 /\<(커서가 위치한 문자열)\> 형식으로 입력되면서 정규표현식으로 커서가 위치한 단어를 전방 탐색하라는 명령과 동일하게 된다. 


가령, 커서가 다음 단어의 위치에 있을 때 별표(*)를 누르면

int  /\<int>\>int라는 문자열을 전방 탐색


vim의 문자열 탐색의 강력함은  정규표현식을 같이 사용할 때 그 진가가 드러나게 되므로 다음 포스팅 부터는 vim정규표현식을 공부해보도록 하자.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


026 vim의 문자열 탐색.apkg


문자열 정렬


vim은 기본적으로 왼쪽으로 정렬되어 있지만 다음과 같이 명령어를 명령 라인에 입력하여 가운데 정렬이나 오른쪽 정렬로 바꿀 수 있다


:left 왼쪽 정렬

:center 가운데 정렬

:right 오른쪽 정렬


vim의 정렬은 현재 화면의 너비를 기준으로 이루어진다. 아래의 그림을 보면 vim의 화면의 너비(textwidth)78으로 설정되어 있고 그에 맞추어 정렬이 이루어진 것을 확인할 수 있다.



화면의 너비(textwidth)tw 옵션에 값을 할당하여 변경할 수 있다.



vim 정렬의 재미있는 점은 화면에서 문자열 정렬이 적용될 행의 너비(칸수)를 직접 결정할 수 있다는 점이다. , 기존에 설정된 화면의 너비(tw)를 무시하고, 한 행의 길이를 첫 칸부터 원하는 칸수 만큼 설정하고 그 칸에서 가운데, 오른쪽으로 정렬할 수 있다

 

:center 50 전체 50 중 가운데 정렬

:right 100 전체 100 중 오른쪽 정렬(tw 값으로 정의된 화면의 너비가 78칸이지만 이를 무시하고 100칸까지 이동함)




Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



vim 설정 파일


우리는 앞에서 탭 사이즈를 결정하고 각종 옵션을 실행하는 방법을 배웠다. 하지만 이 모든 설정은 사실 1회용이다vim을 다시 실행할 때마다 이 모든 설정은 초기화되므로 우리는 번거롭게 그것을 매순간 다시 설정해주어야만 한다. 매번 설정을 다시 하는 것은 너무 번거로우므로 vim을 열 때마다 원하는 옵션이 계속 적용되도록 할 필요가 있다. 어떻게 해야 할까?

 

이를 위해서는 vim의 설정 파일을 이용해야 한다.

 

vim의 설정 파일은 .vimrc 파일이다. 이런 파일이 없으면 홈 디렉터리에 .vimrc 파일을 만들어 두면 vim이 실행될 때 자연스럽게 해당 파일을 읽어서 설정된 내용을 적용할 것이다.

 

앞서 우리가 설정했던 옵션을 실행 시마다 적용하게 하려면 이 .vimrc 파일에 다음처럼 작성하면 된다.


set ts=8

set sw=4

set sts=4

set autoindent

set cindent

※ 명령 라인의 명령을 앞에 콜론(:)만 빼고 그대로 작성하면 된다.


vim은 실행될 때 한번만 설정 파일을 보고 적용하기 때문에 .vimrc 파일을 수정한 경우 vim을 종료하고 다시 실행해야만 해당 내용이 적용된다.


.vimrc 파일은 단순히 vim의 옵션만 저장하는 것이 아니다. 사용자가 지정한 단축키, 매크로, 스크립트 등 vim의 강력한 기능들을 매번 새롭게 만들지 않고 지속적으로 사용하려면 이 .vimrc 파일에 필요한 내용들을 기록할 줄 알아야 한다.


아래에는 .vimrc 파일 견본이다. 다양한 설정들이 기록되어 있는 것을 확인할 수 있다. (큰따옴표(")주석 표시이다.)




Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


024 vim 설정 파일.apkg


번호 옵션 설정


다음처럼 명령 라인에서 옵션을 설정하면 vim 화면에 행 번호를 표시할 수 있다.


:set number

:set nu

※ nunumber를 축약한 표현이다


행 번호 표시를 없애려면 다음처럼 명령 라인에서 옵션을 설정하면 된다


:set nonumber

:set nonu


행 번호를 설정한 화면과 그렇지 않은 화면은 다음과 같다.



들여쓰기 옵션 설정


코딩을 할 때 가독성이 좋게 하려고 들여쓰기를 하는 경우가 많다. 이런 들여쓰기를 쉽게 하기 위해서 vim은 들여쓰기를 옵션으로 설정할 수 있다. 여기에서는 자동 들여쓰기(autoindent)C 스타일 들여쓰기(cindent)를 소개한다


자동으로 들여쓰기새로운 행을 만들 때 이전 행과 동일하게 들여쓰기를 한다.


C 스타일 들여쓰기자동으로 들여쓰기와 유사하지만 왼쪽 중괄호({) 다음 행과 세미콜론(;)이 닫히지 않은 경우 다음 행에는 탭을 추가하고, 오른쪽 중괄호(})가 입력되면 탭을 제거한다.


명령어는 다음과 같다.


:set autoindent 자동 들여쓰기 활성화(on)

:set ai 자동 들여쓰기 활성화(on)

:set noautoindent 자동 들여쓰기 비활성화(off)

:set noai 자동 들여쓰기 비활성화(off)

:set cindent C 스타일 들여쓰기 활성화(on)

:set nocindent C 스타일 들여쓰기 비활성화(off)


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



'Anki로 공부하기 > vi 또는 vim 익히기' 카테고리의 다른 글

025 vim 문자열 정렬  (0) 2018.06.03
024 vim 설정 파일  (0) 2018.05.31
022 탭(tab) 사이즈 조절  (0) 2018.05.29
021 vim 옵션 설정 방법  (0) 2018.05.28
020 vim의 옵션 개요  (0) 2018.05.27

탭(tab) 사이즈


프로그램을 작성할 경우에는 코드의 가독성(readibility)을 위해서 들여쓰기(indent)를 하는 경우가 많다이 때 들여쓰기를 하는 기본 단위는 (tab)의 사이즈. 또한, 자동 들여쓰기(autoindent)를 쓸 때도 이러한 탭 사이즈에 따라서 실제 적용되는 양상이 달라지게 된다. 또한, 프로그래밍 언어마다 다른 탭 사이즈를 적용하는 것이 바람직한 경우도 있다. 여튼, 탭 사이즈 조절이 필요하다.


앞에서 :set 명령으로 옵션을 설정하는 것을 배웠다. 이제 배운 것을 응용하여 탭 사이즈를 조절해보자.

  

탭 사이즈와 관련된 vim의 옵션에는 ts(tabstop), sw(shiftwidth), sts(softtabstop) 등이 있다.


tabstop(ts)


vim의 옵션 ts에 설정된 값은 문서에서 탭을 의미하는 문자 '\t'를 몇 칸의 공백으로 나타낼지를 결정하는 값이다. ts 옵션을 4로 변경하려면 다음처럼 명령 라인에 명령어를 입력하면 된다. 


:set ts=4 → 문자 탭(\t) 4칸의 공백으로 표시되도록 설정

※ 보통 리눅스 커널 소스에서는 문제가 일어날 수 있으므로 ts의 값을 8에서 바꾸지 말기를 권한다. 


shiftwidth(sw)


vim의 옵션 sw는 문서 편집을 위하여 들여쓰기(indent)를 할 때 적용되는 탭의 사이즈를 의미한다. 즉, 자동 들여쓰기(autoindent)를 할 때, 또는 >> 키를 눌러 탭을 삽입하거나 << 키를 눌러 탭을 제거할 때 적용되는 탭 사이즈이다.


:set sw=4  들여쓰기는 4칸 단위로 이루어지도록 설정


softtabstop(sts)


vim의 옵션 sts가 우리가 흔히 아는 탭 사이즈다. 즉, 키보드에서 [Tab]키를 눌렀을 때, 적용되는 탭 사이즈다. 


:set sts=4  탭키를 누르면 4칸 뒤로 이동하도록 설정


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 





:set 으로 옵션 설정


앞서 포스팅한 옵션 개요에서 :set all 명령어로 살펴본 옵션은 너무 많았다

명령 라인에 :set all 명령이 아닌 :set 을 실행해보면 현재 설정된 주요 옵션들만 간략하게 볼 수 있다.


:set


:set 명령으로 나타난 옵션들은 다음 사진과 같이 한 화면 내에 간략하게 나타난다.


 


:set 명령으로 옵션을 조작할 수 있다.

 

우선 on/off만 있는 옵션의 경우 다음과 같이 조작한다.


:set 옵션이름 해당 옵션을 활성화(on)

:set no옵션이름 해당 옵션을 비활성화(off)

:set 옵션이름! 해당 옵션의 on, off 상태를 서로 전환(toggle)


특정 값을 갖는 옵션은 다음과 같이 :set을 사용하여 조작한다.

 

:set 옵션이름=특정값 해당 옵션에 특정 값을 할당

:set 옵션이름 당 옵션이 갖고 있는 값을 표시


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



전체 옵션 열어보기


모든 소프트웨어들처럼 vim도 사용자 입맛에 맞게 튜닝이 가능하도록 다양한 옵션을 갖고 있다. 당연한 이야기지만 이 모든 옵션들을 다 숙지할 필요는 없다. 필요한 옵션을 찾아서 그때그때 적용하는 것으로도 vim을 잘 쓰는데 충분하다.

 

그럼에도 vim 옵션에 대해서 언급하지 않으면 vim이 다른 에디터처럼 다양한 메뉴를 제공해주는 것도 아니어서 초심자들은 옵션이 있는지도 모르고 지나갈 수도 있다(실은 제가 그랬습니다). 그러니 몇 가지를 우선 짚어보자.

 

우선vim에서 옵션이란 것이 어떤 것이 있는지 확인하는 것이 먼저일 것이다.

 

vim의 모든 옵션을 보고 싶으면 명령 라인으로 들어가서 다음의 명령어를 입력하면 된다. 


:set all


명령어를 입력하면 다음의 사진과 같이 모든 옵션들이 표시된다. 



vim 옵션의 종류


위의 사진에서 정말 많은 옵션들을 확인할 수 있다. 옵션을 한 페이지에 모두 보여줄 수 없어 화면 하단에는 -- -- 라는 표시가 나타나 있다. 이 상태에서 [Enter] 를 치면 한 줄씩 화면이 내려가고, [Space] 를 누르면 한 화면씩 내려간다. 화살표의 , j, k 모두 한 줄씩 화면을 옮기면서 원하는 옵션을 찾을 수 있도록 되어 있다. q 키를 누르면 바로 원래 화면으로 돌아간다.

 

보이는 옵션들 중에서 몇 가지 특징이 보이는데, 우선 옵션들이 열을 지어 나열되어 있다. 이 중 글자가 열을 맞추지 않고 튀어나온 옵션들이 보이는데 이는 모두 'no'라는 글자가 앞에 붙은 경우임을 알 수 있다. no'라는 글자를 제외하고 보면 옵션들이 알파벳순으로 나열되어 있음을 확인할 수 있다. 등호(=)가 붙어있는 옵션이 있고, 등호(=)가 있는 옵션들 중에서 등호에 어떤 값이 연결되어 있는 경우와 그렇지 않은 경우로 나누어진다.

 

이는 다음과 같은 것이다.


vim에서 옵션은 그저 키고 끄는 것만 있는 즉, on/off만 있는 옵션특정 값을 갖는 옵션두 종류로 크게 나눠볼 수 있다.

 

on/off만 가능한 옵션들은 off가 되었을 경우에는 앞에 'no'를 붙인다. 

 

, 등호(=)가 붙어 있는 옵션들은 어떤 값을 갖는 옵션들이다. 물론, 이 등호(=) 뒤에 값이 설정되어 있지 않은 옵션들은 활성화되지 않은 옵션이다.


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


020 vim의 옵션 개요.apkg


블록 지정 후 커서 이동


앞서 포스팅에서는 블록 지정이 가능한 모드로 진입하면서 화살표 키h, j, k, l 키를 사용하는 것만 이야기했지만 vim명령 모드에서 사용하는 이동 관련 키들이 대부분 먹는다. 그래서 명령 모드에서 이동하듯이 단어 단위 행단위 또는 문장 단위 등으로 그냥 이동하면 된다.


, :[n] 명령을 쓰게 되면 원하는 행으로 바로 이동하지만 블록 지정이 풀리게 되므로 쓰지 않는 것이 좋다. 


블록 지정 후 사용 명령어


작업하고자 하는 부분을 블록으로 지정한 후 다음과 같은 작업을 수행한다. 


y → 블록 지정된 영역 복사

d → 블록 지정된 영역 삭제

> 라인() 앞에 탭 삽입

< 라인() 앞에 탭 삭제


~ 대소문자 상호 전환(대문자는 소문자로, 소문자는 대문자로 전환)

대문자 U 모두 대문자로 만듦

소문자 u 모두 소문자로 만듦(블록으로 지정되어 있는 영역에서 명령 취소가 아님)


콜론(:) 블록으로 지정된 영역에 한해 명령 라인 명령 (블록 지정된 상태에서 콜론(:)키를 누르면 명령 라인에 :'<,'>와 같은 형태가 자동으로 나타난다. '<,'> 표시는 블록으로 지정된 범위를 의미한다. 따라서 이 상태에서 명령 라인의 명령어를 다음처럼 작성하면 블록으로 지정된 범위에만 명령 라인 명령을 실행할 수 있다.

:'<,'>w test.txt 블록으로 지정된 부분만 test.txt 파일로 저장


 

Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 



블록 지정


한글이나 워드 등을 써본 사람이라면 [Shift]를 누른 채 화살표 키를 눌러서 원하는 영역을 지정해서 복사, 삭제, 잘라내기 등을 해본 경험이 있을 것이다. 이때 우리가 지정한 영역이 반전되어 아래와 같이 나타나는데 이를 블록이라고 한다.


블록으로 지정된 부분  ← 블록으로 지정된 모습


이렇게 블록으로 지정하는 것이 얼마나 편한지는 이야기하지 않아도 잘 알 것이다.

 

vim은 다양한 상황에서 쉽게 블록 지정이 가능하도록 3가지 모드를 제공하고 있어서 이 사용법에 익숙해지면 마우스를 쓰지 않고도 편하게 다양한 상황에서 블록을 지정하여 편집할 수 있게 된다. 

 

vim에서 블록을 지정할 수 있게 해주는 3가지 모드는 비주얼 모드, 비주얼 라인 모드, 비주얼 블록 모드라고 부른다.



비주얼 모드(VISUAL MODE)


우리가 흔히 아는 블록 지정 방식이다. 원래 커서 위치에서 옮겨진 커서 위치까지 순차적으로 글자 단위로 블록이 지정된다


비주얼 모드로 진입하려면 명령 모드에서 소문자 v 키를 누르면 된다


명령 모드에서 소문자 v 키 → 비주얼 모드로 진입


이 때편집창 하단에 비주얼(또는 VISUAL) 이라는 표시가 뜨고 이 상태에서 화살표 키나 h, j, k, l 키들을 눌러 커서를 움직이면 원래 커서 위치에서 옮겨진 커서 위치까지 글자 단위로 아래의 그림처럼 블록이 지정된다



비주얼 라인 모드(VISUAL LINE MODE)


비주얼 라인 모드는 그야말로 라인(행) 단위로 지정되는 모드다. , 블록은 무조건 하나의 라인(행) 단위로 생기는 것이다


비주얼 라인 모드로 진입하려면 명령 모드에서 대문자 V 키를 누르면 된다


명령 모드에서 대문자 V 키 → 비주얼 라인 모드로 진입


이 때, 편집창 하단에 비주얼 라인(또는 VISUAL LINE)이라고 표시가 뜨고 이 상태에서 화살표 키h, j, k, l 키들을 눌러 커서를 움직이면 원래 커서 위치에서 옮겨진 커서 위치까지 라인() 단위로 아래의 그림처럼 블록이 지정된다



비주얼 블록 모드(VISUAL BLOCK MODE)


비주얼 블록 모드는 현재 커서 위치에서 옮겨진 커서 위치까지 사각형의 블록을 지정할 수 있게 해준다. 그래서 열 모드(column mode)라고도 불리우는데 이는 일반적인 에디터와 다르게 열단위로도 블록 지정이 가능하기 때문이다. 이를 이용하면 엑셀에서 스프레드 시트를 셀 단위로 지정하여 조작하는 것과 비슷한 효과를 얻을 수 있다. 


비주얼 블록 모드로 진입하려면 명령 모드에서 대문자 <Ctrl+v> 키를 누르면 된다.


명령 모드에서 <Ctrl+v> 키 → 비주얼 블록 모드로 진입


이 때, 편집창 하단에 비주얼 블록(또는 VISUAL BLOCK)이라고 표시가 뜨고 이 상태에서 화살표 키h, j, k, l 키들을 눌러 커서를 움직이면 원래 커서 위치에서 옮겨진 커서 위치까지 사각형의 박스를 그리며 아래의 그림처럼 블록이 지정된다.

 

Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


018 블록 지정의 비주얼 모드.apkg


잘라내기(cut)


앞서 포스팅한 레지스터에 대한 내용을 이해했으면 vim에서는 잘라내기(cut)라는 것이 별도로 없다는 것을 눈치챌 수 있을 것이다. 이는 삭제한 데이터가 없어지지 않고 레지스터에 바로 들어가기 때문이다. 따라서 그냥 삭제하고 필요한 곳에서 pP키로 붙여넣으면 된다


, vim에서는 삭제가 곧 잘라내기(cut)이므로 별도의 잘라내기(cut) 키가 필요없다.



명령취소(Undo) 및 재실행(Redo)


문서를 편집할 때 실행을 취소하는 undo(보통 Ctrl+z)와 실행 취소한 것을 다시 재실행하는 redo 기능을 잘 쓰면 실수한 것을 되돌릴 수 있어 정말 편하다vim에도 동일한 기능이 있다. 바로 명령 모드에서 u<Ctrl+r> 이다


u 명령 취소(Undo)로 바로 이전에 행한 명령 취소

<Ctrl+r> 재실행(Redo)으로 이전에 명령 취소(u)한 것취소

※ vim에서 명령취소(u키)의 파워는 매우 강력해서 거의 대부분의 작업을 역순으로 감아올릴 수 있다



이전 작업 반복하기


마침표(.)를 쓰면 이전에 한 작업을 그대로 반복할 수 있다.


즉, 바로 앞에 명령 모드에서 명령어로 작업을 했다면 해당 명령어를 통한 작업을 반복하고,


바로 앞에 편집 모드에서 들어가서 문서를 작성한 후 [Esc] 키를 눌러 명령 모드로 돌아왔다면 마침표(.)를 누르면 편집 모드에서 [Esc] 키를 눌러 명령 모드로 돌아오기 전까지 입력한 내용들p와 동일한 방식으로 붙여넣기 된다. 이는 ". 레지스터에 있는 내용들을 p로 붙여넣기 하는 ".p 와 동일한 결과를 보여준다

 

명령 모드에서 dd.  → 커서가 위치한 행을 지우고 밑에 있는 행을 끌어올린 후 다시 동일한 작업 반복

명령 모드에서 x.   → 커서가 위치한 한글자를 지우고 다시 동일한 작업 반복

명령 모드에서 iloveu[Esc]jj. → 편집 모드로 들어가(i키) "loveu"라는 문자열을 타이핑한 후 다시 명령 모드로 돌아와([Esc]키) 현재 위치에서 2행 아래로 내려가서(jj키) "loveu" 라는 문자열을 p로 붙여넣기(.키)


Anki 파일


아래는 본 포스팅의 내용을 갈무리하기 위한 Anki 파일입니다. 참고하시기 바랍니다. 


017 잘라내기, 명령취소(undo), 재실행(redo), 이전 작업 반복하기.apkg

+ Recent posts