다중 분할 화면에서 창들간의 위치 전환하기


이제 화면을 다중으로 분할하고 분할된 화면에서 들 사이를 이동하고 을 열고 닫고 파일을 열고 닫을 수 있게 되었다.

 

그런데 때로는 화면 배치가 원하는 대로 이루어지지 않아 화면의 배치를 바꿔보고 싶을 수 있다.


이런 경우 사용할 수 있는 몇가지 방법을 확인해보자. 



다중 분할된 화면에서 창들간의 위치를 순차적으로 전환하기 


다중 분할된 화면에서 들을 순차적으로 전환하는 키는 다음과 같다.


명령모드에서 <Ctrl-w>+r 순차적으로 들간의 위치 전환


키를 배웠으니 제대로 작동하는지 한 번 실험해 보자. 


아래는 위에서부터 차례대로 test3.txt 파일이 표시된 3행의 수평창, test2.txt 파일이 표시된 4행의 수평창, test1.txt 파일이 표시된 13행의 수평창이 순서대로 표시되어 있는 화면에서 <Ctrl-w>+r 키를 눌러서 화면을 순차적으로 전환하고 있는 모습니다.



<Ctrl-w>+r 키로 화면의 배치를 전환하면 test3.txt 수평창이 가운데로 오고, 이 상태에서 다시 <Ctrl-w>+r 키를 누르면 test3.txt 수평창 가장 밑바닥으로 전환되는 것을 확인할 수 있다. 동일한 방식으로 test1.txt test2.txt 파일이 표시된 수평창도 전환되고 있다.


수평으로 분할된 화면에서 잘 작동하는 것을 확인했으니 이번에는 수직으로 분할된 화면에서 잘 작동하는지 확인해보자.


아래는 왼쪽의 화면에서부터 차례대로 test3.txt 파일이 표시된 20열의 수직창, test2.txt 파일이 표시된 30열의 수직창, test1.txt 파일이 표시된 50열의 수직창이 순서대로 표시되어 있는 화면에서 <Ctrl-w>+r 키를 눌러서 화면을 순차적으로 전환하고 있는 모습니다.





<Ctrl-w>+r 키로 화면을 순차적으로 전환하면 test3.txt 수직창이 가운데로 오고, 이 상태에서 다시 <<Ctrl-w>+r 키를 누르면 test3.txt 수직창이 가장 오른쪽으로 전환된다. 동일한 방식으로 test1.txttest2.txt 수직창도 같이 전환되고 있다.


<Ctrl-w>+r 키로 화면의 배치를 전환하면 수평분할된 들 사이의 배치가 바뀌고, 수직분할된 들 사이의 배치가 바뀐다. 그렇다면 화면을 수직과 수평으로 한번씩 분할해서 4등분한 화면에서 <Ctrl-w>+r 키로 화면의 배치를 바꾸면 어떻게 될까?




test2.txt 에 커서가 있고 이 상태에서 <Ctrl-w>+r 키를 누르면 test2.txt  test1.txt 이 상호 전환된다. <Ctrl-w>+r 키를 누르면 이번에도 test2.txt test1.txt 이 상호 전환된다. , test1.txt test2.txt만 상호 위치가 바뀌는 것을 확인할 수 있다. 이는 커서를 test1.txt에 두든 test2.txt 에 두든 상관없이 항상 이 두 파일이 표시된 만 서로 바뀐다


그렇다면 커서를 화면 하단의 2개의 화면인 test3.txt test.txt 에 두면 어떻게 될까?  이번에는 test3.txt test.txt  상호간에만 화면 전환이 일어난다.

 

결국<Ctrl-w>+r 키는 을 순차적으로 전환한다고 설명되어 있지만 수직분할된 수직창들 사이에서만 혹은, 수평 분할된 수평창들 사이에서만 전환이 순차적으로 이루어진다는 사실을 알 수 있다.



커서가 이전에 있었던 창과 현재 있는 창간 위치 전환하기


그 다음은 커서가 이전에 있었던 과 현재 있는 과 위치를 서로 바꾸는 명령이다.


