<?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>Editor on Tarragon</title><link>https://tarrragon.github.io/blog/tags/editor/</link><description>Recent content in Editor 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/editor/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></channel></rss>