<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Neovim on Tarragon</title><link>https://tarrragon.github.io/blog/tags/neovim/</link><description>Recent content in Neovim on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 29 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/neovim/index.xml" rel="self" type="application/rss+xml"/><item><title>Neovim 配置</title><link>https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/neovim-config/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/neovim-config/</guid><description>&lt;p>Neovim 的配置是 dotfile 裡最複雜的單一工具——plugin 生態龐大、整個配置系統基於 Lua。Lua 語法基礎見 &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/knowledge-cards/lua-scripting-language/" data-link-title="Lua 腳本語言" data-link-desc="在 Hyprland 或 Neovim 配置檔遇到 Lua 語法看不懂時回來讀 — 配置檔需要的最小 Lua 知識">Lua 腳本語言&lt;/a>。&lt;/p>
&lt;p>配置路徑：&lt;code>~/.config/nvim/&lt;/code>&lt;/p>
&lt;h2 id="配置結構">配置結構&lt;/h2>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">~/.config/nvim/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">├── init.lua # 入口，source 其他模組
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">├── lua/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">│ ├── options.lua # 基本設定（行號、tab 寬度、搜尋行為）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">│ ├── keymaps.lua # 快捷鍵
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">│ ├── autocmds.lua # 自動指令
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">│ └── plugins/ # 各 plugin 的配置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">│ ├── init.lua # plugin manager 載入
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">│ ├── lsp.lua # LSP 設定
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">│ ├── telescope.lua # fuzzy finder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">│ ├── treesitter.lua
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">│ └── ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">└── lazy-lock.json # lazy.nvim 的 lockfile（要進 Git）&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="是否該用預設配置包">是否該用預設配置包&lt;/h2>
&lt;p>LazyVim、NvChad、AstroNvim 這類預設配置包提供了一整套開箱即用的 neovim 設定。判讀：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>用預設配置包&lt;/strong>：想要快速可用的 IDE-like 體驗、不想花時間逐一選 plugin 和配置。Dotfile 裡放的是「對預設的覆寫」&lt;/li>
&lt;li>&lt;strong>自己從零組&lt;/strong>：想完全理解每一個 plugin 做什麼、容忍前期投入時間。Dotfile 裡放的是完整配置&lt;/li>
&lt;/ul>
&lt;p>兩種都是 dotfile 管理的合法對象。差異在出問題時的除錯路徑：自己組的知道每一行做什麼，預設配置包的要先理解它的分層才能改。&lt;/p>
&lt;h2 id="dotfile-結構對應">Dotfile 結構對應&lt;/h2>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="ln"> 1&lt;/span>&lt;span class="cl">~/dotfiles/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 2&lt;/span>&lt;span class="cl">├── alacritty/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 3&lt;/span>&lt;span class="cl">│ └── .config/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 4&lt;/span>&lt;span class="cl">│ └── alacritty/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 5&lt;/span>&lt;span class="cl">│ └── alacritty.toml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 6&lt;/span>&lt;span class="cl">├── tmux/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 7&lt;/span>&lt;span class="cl">│ └── .config/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 8&lt;/span>&lt;span class="cl">│ └── tmux/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln"> 9&lt;/span>&lt;span class="cl">│ └── tmux.conf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">10&lt;/span>&lt;span class="cl">├── nvim/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">11&lt;/span>&lt;span class="cl">│ └── .config/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">12&lt;/span>&lt;span class="cl">│ └── nvim/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">13&lt;/span>&lt;span class="cl">│ ├── init.lua
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">14&lt;/span>&lt;span class="cl">│ ├── lazy-lock.json
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">15&lt;/span>&lt;span class="cl">│ └── lua/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">16&lt;/span>&lt;span class="cl">│ └── ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">17&lt;/span>&lt;span class="cl">└── zellij/ # 如果用 zellij
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">18&lt;/span>&lt;span class="cl"> └── .config/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">19&lt;/span>&lt;span class="cl"> └── zellij/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">20&lt;/span>&lt;span class="cl"> └── config.kdl&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每個工具是獨立的 stow package，可以在不同機器選擇性安裝。例如伺服器只 &lt;code>stow tmux nvim&lt;/code>、桌面機才加 &lt;code>stow alacritty&lt;/code>。&lt;/p></description><content:encoded><![CDATA[<p>Neovim 的配置是 dotfile 裡最複雜的單一工具——plugin 生態龐大、整個配置系統基於 Lua。Lua 語法基礎見 <a href="/blog/linux/dotfile/knowledge-cards/lua-scripting-language/" data-link-title="Lua 腳本語言" data-link-desc="在 Hyprland 或 Neovim 配置檔遇到 Lua 語法看不懂時回來讀 — 配置檔需要的最小 Lua 知識">Lua 腳本語言</a>。</p>
<p>配置路徑：<code>~/.config/nvim/</code></p>
<h2 id="配置結構">配置結構</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">~/.config/nvim/
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">├── init.lua              # 入口，source 其他模組
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">├── lua/
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">│   ├── options.lua       # 基本設定（行號、tab 寬度、搜尋行為）
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">│   ├── keymaps.lua       # 快捷鍵
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">│   ├── autocmds.lua      # 自動指令
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">│   └── plugins/          # 各 plugin 的配置
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">│       ├── init.lua      # plugin manager 載入
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">│       ├── lsp.lua       # LSP 設定
</span></span><span class="line"><span class="ln">10</span><span class="cl">│       ├── telescope.lua # fuzzy finder
</span></span><span class="line"><span class="ln">11</span><span class="cl">│       ├── treesitter.lua
</span></span><span class="line"><span class="ln">12</span><span class="cl">│       └── ...
</span></span><span class="line"><span class="ln">13</span><span class="cl">└── lazy-lock.json        # lazy.nvim 的 lockfile（要進 Git）</span></span></code></pre></div><h2 id="是否該用預設配置包">是否該用預設配置包</h2>
<p>LazyVim、NvChad、AstroNvim 這類預設配置包提供了一整套開箱即用的 neovim 設定。判讀：</p>
<ul>
<li><strong>用預設配置包</strong>：想要快速可用的 IDE-like 體驗、不想花時間逐一選 plugin 和配置。Dotfile 裡放的是「對預設的覆寫」</li>
<li><strong>自己從零組</strong>：想完全理解每一個 plugin 做什麼、容忍前期投入時間。Dotfile 裡放的是完整配置</li>
</ul>
<p>兩種都是 dotfile 管理的合法對象。差異在出問題時的除錯路徑：自己組的知道每一行做什麼，預設配置包的要先理解它的分層才能改。</p>
<h2 id="dotfile-結構對應">Dotfile 結構對應</h2>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln"> 1</span><span class="cl">~/dotfiles/
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">├── alacritty/
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">│       └── alacritty/
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">│           └── alacritty.toml
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">├── tmux/
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">│       └── tmux/
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">│           └── tmux.conf
</span></span><span class="line"><span class="ln">10</span><span class="cl">├── nvim/
</span></span><span class="line"><span class="ln">11</span><span class="cl">│   └── .config/
</span></span><span class="line"><span class="ln">12</span><span class="cl">│       └── nvim/
</span></span><span class="line"><span class="ln">13</span><span class="cl">│           ├── init.lua
</span></span><span class="line"><span class="ln">14</span><span class="cl">│           ├── lazy-lock.json
</span></span><span class="line"><span class="ln">15</span><span class="cl">│           └── lua/
</span></span><span class="line"><span class="ln">16</span><span class="cl">│               └── ...
</span></span><span class="line"><span class="ln">17</span><span class="cl">└── zellij/                    # 如果用 zellij
</span></span><span class="line"><span class="ln">18</span><span class="cl">    └── .config/
</span></span><span class="line"><span class="ln">19</span><span class="cl">        └── zellij/
</span></span><span class="line"><span class="ln">20</span><span class="cl">            └── config.kdl</span></span></code></pre></div><p>每個工具是獨立的 stow package，可以在不同機器選擇性安裝。例如伺服器只 <code>stow tmux nvim</code>、桌面機才加 <code>stow alacritty</code>。</p>
]]></content:encoded></item><item><title>模組三：終端機與編輯器</title><link>https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/</guid><description>&lt;p>終端機生態的配置檔數量比 shell 更多、散落位置更廣。Terminal emulator、multiplexer（tmux/zellij）、editor（neovim/vim）各自有獨立的配置體系，加上字型、配色這些跨工具共用的視覺設定，整層的管理複雜度比 shell 配置高一個量級。&lt;/p>
&lt;h2 id="章節文章">章節文章&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>文章&lt;/th>
 &lt;th>主題&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/terminal-emulator-config/" data-link-title="Terminal Emulator 配置" data-link-desc="選 terminal emulator 時需要比對配置格式和跨平台能力、或想把配色和字型統一管理時回來讀">Terminal Emulator 配置&lt;/a>&lt;/td>
 &lt;td>常見 terminal emulator 選型、配置判讀、配色與字型管理&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/multiplexer-tmux-zellij/" data-link-title="Multiplexer：tmux vs zellij" data-link-desc="在終端機裡切分 pane、管理多個 session、SSH 斷線後保持工作時回來讀 — tmux 和 zellij 的配置與選型">Multiplexer：tmux vs zellij&lt;/a>&lt;/td>
 &lt;td>tmux 和 zellij 的配置、plugin、選型判讀&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/neovim-config/" data-link-title="Neovim 配置" data-link-desc="neovim 配置該怎麼組織進 dotfile、要不要用 LazyVim 等預設配置包時回來讀">Neovim 配置&lt;/a>&lt;/td>
 &lt;td>neovim 配置結構、預設配置包判讀、dotfile 結構對應&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="跨分類引用">跨分類引用&lt;/h2>