명령모드에서 <Ctrl-w>+x → 커서가 이전에 있었던 현재 있는 의 위치를 상호 전환


<Ctrl-w>+x 키도 위 의 <Ctrl-w>+r 키와 크게 다르지 않다. , 수평으로만 분할된 화면이나 수직으로 분할된 화면에서만 서로 작동한다


그 외에 한가지 다른 점이 더 있는데 그것은 바로 인접한 창하고만 서로 위치 전환이 일어난다는 것이다. 


가령, 다음의 화면을 보자. 



위의 화면에서 test1.txttest2.txt 만 <Ctrl-w>+x 키로 상호 위치 전환이 가능하다. 마찬가지로 서로 인접해 있는 test2.txt test3.txt<Ctrl-w>+x 키로 서로 위치전환이 가능하다.

 

즉, <Ctrl-w>+x 키가 바로 직전에 있었던 화면과 현재 있는 화면의 위치를 상호 전환시켜 준다고 하지만 수직분할된 화면의 수직창들 사이에서만 혹은, 수평 분할된 수평창들 사이에서만 그것도 서로 인접한 창들끼리만 상호 위치전환이 이루어지는 것이다.

 


Anki 파일


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



여러 개의 파일을 분할된 화면에서 열기


여러 개의 파일을 열 때 분할된 화면에 열고 싶다면 파일을 열면서 vim을 실행할 때, 다음과 같이 -o 옵션을 추가하면 된다


vim -o test1.txt test2.txt test3.txt


그러면 아래와 같이 균등하게 수평분할된 화면test1.txt, test2.txt, test3.txt 가 열린다.




명령 라인에 :ls, :buffers, :files 명령으로  3개의 파일 버퍼에 3개의 파일이 동시에 열린 것을 확인할 수 있다.


:ls 또는 :buffers 또는 :files

1 %a "test1.txt"

a "test2.txt"

a "test3.txt"


열린 세 개의 파일들이 모두 화면에 표시되어 있으므로 모두 a 표식이 붙어있다. , 현재 커서는 1번 버퍼의 test1.txt 파일에 있으므로 해당 파일에는 퍼센트(%)도 같이 붙어있다.



다중 화면에서 여러 개의 파일 다루기


이제 분할된 화면을 닫아보자


현재 커서가 위치한 창을 닫는 키는 다음과 같다.

명령 모드에서 <Ctrl-w>+q

명령 모드에서 <Ctrl-w>+c

명령 라인에 :quit 또는 :q

명령 라인에 :close 또는 :clo


현재 커서가 위치한 창을 제외한 다른 모든 창을 닫는 키는 다음과 같다

명령 모드에서 <Ctrl-w>+o

명령 라인에 :only 또는 :on


이제 test1.txt 외의 모든 창을 닫아보았다. 이 상태에서 파일 버퍼를 확인한 결과는 다음과 같다.


 


화면을 닫았을 뿐 파일을 닫은 것은 아니므로 파일들이 모두 파일 버퍼에 그대로 남아있다. 다만, 이제 화면에 표시된 파일과 현재 커서가 위치한 파일이 전부 test1.txt 뿐이므로 파일 버퍼 1번에 있는 파일에만 %a가 표시되었다


현재의 상태에서 이번에는 파일 버퍼에 있는 파일들을 분할된 화면에 표시해보자. 


