這是 Neovim 從零開始系列的第九篇。整個系列共 12 篇文章,將帶你從完全不懂 Vim,到能用 Neovim 打造一個完整的現代化開發環境。
為什麼在 Neovim 中操作 Git? VSCode 有內建的 Source Control 面板和 GitLens 擴充,讓你不用離開編輯器就能操作 Git。在 Neovim 中,我們要用幾個 plugins 達到同樣甚至更好的體驗:
gitsigns.nvim:在行號旁顯示 Git 變更狀態 lazygit:功能強大的 Terminal Git UI diffview.nvim:在 Neovim 中查看 diff gitsigns.nvim:行內 Git 狀態 gitsigns 是最基本也最必要的 Git plugin。它在 sign column(行號左邊)顯示每一行的 Git 狀態:
│ 綠色:新增的行 │ 藍色:修改的行 _ 紅色:刪除的行 -- lua/plugins/gitsigns.lua return { "lewis6991/gitsigns.nvim", event = "BufReadPost", config = function() require("gitsigns").setup({ signs = { add = { text = "│" }, change = { text = "│" }, delete = { text = "_" }, topdelete = { text = "‾" }, changedelete = { text = "~" }, }, on_attach = function(bufnr) local gs = package.loaded.gitsigns local opts = { buffer = bufnr } -- 導航:在 hunk(變更區塊)之間跳轉 vim.keymap.set("n", "]h", gs.next_hunk, opts) vim.keymap.set("n", "[h", gs.prev_hunk, opts) -- Stage / Unstage vim.keymap.set("n", "<leader>hs", gs.stage_hunk, opts) vim.keymap.set("n", "<leader>hr", gs.reset_hunk, opts) vim.keymap.set("v", "<leader>hs", function() gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, opts) vim.keymap.set("v", "<leader>hr", function() gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, opts) -- Stage / Reset 整個 buffer vim.keymap.set("n", "<leader>hS", gs.stage_buffer, opts) vim.keymap.set("n", "<leader>hR", gs.reset_buffer, opts) -- Undo stage vim.keymap.set("n", "<leader>hu", gs.undo_stage_hunk, opts) -- Preview hunk vim.keymap.set("n", "<leader>hp", gs.preview_hunk, opts) -- Blame vim.keymap.set("n", "<leader>hb", function() gs.blame_line({ full = true }) end, opts) vim.keymap.set("n", "<leader>tb", gs.toggle_current_line_blame, opts) -- Diff vim.keymap.set("n", "<leader>hd", gs.diffthis, opts) end, }) end, } gitsigns 快捷鍵總覽 快捷鍵 功能 說明 ]h / [h 下/上一個 hunk 在變更區塊間跳轉 <leader>hs Stage hunk 暫存當前變更區塊 <leader>hr Reset hunk 撤銷當前變更區塊 <leader>hS Stage buffer 暫存整個檔案 <leader>hR Reset buffer 撤銷整個檔案的變更 <leader>hu Undo stage 取消暫存 <leader>hp Preview hunk 預覽變更內容 <leader>hb Blame line 顯示當前行的 Git blame <leader>tb Toggle blame 切換行內 blame 顯示 <leader>hd Diff this 查看當前檔案的 diff 日常使用流程 1. 編輯程式碼(sign column 自動顯示變更標記) 2. 用 ]h / [h 在變更區塊間跳轉,檢查修改內容 3. 用 <leader>hp 預覽 hunk,確認要保留的變更 4. 用 <leader>hs stage 個別 hunk(或 <leader>hS stage 整個檔案) 5. 用 <leader>hr 撤銷不需要的變更 這種 hunk 級別的 staging 比 VSCode 的整個檔案 stage 更精細。你可以只 stage 一個檔案中的部分修改。
...