&lt;ul>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/02-shell-config/" data-link-title="模組二：Shell 配置" data-link-desc="shell 配置檔長成一坨不敢動時回來讀 — .zshrc/.bashrc 的結構化拆分、alias/function/PATH 的模組化設計">模組二：Shell 配置&lt;/a>：shell 是終端機工具的載體，配置拆分邏輯相通&lt;/li>
&lt;li>→ &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">模組六：桌面 Rice 設計&lt;/a>：配色系統的統一管理從 terminal 延伸到桌面&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>終端機生態的配置檔數量比 shell 更多、散落位置更廣。Terminal emulator、multiplexer（tmux/zellij）、editor（neovim/vim）各自有獨立的配置體系，加上字型、配色這些跨工具共用的視覺設定，整層的管理複雜度比 shell 配置高一個量級。</p>
<h2 id="章節文章">章節文章</h2>
<table>
  <thead>
      <tr>
          <th>文章</th>
          <th>主題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/linux/dotfile/03-terminal-ecosystem/terminal-emulator-config/" data-link-title="Terminal Emulator 配置" data-link-desc="選 terminal emulator 時需要比對配置格式和跨平台能力、或想把配色和字型統一管理時回來讀">Terminal Emulator 配置</a></td>
          <td>常見 terminal emulator 選型、配置判讀、配色與字型管理</td>
      </tr>
      <tr>
          <td><a href="/blog/linux/dotfile/03-terminal-ecosystem/multiplexer-tmux-zellij/" data-link-title="Multiplexer：tmux vs zellij" data-link-desc="在終端機裡切分 pane、管理多個 session、SSH 斷線後保持工作時回來讀 — tmux 和 zellij 的配置與選型">Multiplexer：tmux vs zellij</a></td>
          <td>tmux 和 zellij 的配置、plugin、選型判讀</td>
      </tr>
      <tr>
          <td><a href="/blog/linux/dotfile/03-terminal-ecosystem/neovim-config/" data-link-title="Neovim 配置" data-link-desc="neovim 配置該怎麼組織進 dotfile、要不要用 LazyVim 等預設配置包時回來讀">Neovim 配置</a></td>
          <td>neovim 配置結構、預設配置包判讀、dotfile 結構對應</td>
      </tr>
  </tbody>
</table>
<h2 id="跨分類引用">跨分類引用</h2>
<ul>
<li>→ <a href="/blog/linux/dotfile/02-shell-config/" data-link-title="模組二：Shell 配置" data-link-desc="shell 配置檔長成一坨不敢動時回來讀 — .zshrc/.bashrc 的結構化拆分、alias/function/PATH 的模組化設計">模組二：Shell 配置</a>：shell 是終端機工具的載體，配置拆分邏輯相通</li>
<li>→ <a href="/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">模組六：桌面 Rice 設計</a>：配色系統的統一管理從 terminal 延伸到桌面</li>
</ul>
]]></content:encoded></item></channel></rss>