Vim에서 모든 파일을 fuzzy-finding 없이 전환하기

발행: (2026년 2월 25일 오후 04:37 GMT+9)
12 분 소요
원문: Dev.to

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.goauth_test.go).

  • 대체 파일(alternate file) 즉, 마지막으로 열어 둔 버퍼로 전환합니다.
  • 파일명을 입력할 필요도, 퍼지 검색도, 메뉴도 없이 한 번의 키 입력만으로 바로 이전 위치로 돌아갑니다.
  • 예시: gd 로 테스트 파일에 이동해 구현을 본 뒤, “ 를 눌러 원래 파일로 돌아가면 커서는 그대로 남아 있습니다.

제한점: 하나의 이전 파일만 기억합니다. 세 번째 버퍼를 열면 가장 오래된 기록이 사라집니다. 두 파일을 앞뒤로 오가는 경우엔 최고의 선택이지만, 더 넓은 탐색이 필요하면 다른 방법을 써야 합니다.

2. 전역 마크 – mA, 'A – 자주 찾는 파일 고정

추천 상황: 세션 동안 2‑3개의 파일을 계속 오갈 때 (예: config, main_handler, test).

" 전역 마크 설정 (대문자 = 전역, 파일 간에 유지)
mA

" 어디서든 해당 위치로 점프
'A
  • 대문자 마크(mAmZ)는 전역 마크이며, 파일 라인 번호를 모두 기억합니다.
  • 어떤 버퍼에 있든 'A 를 누르면 정확히 그 라인으로 이동합니다.
  • 예시: 기능을 작업하면서 routes.go 로 자주 가야 할 때, 해당 라인에서 mR 로 마크를 잡아 두면 나중에 'R 로 즉시 이동할 수 있습니다.

지속성: 전역 마크는 Vim 세션을 넘어 ~/.viminfo(Vim) 혹은 ~/.local/share/nvim/shada/main.shada(Neovim)에 저장됩니다. 오래된 마크가 쌓일 수 있으니 가끔 정리해 주세요:

:delmarks A-Z

3. / – 이동 기록 되돌아가기

추천 상황: 여러 번 점프한 뒤 역순으로 되돌아갈 때 (예: gdgd → 검색).

   " 점프 리스트에서 뒤로 이동 (이전 위치)
   " 점프 리스트에서 앞으로 이동 (다음 위치)
  • Vim은 점프 리스트를 유지합니다. gd, gg, /패턴, '마크 등으로 이동한 모든 위치가 기록됩니다.
  • “ 은 리스트를 뒤로 한 단계씩 이동하며, 파일 경계를 넘어 브라우저의 뒤로 가기 버튼처럼 동작합니다.
  • “ 은 다시 앞으로 이동합니다.

팁: :jumps 명령으로 전체 리스트를 확인하고, 현재 어느 위치에 있는지 확인할 수 있습니다.

주의점: 점프 리스트는 위치만 기록하므로, 많이 점프하면 “ 로 중간에 여러 불필요한 위치를 지나야 할 수도 있습니다.

4. 내장 버퍼 명령 – :b, ]b / [b, :ls

추천 상황: 파일 이름의 일부만 알고 있을 때 빠르게 전환하고 싶을 때.

:ls                " 열려 있는 모든 버퍼를 번호와 이름으로 표시
:b partial         " 파일명 일부로 버퍼 전환
:b 3               " 번호 3번 버퍼로 전환
]b                 " 다음 버퍼 (vim‑unimpaired 필요하거나 직접 매핑)
[b                 " 이전 버퍼
  • :b 명령은 탭 완성을 지원하므로 :b authauth.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에 추가합니다. 하루 동안 14를 눌러 해당 파일로 즉시 이동할 수 있으며, 다른 버퍼를 얼마나 열든 영향을 받지 않습니다.

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에서 확인할 수 있습니다.

질문: 현재 사용 중인 파일 전환 워크플로 중 아직도 어색하게 느껴지는 부분은 무엇인가요?

0 조회
Back to Blog

관련 글

더 보기 »