Vim에서 모든 파일을 fuzzy-finding 없이 전환하기
It looks like only the source citation was provided. Could you please share the full text (or the portion you’d like translated) from the article? Once I have the content, I’ll translate it into Korean while preserving the formatting, markdown, and code blocks as requested.
Vim/Neovim에서 빠른 탐색
대부분의 경우 퍼지‑파인딩이 필요하지 않습니다. 열고 싶었던 파일은 이미 알고 있거든요. 진짜 문제는 그 파일로 빠르게 돌아가는 방법입니다.
아래는 설정이 거의 필요 없는 내장 기능부터 전체 퍼지 피커까지, 설정 난이도 순으로 정리한 흐름입니다.
1. “ – 방금 있던 파일 토글
추천 상황: 정확히 두 파일 사이를 오갈 때 (예: auth.go ↔ auth_test.go).
- 대체 파일(alternate file) 즉, 마지막으로 열어 둔 버퍼로 전환합니다.
- 파일명을 입력할 필요도, 퍼지 검색도, 메뉴도 없이 한 번의 키 입력만으로 바로 이전 위치로 돌아갑니다.
- 예시:
gd로 테스트 파일에 이동해 구현을 본 뒤, “ 를 눌러 원래 파일로 돌아가면 커서는 그대로 남아 있습니다.
제한점: 하나의 이전 파일만 기억합니다. 세 번째 버퍼를 열면 가장 오래된 기록이 사라집니다. 두 파일을 앞뒤로 오가는 경우엔 최고의 선택이지만, 더 넓은 탐색이 필요하면 다른 방법을 써야 합니다.
2. 전역 마크 – mA, 'A – 자주 찾는 파일 고정
추천 상황: 세션 동안 2‑3개의 파일을 계속 오갈 때 (예: config, main_handler, test).
" 전역 마크 설정 (대문자 = 전역, 파일 간에 유지)
mA
" 어디서든 해당 위치로 점프
'A
- 대문자 마크(
mA…mZ)는 전역 마크이며, 파일 과 라인 번호를 모두 기억합니다. - 어떤 버퍼에 있든
'A를 누르면 정확히 그 라인으로 이동합니다. - 예시: 기능을 작업하면서
routes.go로 자주 가야 할 때, 해당 라인에서mR로 마크를 잡아 두면 나중에'R로 즉시 이동할 수 있습니다.
지속성: 전역 마크는 Vim 세션을 넘어 ~/.viminfo(Vim) 혹은 ~/.local/share/nvim/shada/main.shada(Neovim)에 저장됩니다. 오래된 마크가 쌓일 수 있으니 가끔 정리해 주세요:
:delmarks A-Z
3. / – 이동 기록 되돌아가기
추천 상황: 여러 번 점프한 뒤 역순으로 되돌아갈 때 (예: gd → gd → 검색).
" 점프 리스트에서 뒤로 이동 (이전 위치)
" 점프 리스트에서 앞으로 이동 (다음 위치)
- Vim은 점프 리스트를 유지합니다.
gd,gg,/패턴,'마크등으로 이동한 모든 위치가 기록됩니다. - “ 은 리스트를 뒤로 한 단계씩 이동하며, 파일 경계를 넘어 브라우저의 뒤로 가기 버튼처럼 동작합니다.
- “ 은 다시 앞으로 이동합니다.
팁: :jumps 명령으로 전체 리스트를 확인하고, 현재 어느 위치에 있는지 확인할 수 있습니다.
주의점: 점프 리스트는 위치만 기록하므로, 많이 점프하면 “ 로 중간에 여러 불필요한 위치를 지나야 할 수도 있습니다.
4. 내장 버퍼 명령 – :b, ]b / [b, :ls
추천 상황: 파일 이름의 일부만 알고 있을 때 빠르게 전환하고 싶을 때.
:ls " 열려 있는 모든 버퍼를 번호와 이름으로 표시
:b partial " 파일명 일부로 버퍼 전환
:b 3 " 번호 3번 버퍼로 전환
]b " 다음 버퍼 (vim‑unimpaired 필요하거나 직접 매핑)
[b " 이전 버퍼
:b명령은 탭 완성을 지원하므로:b auth로auth.go로 바로 이동할 수 있습니다.:ls로 현재 열려 있는 버퍼들을 한눈에 확인할 수 있어, 어떤 버퍼가 열려 있는지 모를 때 유용합니다.]b/[b는 작은 버퍼 집합을 순차적으로 순환할 때 편리합니다( vim‑unimpaired 가 없으면 직접 매핑해 사용할 수 있습니다).
주의: :b partial 은 전체 경로를 기준으로 매칭하므로, 경로가 비슷한 두 파일이 있을 경우 모호한 완성이 발생할 수 있습니다. 이럴 땐 먼저 :ls 로 버퍼 번호를 확인하고 번호로 전환하는 것이 좋습니다.
5. MRU 버퍼 피커 – wildmode=lastused + wildcharm
추천 상황: 플러그인 없이 가장 최근에 사용한 버퍼를 빠르게 선택하고 싶을 때.
" vimrc/init.vim에 추가
set wildmenu
set wildmode=lastused
set wildcharm=
" 선택적으로 매핑
nnoremap b :b
wildmode=lastused로 버퍼 자동완성 순서를 가장 최근에 사용한 버퍼가 먼저 나오도록 재정렬합니다.wildcharm=은 매핑 안에서 와일드메뉴 확장을 트리거할 키를 지정합니다(기본 Tab 은 매핑 안에서 동작하지 않음).b를 누르면 와일드메뉴가 마지막에 열었던 파일들을 보여 주며, Tab 키(또는 지정한wildcharm) 로 원하는 파일을 선택할 수 있습니다.
you edited; hit “ again for the one before that.
Compatibility: lastused는 Vim 9.1+ 및 최신 Neovim에서 사용할 수 있습니다. 오래된 Vim 버전에는 없으니 :help 'wildmode'를 확인해 보세요.
6. Harpoon (Neovim 전용) – 지속적이고 프로젝트‑인식 슬롯
Best for: 하루 동안 작업하는 4‑6개의 파일을 선별해 목록으로 관리하고, 재시작 후에도 유지하고 싶을 때.
" Add current file to Harpoon list
:lua require('harpoon.mark').add_file()
" Open the Harpoon quick‑menu
:lua require('harpoon.ui').toggle_quick_menu()
" Jump directly to slot 1‑4
1 2 3 4
- Global marks는 특정 행 번호에 연결된 26개의 슬롯을 제공하지만, Harpoon은 작고 번호가 매겨진 리스트를 제공하여 세션 간에 동일하게 유지됩니다.
- 이 리스트는 프로젝트‑인식(Git 루트 기준)이며, 각 프로젝트마다 별도의 슬롯 세트를 가집니다.
- 예시 워크플로우: 하루 시작에
handler.go,service.go,service_test.go,schema.sql을 Harpoon에 추가합니다. 하루 동안1‑4를 눌러 해당 파일로 즉시 이동할 수 있으며, 다른 버퍼를 얼마나 열든 영향을 받지 않습니다.
Requirements: Lua 설정이 포함된 Neovim. Harpoon은 Vim에서는 작동하지 않습니다.
요약 표
| 기능 | 사용 시점 | 설정 필요 |
|---|---|---|
| “ | 두 파일 간 토글 | 없음 |
전역 마크 (mA/'A) | 몇 개의 특정 파일/라인으로 이동 | 없음 (선택적 정리) |
/ | 점프 기록을 앞뒤로 탐색 | 없음 |
:b, ]b/[b, :ls | 부분 이름 또는 버퍼 번호로 전환 | 없음 |
wildmode=lastused + wildcharm | 플러그인 없이 빠른 MRU 선택기 | set 명령 + 선택적 매핑 |
| Harpoon | 지속적인 프로젝트 전체 슬롯 목록 (4‑6 파일) | Neovim + Lua 플러그인 |
워크플로에 맞는 방법을 선택하세요: 기본 기능(“ , 마크, 점프 리스트)부터 시작하고, MRU 완성으로 발전한 뒤, 파일의 안정적인 교차 세션 단축 목록이 필요할 때 Harpoon 같은 전용 플러그인을 사용하세요. 즐거운 탐색 되세요!
고정 파일에 대한 퍼지 검색 – Telescope 통합
:Telescope buffers — 모든 열린 버퍼에 대한 퍼지 검색
:Telescope buffers
권장 바인딩
nnoremap fb Telescope buffers
Telescope 버퍼 피커는 번호와 수정 상태([…]는 저장되지 않은 변경 사항)를 표시하며 모든 열린 버퍼를 보여줍니다.
- 실시간 필터링 – 원하는 부분 문자열을 입력하면 즉시 필터링됩니다.
- 버퍼 삭제 – 피커가 열려 있는 동안 “ 를 눌러 버퍼를 목록에서 제거합니다(피커를 닫지 않음). 긴 세션 중에 오래된 버퍼를 정리할 때 유용합니다.
예시
3시간 동안 작업하면서 15개의 버퍼가 열려 있다고 가정해 보세요. 특정 마이그레이션 파일을 찾아야 하는데 정확한 이름이 기억나지 않을 때, 피커에migr를 입력하면 원하는 파일이 바로 좁혀집니다.
Vim (non‑Neovim) 대안
Vanilla Vim을 사용한다면 fzf.vim 의 :Buffers 명령이 거의 동일한 피커를 제공합니다. 버퍼 번호를 알 필요 없이 이름의 일부만 입력하고 선택하면 됩니다.
워크플로 팁
이 기술들은 서로 겹쳐 사용할 수 있습니다:
- “ – 마지막 파일로 전환.
'A/'B– 자주 방문하는 고정 파일로 점프.- “ – 정의로 들어간 뒤 되돌아가기.
b– 몇 개의 버퍼만 열려 있을 때 MRU(최근 사용) 순서 리스트를 빠르게 표시.:Telescope buffers– 많은 버퍼를 한 번에 검색.
대부분의 사용자에게 가장 적합한 조합은 “ + 전역 마크 + wildmode=lastused 로, 플러그인 없이도 기본 동작보다 크게 개선됩니다.
추가 읽기: 자세한 설명은 vimtricks.wiki에서 확인할 수 있습니다.
질문: 현재 사용 중인 파일 전환 워크플로 중 아직도 어색하게 느껴지는 부분은 무엇인가요?