인자 목록으로 버퍼 묶음 관리하기
References
- 《Practical Vim》
/ 《(손이 먼저 반응하는) Practical Vim》
Author: Drew Neil, 2017
인자 목록은 일련의 파일을 쉽게 이동하고 관리하기 위해 그룹으로 묶는 기능을 제공한다.
인자 목록 확인하기
cd code/files/letters
vim *txt
:args 명령을 사용하면 인자 목록을 확인할 수 있다.
:args
[a.txt] b.txt c.txt d.txt e.txt
출력된 인자 목록에서 볼수 있는 []는 현재 인자 목록 중 어느 파일이 열려 있는지 표시한다.
이는 :ls 명령의 결과와 유사하지만, :args는 보퍼 목록의 부족한 점을 보완하였다.
그러니 Vim을 다룰때 주의할 점은 항상 기능과 명령을 그대로 받아들이지 말라는 것이다. 어떤 기능은 다른 기능과 비슷하지만 좀더 향상되었다.
인자 목록 출력하기
위에서 본 것처럼 :args 명령만 실행하면 인자 목록이 출력된다.
또한 :args {인자목록} 명령을 통해 인자 목록을 갱신할 수 있다. 이때, 인자목록은 파일명, 와일드카드, 셸 명령의 출력을 포함한다.
cd files/mvc
vim
이름으로 파일 지정하기
:args index.html app.js
:args
[index.html] app.js
글롭(Glob)으로 파일 지정하기
글롭(Glob)이란 요청한 경로와 일치하는 파일 목록을 불러오기 위해 와일드카드 조합을 사용하는 방법을 뜻한다.
:args *.*
:args
[index.html] app.js
:args **/*.js
:args
[app/controllers/Mailer.js] app/controllers/Navigation.js app/views/Home.js app/views/Settings.js lib/framework.js
app/controllers/Main.js app/models/User.js app/views/Main.js app.js
:args **/*.*
:args
[app/controllers/Mailer.js] app/controllers/Navigation.js app/views/Home.js app/views/Settings.js index.html lib/theme.css
app/controllers/Main.js app/models/User.js app/views/Main.js app.js lib/framework.js
{인자목록}에는 하나 이상의 파일 명을 사용할 수 있기 때문에 여러 개의 글롭도 동시에 요청할 수 있다.
:args **/*.js **/*.css
역따옴표 확장으로 파일 지정하기
책을 작성하던 중 각 장의 인자 목록을 목차와 동일한 순서로 출력하기 위해, 아래와 같은 파일 목록을 일만 문서 파일로 관리한다고 하자.
# START:head
the_vim_way.pml
normal_mode.pml
insert_mode.pml
visual_mode.pml
...
그럼 이 파일에 작성된 목록 순서대로 인자 목록으로 불러오고 싶다면 다음 명령을 사용할 수 있다.
:args `cat .chapters`
:args
[# START:head] insert_mode.pml ex_mode.pml motions.pml macros.pml substitution.pml quickfix.pml spell_check.pml
the_vim_way.pml visual_mode.pml managing_files.pml jumps.pml patterns.pml global_commands.pml grep.pml
normal_mode.pml # END:head files.pml copy_and_paste.pml search.pml ctags.pml auto_complete.pml
Vim은 역따옴표(`) 내에 있는 문자를 셸 명령으로 처리하고, 그 결과를 :args 명령의 인자로 사용한다.
인자 목록 사용하기
인자 목록을 사용하면 파일을 필요에 따라 마음대로 묶어서 관리할 수 있다. :args {인자목록} 명령을 이용하면 인자 목록을 비우고 다시 입력할 수 있다.
:next, :prev 명령으로 인자 목록에 다음 또는 이전 파일을 버퍼로 불러낼 수 있다. :bnext, :bprev 명령은 현재 열린 버퍼 목록에서 이동하는 것이므로 의미가 다르다.
또한 :argdo 명령으로 인자 목록의 각각 버퍼에 동일한 명령을 실행할 수 있다. (배치를 사용해서 여러 Ex 명령 구동하기)
버퍼 목록은 언제나 난장판이 되지만, 인자 목록은 분리된 작업 공간처럼 각 환경을 단정하게 유지할 수 있다. 필요에 따라 작업 공간을 확장하는 것도 가능하다. (파일 묶음을 대상으로 작업 처리하기)