Vim에서 split을 Ctrl-h/j/k/l로 오가게 설정했어 (트랙 4). tmux에서 pane을 prefix + h/j/k/l로 오가게 설정했고 (트랙 6). 그런데 tmux 안에서 셸 pane 옆에 Vim split이 놓이는 순간, 손가락이 어느 쪽 규칙을 써야 할지 몰라 헤매. 시스템 둘, 머슬 메모리 둘, 그리고 경계를 넘을 때마다 걸리는 마찰이야.
해법: vim-tmux-navigator
christoomey/vim-tmux-navigator는 두 층 모두에서 Ctrl-h/j/k/l이 통하게 만들어주는 아주 작은 plugin이야. Vim에서 Ctrl-l을 누르면, 오른쪽에 split이 있으면 그리로 가고, 없으면 tmux가 오른쪽 pane으로 옮겨줘. 경계가 사라지는 거지.
어떻게 동작하냐면
절반씩 두 조각이야. Vim plugin 하나와 tmux config 조각 하나. tmux 쪽이 지금 포커스된 pane에서 Vim 프로세스가 도는지 확인해서, 그렇다면 Ctrl-h/j/k/l을 Vim으로 넘겨주고 Vim plugin이 받아 처리해. 아니면 tmux가 직접 select-pane을 돌리고. 영리하고, 튼튼하고, 조각도 1분이면 읽을 만큼 짧아.
양쪽 다 깔기
Vim plugin은 lazy.nvim으로 넣고, tmux 조각은 ~/.tmux.conf에 넣고 다시 읽히면 돼. 설정은 이게 전부야. 손에 붙고 나면 pane 사이를 오가는 게 마법처럼 느껴져.
통합은 층을 더하는 게 아니라 없애는 거야. vim-tmux-navigator가 없는 Vim+tmux는 끊임없이 서로를 번역하는 도구 두 개야. 얹고 나면 하나의 작업 공간으로 합쳐지고. 좋은 통합 plugin은 버튼을 더 주는 게 아니라 머리 쓸 일을 줄여줘.
한 가지 주의할 점
Vim을 알아보는 정규식이 프로세스 이름에 vim, nvim, view 같은 게 들어 있다고 가정해. 그래서 격리된 터미널이나 좀 특이한 프로세스 (fzf, lazygit) 에서는 헷갈릴 수 있어. plugin README에 예외를 덮어쓰는 방법이 나와 있고, 거의 모든 경우엔 아래 조각이 그냥 잘 돌아가.
Code
lazy.nvim plugin spec에 추가·lua
{
"christoomey/vim-tmux-navigator",
cmd = {
"TmuxNavigateLeft", "TmuxNavigateDown",
"TmuxNavigateUp", "TmuxNavigateRight",
"TmuxNavigatePrevious",
},
keys = {
{ "<C-h>", "<cmd>TmuxNavigateLeft<CR>", desc = "Go to left split/pane" },
{ "<C-j>", "<cmd>TmuxNavigateDown<CR>", desc = "Go to lower split/pane" },
{ "<C-k>", "<cmd>TmuxNavigateUp<CR>", desc = "Go to upper split/pane" },
{ "<C-l>", "<cmd>TmuxNavigateRight<CR>", desc = "Go to right split/pane" },
{ "<C-\\>", "<cmd>TmuxNavigatePrevious<CR>", desc = "Go to previous split/pane" },
},
}
1. tmux 안에서 pane 을 좌우로 나누기 (prefix + |).
2. 한 pane 에서 nvim 실행.
3. Vim 안에서 :vsp 로 다른 파일 열기 (Vim 내부 split 만들기).
4. Ctrl-h / Ctrl-l 반복해서 누르기.
이렇게 걸어가야 함: 왼 tmux pane ←→ 왼 Vim split ←→
오른 Vim split ←→ 오른 tmux pane.
5. 흐름이 끊기지 않음. prefix 도 필요 없고, 층을 의식할 일도 없음.
vim-tmux-navigator (Vim plugin) 를 깔고 짝이 되는 tmux 조각을 넣어. 위 검증 루틴을 그대로 해봐. 처음 제대로 동작하는 순간을 잠깐 음미해 — 그게 이 트랙 전체의 목표야. 나중에 Ctrl-h/j/k/l이 층을 못 넘어가기 시작하면 정규식이 여전히 Vim 프로세스를 알아보는지 확인해봐 (드물지만 직접 빌드한 Vim이나 특이한 설치에서 이런 일이 생겨).
Progress
Progress is local-only — sign in to sync across devices.