C.W.K.
Stream
Lesson 03 of 04 · published

Git 통합과 파일 관리

~11 min · neovim, git, files, oil

Level 0갇힌 자
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

Neovim 안의 git 두 레이어

트랙 7 이 inline hunk 위해 gitsigns.nvim 도입했어. 브랜치 operation 을 위한 더 무거운 git 클라이언트와 짝지으면 스펙트럼 커버:

  • gitsigns.nvim — inline 레이어. Gutter 의 hunk, stage/reset/preview, inline blame. 편집 루프에 최고.
  • vim-fugitive — 깊은 git 레이어. :Git 이 모든 git operation 의 Vim 명령 인터페이스. :Git blame 이 navigable blame view 열어; :Git log, :Git diff, :Git rebase -i 다 작동. 무거운 operation 에 최고.
  • 또는 인접 tmux pane 의 lazygit 으로 둘 다 skip 하고 브랜치 ops. 트랙 7 패턴.

대부분 사람이 gitsigns + lazygit 사용. fugitive 는 모든 걸 Vim 안에서 선호하는 사람들 위.

oil.nvim — 파일시스템을 buffer 처럼 편집

oil.nvim 이 모두가 빠지는 깜짝 plugin. 현재 디렉토리를 일반 Vim buffer 로 열면, 파일시스템이 buffer 가 돼: 라인이 파일명, 일반 Vim motion 으로 편집, :w 로 저장 — Vim 이 그에 따라 rename, move, create, delete. Capture-group regex 로 파일 다섯 개 rename? :%s/old/new/ + :w — 끝.

다른 파일 탐색기 학파

사이드바 트리 (VS Code 같은) 선호하면 neo-tree 또는 nvim-tree 가 대안. 기능적, 익숙, 근데 buffer-as-filesystem 편집 파워 안 줌. 사이드바 트리 잡기 전에 oil 일주일 시도해.

최소 셋업

아래 블록이 gitsigns, fugitive (작은 footprint, :Git 호출까지 활성화 안 됨), oil 추가. Lazy-loading 으로 시작 안 느려; oil 이 - 누를 때 즉시 열려.

파일시스템을 buffer 처럼 편집하는 게 킬러 기능. GUI 트리의 drag-rename 이 한 파일엔 좋아. 한 번에 열 파일엔 oil + 파일명 visual-block 편집 + :w 가 동작. Buffer 모델 스케일; 트리 view 안 함.

Code

gitsigns.nvim — 트랙 7 에서 refresher·lua
{
  "lewis6991/gitsigns.nvim",
  event = { "BufReadPost", "BufNewFile" },
  opts = {
    on_attach = function(bufnr)
      local gs = package.loaded.gitsigns
      local map = function(mode, lhs, rhs, desc)
        vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc })
      end
      map("n", "]c", gs.next_hunk,            "Next hunk")
      map("n", "[c", gs.prev_hunk,            "Prev hunk")
      map("n", "<leader>hs", gs.stage_hunk,   "Stage hunk")
      map("n", "<leader>hr", gs.reset_hunk,   "Reset hunk")
      map("n", "<leader>hp", gs.preview_hunk, "Preview hunk")
      map("n", "<leader>hb", function() gs.blame_line({ full = true }) end, "Blame")
    end,
  },
}
vim-fugitive — Vim 명령으로 깊은 git·lua
{
  "tpope/vim-fugitive",
  cmd = { "Git", "G", "Gdiffsplit", "Gblame", "Glog" },
  keys = {
    { "<leader>gs", "<cmd>Git<CR>",         desc = "Git status" },
    { "<leader>gd", "<cmd>Gdiffsplit<CR>",  desc = "Git diff (split)" },
    { "<leader>gb", "<cmd>Git blame<CR>",   desc = "Git blame" },
    { "<leader>gl", "<cmd>Git log --oneline<CR>", desc = "Git log" },
  },
}
oil.nvim — buffer 로 파일시스템·lua
{
  "stevearc/oil.nvim",
  cmd = "Oil",
  keys = {
    { "-", "<cmd>Oil<CR>", desc = "Open parent directory" },
  },
  opts = {
    default_file_explorer = true,
    delete_to_trash = true,
    skip_confirm_for_simple_edits = true,
    view_options = { show_hidden = true },
  },
}
neo-tree 대안 — 사이드바 트리 (둘 중 하나만)·lua
{
  "nvim-neo-tree/neo-tree.nvim",
  cmd = "Neotree",
  dependencies = { "nvim-lua/plenary.nvim", "MunifTanjim/nui.nvim" },
  keys = {
    { "<leader>e", "<cmd>Neotree toggle<CR>", desc = "File tree" },
  },
  opts = { window = { width = 32 } },
}

External links

Exercise

oil.nvim 추가. 어떤 buffer 든 - 눌러 현재 디렉토리 열기. 라인에 cw 사용 후 저장으로 파일 rename 시도. 라인 추가 후 저장으로 새 파일 생성 시도. 그 다음 파일시스템 체크 (tmux pane 의 ls) — 편집이 실제로 적용. gitsigns + fugitive 도 갖고 있으면: uncommit 변경 있는 파일 열고, ]c / [c 로 hunk navigate, <leader>hs 로 하나 stage, 그 다음 :Git 으로 fugitive 의 status buffer 에서 stage 된 변경 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.