명령 라인에 :sb[#] → 현재 커서가 위치한 창을 수평으로 분할하고 새로운 수평창에 # 버퍼를 표시하고만일 #을 생략할 경우 현재 파일이 그대로 표시(=:sp)됨


파일 버퍼 2에 있는 test2.txt 파일을 수평창에 열기 위해서 명령 라인에 :sb2 명령어를 입력하면 그 결과가 다음과 같다.





파일 버퍼를 하나씩 표시하는 것이 번거로우니 모든 버퍼의 파일을 표시하려면 다음과 같이 한다.


명령 라인에 :al 현재 파일 버퍼에 있는 모든 파일수평으로 분할된 화면에 표시


※ 이제까지와 달리 현재 커서가 위치한 화면을 기준으로 화면 분할이 이루어지지 않고 모든 파일이 수평으로 균등하게 분할된 화면에 표시

 



모든 파일이 수평으로 분할된 화면에 균등하게 표시되어 있는 현재의 상황에서 파일 버퍼를 닫아보자.


명령 라인에 :bd[#] # 버퍼닫는다(#이 없으면 현재의 버퍼닫는다)

 

명령 라인에 :bd1 명령을 입력하면 파일버퍼 1번의 파일인 test1.txt 파일을 표시하는 창이 닫히고 동시에 파일 버퍼도 닫힌 것을 아래와 같이 확인할 수 있다.



 


Anki 파일


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


053 다중 화면과 파일 버퍼.apkg

복합 화면 분할


복합 화면 분할은 화면을 분할하고 분할해서 수직과 수평 분할을 복합적으로 한 것을 말한다. 화면을 복합적으로 분할하는 방법은 매우 간단하다. 커서가 위치한 창에서 앞서 배운 수평분할이나 수직분할을 반복하면 창이 계속 분할된다


아래의 사진은 먼저 test1.txt를 열고 그 상태에서 다시 :vs test2.txt 명령으로 절반으로 수직분할하면서 test2.txt 파일을 오픈한 후 이 상태에서 다시 :sp test3.txt 명령으로 이 창을 절반으로 수평분할하면서 test3.txt 파일을 오픈한 모습이다. 




분할된 화면에서 창 사이 이동하기


<Ctrl-w>를 누르고 화살표키(←↑→↓)를 더하거나 <Ctrl-w>h, j, k, l 을 덧붙이면 커서 위치를 기준으로 그 방향에 있는 창으로 간단하게 이동할 수 있다


명령 모드에서 <Ctrl-w>+h 또는 <Ctrl-w>+


왼쪽 창으로 이동(현재 커서 위치의 왼쪽에 창이 있을 경우)


명령 모드에서 <Ctrl-w>+j 또는 <Ctrl-w>+


아래쪽 창으로 이동(현재 커서 위치의 아래쪽에 창이 있을 경우)


명령 모드에서 <Ctrl-w>+k 또는 <Ctrl-w>+


위쪽 창으로 이동(현재 커서 위치의 위쪽에 창이 있을 경우)


명령 모드에서 <Ctrl-w>+l 또는 <Ctrl-w>+


오른쪽 창으로 이동(현재 커서 위치의 오른쪽에 창이 있을 경우)



<Ctrl-w>를 누르고 화살표키(←↑→↓)를 더하거나 <Ctrl-w>에 h, j, k, l 를 붙여 화면간 이동은 아래 그림을 참조하라.




test1.txt 에서는 아래와 오른쪽 창이 없으므로 당연히 아래 창으로 이동(<Ctrl-w>+j 또는 <Ctrl-w>+)이나 오른쪽 창으로 이동(<Ctrl-w>+l 또는 <Ctrl-w>+)되지 않는다.

 

또한, test1.txt 에서 왼쪽 창으로 이동(<Ctrl-w>+h 또는 <Ctrl-w>+) 할 때 커서의 위치왼쪽의 수평 분할선을 기준으로 상단에 있으면 test3.txt로 이동하고 하단에 있으면 test2.txt로 이동하게 된다.


 

그 외에 다른 화면 이동은 다음과 같다


명령 모드에서 <Ctrl-w>+w


왼쪽 최상단에서 오른쪽 최하단까지 순차적으로 이동


명령 모드에서 <Ctrl-w>+p


바로 이전에 있었던 창으로 이동

두 개의 화면에서 계속 교대로 작업할 경우 <Ctrl-w>+p 키만 반복으로 누르면 편하게 이용할 수 있다


명령 모드에서 <Ctrl-w>+t


왼쪽 최상단 창으로 이동(최상위 창)


명령 모드에서 <Ctrl-w>+b


오른쪽 최하단 창으로 이동(최하위 창)


Anki 파일


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


052 복합 화면 분할 후 이동하기.apkg


유용한 화면분할


앞에서는 단순히 화면을 분할해서 여는 방법만 설명했지만 사실, 화면 분할은 원하는 도움말을 열거나, 원하는 파일을 열거나, 소스코드를 탐색하기 위해서 임시로 화면을 분할해서 파일을 열고 참조했다가 다시 닫는 등의 활동을 간단하게 할 수 있어 매우 유용하다.

 

이번 포스팅에서는 이러한 유용한 화면분할 기능인 화면을 수평 분할하면서 커서가 위치한 단어를 이름으로 하는 파일을 여는 <Ctrl-w>+f 키를 익혀본다.


 <Ctrl-w>+f 키 

 

<Ctrl-w>+f

: 현재 커서가 위치한 창의 상단에 새로운 수평창이 열리고 커서 위치의 단어이름으로 하는 파일정해진 경로(PATH)에서 찾아서 표시


가령, 커서가 test.txt 라는 문자열 위에 있을 때 <Ctrl-w>+f를 누르면 화면 상단에 test.txt 파일이 표시되는 수평창이 나타난다.

 

어떻게 사용하는지 구체적으로 살펴보자.

 

준비된 파일에서 printf 라는 문자열 위에 커서를 두고  <Ctrl-w>+f 키를 눌러보고, test.txt 라는 문자열에 커서를 두고  <Ctrl-w>+f 키를 눌러볼 계획이다.



printf 함수명 위에 커서를 놓고 <Ctrl-w>+f 키를 누른 결과


printf 라는 함수명 위에 커서를 두고  <Ctrl-w>+f 키를 누른 결과 path에서 "printf" 파일을 찾을 수 없다는 내용의 오류 표시가 화면 하단에 나타난다.

 



이를 통해 한 가지를 알 수 있는데 <Ctrl-w>+f 키를 눌러서 커서가 위치한 단어동일한 이름의 파일을 열 때, 어떤 정해진 경로(path)그 단어에 해당하는 파일이 있어야만 해당 파일이 열린다는 것이다.



test.txt 라는 문자열에 커서를 놓고 <Ctrl-w>+f 키를 누른 결과


앞의 사례가 있으므로 경로(PATH)에 해당하는 홈 디렉터리에 있는 test.txt 파일을 이용하여 실습한다. 
 

그리고 test.txt 라는 문자열 위에 커서를 놓고 <Ctrl-w>+f 키를 누른 결과 다음과 같이 수평 분할이 이루어지면서 위의 창에 test.txt 파일이 열리는 것을 확인할 수 있다.




Anki 파일


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


051 화면을 수평 분할하면서 커서가 위치한 단어를 이름으로 하는 파일을 열기(4개 카드).apkg


화면 분할하여 빈 파일 표시


앞서 포스팅한 화면의 수평분할수직분할은 기본적으로 현재 커서가 위치한 창에 표시된 파일을 그대로 화면에 표시했다


물론, 명령 라인에서 :sp [파일명] 또는, :vs [파일명] 형식으로 명령어를 입력하여 새롭게 분할되어 열리는 창에 표시할 파일을 선택할 수도 있지만 그런 복잡한 명령 없이 그냥 화면을 분할해서 이름 없는 빈 파일을 여는 명령어를 알아두면 간단하게 작업하기 수월할 것이다


명령 모드 [#]<Ctrl-w>+n

명령 라인 :[#]new

현재 커서가 위치한 창이, #이 있으면 위의 #(row)을 가진 수평창과 그 나머지로 분할되고 #을 생략하면 절반으로 수평분할되면서 새로운 창에는 이름 없는 빈 파일이 표시된다.


명령 라인 :[#]vnew

현재 커서가 위치한 창이, #이 있으면 왼쪽의 #(column)을 가진 수직창과 그 나머지로 분할되고 #을 생략하면 절반으로 수직분할되면서 새로운 창에는 이름 없는 빈 파일이 표시된다.




다음은 vim의 화면 분할 후 새롭게 열리는 창에 빈 파일을 표시하는 몇가지 사례들이다. 


명령 라인 :vnew

현재 커서가 위치한 창이 절반으로 수직분할되면서 새로운 창에는 이름 없는 빈 파일이 표시

 

명령 라인 :25vnew

현재 커서가 위치한 창이 왼쪽의 25(column)을 가진 수직창과 그 나머지로 분할되면서 새로운 창에는 이름 없는 빈 파일이 표시

 

명령 라인 :30vnew

현재 커서가 위치한 창이 왼쪽의 30(column)을 가진 수직창과 그 나머지로 분할되면서 새로운 창에는 이름 없는 빈 파일이 표시

 

명령 라인 :15new

현재 커서가 위치한 창이 위의 15(row)을 가진 수평창과 그 나머지로 분할되면서 새로운 창에는 이름 없는 빈 파일이 표시

 

명령 라인 :new

현재 커서가 위치한 창이 절반으로 수평분할되면서 새로운 창에는 이름 없는 빈 파일이 표시


명령 모드 20<Ctrl-w>+n 

현재 커서가 위치한 창이 위의 20(row)을 가진 수평창과 그 나머지로 분할되면서 새로운 창에는 이름 없는 빈 파일이 표시

 

명령 모드 <Ctrl-w>+n

현재 커서가 위치한 창이 절반으로 수평분할되면서 새로운 창에는 이름 없는 빈 파일이 표시


Anki 파일


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


050 vim 화면 분할하여 빈 파일 표시.apkg


수직분할

 

앞에서 수평으로 분할했다면 이번에는 수직분할이다

 

명령 모드에서 <Ctrl-w>+v 또는 명령 라인에 :vs

현재 커서가 위치한 창이 절반으로 수직 분할되고 각각의 창에 현재 파일 표시

 

 

 

[#]<Ctrl-w>+v 또는 :[#]vs 형식으로 앞에 숫자(#)을 붙이면 위에 열리는 새로운 수직창의 열(column)를 미리 결정할 수 있다

 

또, :vs 명령으로 수직창으로 분할할 경우 [파일명]을 붙이면 새롭게 열리는 수직창에 표시되는 파일을 변경할 수 있다

 

 

다음은 vim 화면을 수직 분할하는 명령어 사례를이다. 

 

 

명령 모드에서 <Ctrl-w>+v

현재 커서가 위치한 창이 절반으로 수직 분할되면서 각각의 창에 현재 파일 표시

 

명령 모드에서 10<Ctrl-w>+v

현재 커서가 위치한 창이 왼쪽의 10수직창과 나머지로 분할되면서 각각의 창에 현재 파일 표시

 

명령 라인:vs 

현재 커서가 위치한 창이 절반으로 수직 분할되면서 각각의 창에 현재 파일 표시

 

명령 라인:5vs

현재 커서가 위치한 창이 왼쪽의 5수직창과 나머지로 분할되면서 각각의 창에 현재 파일 표시

 

명령 라인:5vs test2.txt 

현재 커서가 위치한 창이 왼쪽의 5수직창과 나머지로 분할되면서 새롭게 나타나는 왼쪽의 창에는 test2.txt 파일이 표시

 

Anki 파일

 

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

 

 

 

 
 

049 vim 화면 분할하기 수직 분할.apkg
다운로드

 

화면 분할의 필요성


앞서, 여러 파일을 열고 이 파일들 사이를 이동하는 법을 알았지만 여러 개의 파일을 동시에 보면서 작업하는 것이 훨씬 더 효율적일 것이다. 당연히 vim에서도 여러 개의 파일을 동시에 보면서 작업을 할 수 있다.

 

다음부터 제시되는 키의 표시는 꺽쇠(<>) 안의 키는 동시에 누르고 이를 떼면서 +로 더해진 키이어서 누른다. , <Ctrl-w>+s 키는 [Ctrl]키와 w키는 동시에 누르고 이를 떼면서 s키를 누르면 된다



수평분할


명령 모드에서 <Ctrl-w>+s 또는 명령 라인에 :sp

→ 현재 커서의 창이 절반으로 수평 분할되면서 각각의 창에 현재 파일 표시됨





[#]<Ctrl-w>+s 또는 :[#]sp 형식으로 앞에 숫자(#)을 붙이면 위에 열리는 새로운 수평창의 행수를 미리 결정할 수 있다.

 

또, :sp 명령으로 수평창을 분할할 경우 [파일명]을 붙이면 새롭게 열리는 수평창에 표시되는 파일을 변경할 수 있다.


다음은 수평 분할 명령어의 다양한 사례를이다. 


명령 모드에서 <Ctrl-w>+s

현재 커서의 창이 절반으로 수평 분할되면서 각각의 창에 현재 파일 표시

 

명령 모드에서 10<Ctrl-w>+s

현재 커서의 창이 위쪽의 10의 수평창과 나머지로 분할되면서 각각의 창에 현재 파일 표시

 

명령 라인에 :sp 

현재 커서의 창이 절반으로 수평 분할되면서 각각의 창에 현재 파일 표시

 

명령 라인에 :5sp 

현재 커서의 창이 위쪽의 5의 수평창과 나머지로 분할되면서 각각의 창에 현재 파일 표시

 

명령 라인에 :5sp test2.txt

현재 커서의 창이 위쪽의 5의 수평창과 나머지로 분할되면서 새롭게 나타나는 위의 창에는 test2.txt 파일이 표시

 

Anki 파일


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


048 vim 화면 분할하기 수평분할.apkg

파일 사이에서 이동


바로 앞의 포스팅에서 여러 개의 파일을 동시에 열고 해당 파일이 들어있는 파일 버퍼를 확인하는 방법을 배웠다. 그렇다면 이제 여러 파일들 사이를 오가면서 작업을 하기 위하여 파일들 사이를 오가는 방법을 알아야 한다


우선, 다음과 같이 명령하여 test1.txt, test2.txt, test3.txt 3개 파일을 다시 열어보자


$ vim test1.txt test2.txt test3.txt


명령 실행으로 처음 화면에 표시되는 파일은 첫 번째 파일인 test1.txt 이다. 이제 다음 명령어를 입력하여 파일 버퍼와 파일리스트를 확인해보자. 


:buffers 또는 :ls 또는 :files

1  %a  "test1.txt 2

2      "test2.txt"  0

3      "test3.txt"  0


현재, 화면이 표시되고 있는 첫 번째 파일1번 버퍼이고 현재 화면에서 표시되어 있다는 뜻에서 %a 파일 버퍼 번호 옆에 표시되어 있다.


이제, 간단하게 파일들 사이를 이동하는 방법을 알아보자명령 라인에 다음과 같이 명령어를 입력하면 된다 


:[#]n 다음 파일# 이동함(#이 없을 때는 1)

:[#]N 이전 파일# 이동함(#이 없을 때는 1)


파일을 이동하는 :[#]n :[#]N 명령으로는 가장 작은 파일 버퍼 번호 이전으로는 이동할 수 없고, 가장 큰 파일 버퍼 번호 이후로도 이동할 수 없다.

 

이번에는 명령 라인에 :n을 입력하여 다음 파일로 넘어가 다시 파일 버퍼와 파일 리스트를 다시 확인해보자.

 

:buffers 또는 :ls 또는 :files

1 #  "test1.txt 2

2 %a "test2.txt"  1

3    "test3.txt"  0


첫 번째 파일에서 다음 파일로 넘어온 것이므로 두 번째 파일이 현재 화면에 표시된 파일이고 따라서 2번 옆에 %a 표시가 있다. 그리고 파일 버퍼 번호 1 옆에는 # 표시가 새로 생겨난 것을 알 수 있다. # 표시는 파일 버퍼 번호 1의 파일이 바로 직전에 열렸던 파일이라는 뜻이다.

 

파일 버퍼 번호 2에 위치한 현재 상황에서 다시 이전 파일로 넘어가는 방법은 다음과 같다. 


:e # 이전 파일연다.

명령 모드 <Ctrl-^> 이전 파일을 연다


아무래도 <Ctrl-^> 키를 사용하는 것이 편하다. 특히, 딱 두 개의 파일을 이용하여 작업을 할 경우에는 <Ctrl-^> 키만 누르면 바로바로 파일을 스위치하면서 사용할 수 있어 매우 편하다



파일 버퍼 사이에서 이동


현재 화면에 표시되는 파일 버퍼를 이동하여 원하는 파일로 이동할 수 있다.

 

파일 버퍼를 이동하는 방법은 다음과 같이 명령 라인에 명령어를 입력하는 것이다.

 

:b# 파일 버퍼 번호 #에 해당하는 버퍼로 이동한다.

:bp[#] 이전 버퍼로 이동, #을 붙이면 #번만큼 이전 버퍼로 이동

:bn[#] 이후 버퍼로 이동#을 붙이면 #번만큼 이후 버퍼로 이동

:bf 첫 번째 버퍼로 이동

:bl 마지막 버퍼로 이동


버퍼를 이동하는 :bp[#] :bn[#] 명령은 첫 번째 버퍼와 마지막 버퍼에서 다시 순환하므로 :n이나 :N 명령이 오류가 나는 것과는 달리 명령이 계속 적용된다.



Anki 파일


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



vim에서 여러 개의 파일 열고 파일 버퍼 확인하기


프로그래밍 소스 코드는 보통 여러 개의 파일로 이루어져 있다. 따라서 동시에 여러 개의 파일을 열고 작업해야 하는 경우가 비일비재하다. 따라서 vim에서도 여러 개의 소스 코드 파일을 다룰 수 있는 방법들이 준비되어 있다.

 

우선, vim에서 여러 개의 파일을 여는 방법부터 알아볼 필요가 있다. 하나는 다음과 같이 명령라인에서 순차적으로 파일을 하나씩 여는 것이다


:e test1.txt test1.txt 파일이 열린다.

:e test2.txt test2.txt 파일이 열린다.

:e test3.txt test3.txt 파일이 열린다.

※ 명령 라인에 :e [파일명] 형식으로 파일을 불러올 경우 파일이 있으면 해당 파일을 불러오고 해당 파일이 없으면 새로운 파일이 임시로 만들어진다.


두 번째 방법은 vim을 실행하면서 한꺼번에 여는 것이다


$ vim test1.txt test2.txt test3.txt


여러 개의 파일을 열었지만 현재 화면에 보이는 파일은 하나밖에 없을 것이다이러니 여러 개의 파일을 열었다고는 하지만 전혀 실감이 나지 않는다. 여러 개의 파일이 열렸다는 것을 어떻게 확인할 수 있을까?

 

vim은 열린 파일들을 파일 버퍼에 임시로 저장하여 사용한다. 따라서 다른 파일들이 파일 버퍼에 들어있는지를 확인하면 여러 개의 파일이 열려있는 것이다. 이를 확인하려면 명령 라인에 :buffers 또는 :ls 또는 :files 라고 명령어를 입력하여 파일 버퍼(buffer)를 확인하면 다음과 같이 결과가 출력된다


:buffers 또는 :ls 또는 :files

1 %a + "test.1.txt"  1

2      "test.2.txt"  0

3      "test.3.txt"  0


순서대로 1번 버퍼test1.txt 파일이 있고 2번 버퍼test2.txt3번 버퍼test3.txt 파일이 들어있는 것이 확인된다.


Anki 파일


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



 

특정 패턴을 조건으로 문자열 바꾸기

 

앞서 vim의 문자열 바꾸기는 특정 패턴의 문자열을 원하는 문자열로 바꾸는 방법에 대해서 간단히 알아보았다.

 

 

그런데 문자열을 바꿀 때, 단순히 문자열 패턴을 찾아서 바꾸는 것만으로 부족한 경우가 있다

 

가령 아래와 같이 이름과 거주지 그리고 그 사람의 집 전화번호를 데이터로 기록했는데 이 전화번호에 지역 번호가 빠져 있어 지역별로 지역번호를 부여해야하는 경우다. 

 

이름    거주지    전화번호

철수     서울     888-8888

영희     광주     888-8888

재범     서울     777-7777

선영     부산     888-8888

호동     서울     666-6666

 

우리가 하고 싶은 것은 전화번호 앞에 지역번호를 붙이는 것이다. 그런데 이 지역번호는 살고 있는 거주지에 따라서 달라진다. 가령, 서울의 지역번호는 02이므로 서울에 사는 철수, 재범, 호동은 전화번호 앞에 02- 라는 문자열이 첨가되어야 한다. 이와 같은 경우는 우리가 찾고자 하는 문자열 패턴과 우리가 바꾸고자 하는 문자열 패턴이 다르기 때문에 문제가 된다.

 

이렇게 찾는 문자열 패턴바꿀 문자열 패턴다른 경우 찾는 문자열 패턴을 조건으로 바꿀 문자열바뀐 문자열로 바꾸면 된다. 

 

이는 다음과 같은 형식으로 명령 라인에 명령어를 입력하면 된다

 

:g/[찾을 문자열]/s/[바꿀 문자열]/[바뀐 문자열]/[바꾸기 옵션]

 

이를 해석하면 문서 전체에서 [찾을 문자열]이 있는 행을 모두 찾아서 그 행에 [바꿀 문자열]이 있으면 이를 [바꾸기 옵션]에 따라서 [바뀐 문자열]로 바꾼다로 해석한다. 

 

[바꿀 문자열], [바뀐 문자열], [바꾸기 옵션]앞서 포스팅한 내용대로 하면 적용된다. [찾을 문자열]도 [바꿀 문자열]과 마찬가지이다. 명령의 가장 맨 앞에 g는 항상 입력하도록 하자. g를 생략할 경우도 작동하지만 별로 쓸모가 있는 것 같지는 않다.

 

위의 명령에서 [바꿀 문자열]을 생략하면 [찾을 문자열]이 [바꿀 문자열]의 역할을 한다.

 

:g/[찾을 문자열]/s//[바뀐 문자열]/[바꾸기 옵션]

= :%s/[찾을 문자열]/[바뀐 문자열]/[바꾸기 옵션]

즉, 모두 문서 전체에서 [찾을 문자열]을 찾아 [바꾸기 옵션]에 따라서 [바뀐 문자열]로 바꾸라는 명령이다. 

 

이제까지 설명한 방식에 따라서 위의 서울에 거주하는 사람들의 전화번호 앞에 지역번호를 추가하는 명령어는 다음과 같다.

 

:g/서울/s/\(\d\+-\d\+\)/02-\1/g

문서 전체에서 '서울' 이라는 문자열이 있는 행에서만 숫자의 연속 하이픈(-) 숫자의 연속 형태의 문자열을 그 앞에 '02-' 라는 문자열을 붙인 형태로 다음과 같이 바꾼다

 

이름    거주지    전화번호

철수     서울     02-888-8888

영희     광주     888-8888

재범     서울     02-777-7777

선영     부산     888-8888

호동     서울     02-666-6666

 

만일, 다음과 같이 명령어를 입력한 경우라면 내용이 조금 달라진다.

 

:g/\(\d\+-\d\+\)/s//02-\1/g

이것은 :%s/\(\d\+-\d\+\)/02-\1/g 와 동일하므로 [찾을 문자열]이 숫자의 연속 하이픈(-) 숫자의 연속 형태의 문자열이고 동시에 [바꿀 문자열]이 되므로 다음처럼 모든 전화번호 앞에 '02-' 라는 문자열이 첨가된 형태로 바뀐다.

 

이름    거주지    전화번호

철수    서울    02-888-8888

영희    광주    02-888-8888

재범    서울    02-777-7777

선영    부산    02-888-8888

호동    서울    02-666-6666

 

Anki 파일

 

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

 

 

 

045 vim 특정 패턴을 조건으로 문자열 바꾸기.apkg
다운로드

 

+ Recent posts