버퍼 목록으로 열린 파일 추적하기
References
- 《Practical Vim》
/ 《(손이 먼저 반응하는) Practical Vim》
Author: Drew Neil, 2017
파일 열기
아래와 같이 와일드카드와 혼용해서 여러 파일들을 열 수 있다.
cd code/files
touch c.text
vim *.txt c.text
버퍼 목록 확인하기
:ls 명령으로 현재 메모리에 존재하는 모든 버퍼 목록을 확인할 수 있다.
`:ls`
1 %a "a.txt" line 1
2 "b.txt" line 0
3 "c.text" line 0
버퍼 이동하기
:bnext 명령으로 다음 버퍼를 현재 창으로 불러올 수 있다.
:bprev 명령으로 이전 버퍼를 현재 창으로 불러올 수 있다.
이떄, 다시 :ls 명령을 사용하면, #, % 기호가 생기는데, % 기호는 현재 창에서 볼 수 있는 버퍼를 표시하고, # 는 현재 활성화된 버퍼와 교대했던 버퍼를 가리킨다.
`:bnext`
`:ls`
1 # "a.txt" line 1
2 %a "b.txt" line 1
3 "c.text" line 0
`:bnext`
:ls
1 "a.txt" line 1
2 # "b.txt" line 1
3 %a "c.text" line 1
<C-^> 단축키를 이용하면 현재 버퍼와 이전 버퍼를 빠르게 전환할 수 있다.
버퍼 목록 사용하기
아래와 같이 단축키로 지정해 두는 것도 좋은 방법이다.
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> ]b :bnext<CR>
nnoremap <silent> [B :bfirst<CR>
nnoremap <silent> ]B :blast<CR>
팀 포프의 unimpaired.vim 플러그인 참고하자.
Vim에서는 이미 [와 ]를 접두어로 사용하는 명령이 정의되어 있는데, 이를 확인하고 싶다면 :h [를 참고하자.
각 버퍼 항목의 숫자는 버퍼를 생성하면서 자동으로 배정된다. :buffer {버퍼번호} 명령을 사용하면 그 숫자에 해당하는 버퍼로 바로 이동한다.
또는 :buffer {버퍼명} 명령을 통해서도 바로 이동할 수 있다. 입력하는 버퍼명 은 탭 완성을 사용해서 하나를 선택할 수 있다.
:bufdo 명령을 사용하면 :ls 버퍼 목록에 있는 모든 버퍼를 대상으로 Ex 명령을 구동할 수 있으나, 실제로는 :argdo 명령을 더 자주 사용한다. (인자 목록으로 버퍼 묶음 관리하기)
버퍼 제거하기
버퍼를 제거해도 버퍼와 연관된 실제 파일에는 영향을 미치지 않는다. 버퍼는 메모리 내에 있기 때문에, 버퍼를 지워도 실제 파일이 변경되지 않는다.
버퍼를 제거하려면 아래 두 가지 형식을 사용할 수 있다.
:bdelete N1 N2 N3
:N,M bdelete
만약 5번 버퍼부터 10번 버퍼까지 연속된 버퍼를 제거하고 싶다면, :5,10bd 명령을 사용하면 된다.
그중 8번 버퍼는 유지하고 싶다면, :bd 5 6 7 9 10 명령으로 입력한다.
버퍼 번호는 Vim이 자동으로 배정하기 때문에, 일부러 버퍼를 제거하고 싶다면 버퍼 목록(:ls)를 확인해야 한다. 즉, 버퍼를 제거하는 일은 괜한 시간만 잡아먹는 일이므로 반드시 해야할 타당한 이유가 없다면 굳이 지우는 수고는 하지 말자.
조언
버퍼 목록을 관리하는 Vim의 내장 기능은 유연성이 부족한 편이다. 작업 흐름에 맞게 버퍼 목록을 정렬하고 싶어도 다시 조정할 수 있는 기능은 따로 없다. 대신, 작업 환경을 창이나, 탭, 인자 목록으로 나눠서 관리하는 것이 더 편할 것이다.