分页: 1 / 1

vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 12:49
ejsoon
vim如何安裝prettier插件?

代码: 全选

在 Vim 中安裝 Prettier,最常見且推薦的方式是透過 **coc.nvim** (支援 LSP 功能) 或 **vim-prettier** (專門的插件)。

以下為你整理的兩種主流安裝方案:

---

### 方案一:使用 coc.nvim (推薦,功能最強大)
如果你希望 Vim 像 VS Code 一樣擁有強大的自動補全和插件支援,這是首選。

1.  **安裝插件管理器:** (以 [vim-plug](https://github.com/junegunn/vim-plug) 為例)
    在你的 `.vimrc` 中加入:
    ```vim
    call plug#begin()
    Plug 'neoclide/coc.nvim', {'branch': 'release'}
    call plug#end()
    ```
2.  **安裝 Prettier 擴展:**
    打開 Vim 並執行以下指令:
    ```vim
    :CocInstall coc-prettier
    ```
3.  **配置自動儲存格式化:**
    在 `.vimrc` 中加入這行,即可在儲存時自動美化代碼:
    ```vim
    command! -nargs=0 Prettier :call CocAction('runCommand', 'prettier.formatFile')
    ```

---

### 方案二:使用 vim-prettier (輕量、專注)
如果你不想要 coc.nvim 那麼重的框架,可以直接安裝這個專屬插件。

1.  **安裝插件:**
    在 `.vimrc` 中加入:
    ```vim
    call plug#begin()
    " 需要先安裝好 node.js 與 npm
    Plug 'prettier/vim-prettier', { 'do': 'yarn install --frozen-lockfile --production' }
    call plug#end()
    ```
2.  **基本配置:**
    你可以設置在儲存時自動執行,或針對特定檔案格式開啟:
    ```vim
    " 儲存時自動格式化
    let g:prettier#autoformat = 1
    " 儲存時不彈出錯誤視窗
    let g:prettier#autoformat_config_present = 1
    ```

---

### 核心差異對照表

| 特性 | coc-prettier | vim-prettier |
| :--- | :--- | :--- |
| **依賴** | 需要 Node.js + coc.nvim | 需要 Node.js |
| **速度** | 非常快 (非同步執行) | 較快 |
| **設定** | 整合在 CocConfig 中 | 透過 Vim 全域變數設定 |
| **適用對象** | 已經在使用 coc.nvim 的開發者 | 只想要單純 Prettier 功能的人 |

---

### 💡 小提醒
在使用這些插件之前,請確保你的系統已經安裝了 **Node.js**。

* **手動執行指令:** 安裝完成後,你通常可以在命令模式輸入 `:Prettier` 來手動美化目前的檔案。
* **配置文件:** 插件會自動讀取你專案根目錄下的 `.prettierrc` 配置文件。

你要處理的是前端專案(如 React/Vue),還是單純的 HTML/CSS 練習呢?這會影響我推薦你的細節配置。

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 13:02
ejsoon

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 13:26
ejsoon
這個插件還要調用node.js的執行檔:

代码: 全选

cd ~/.vim/pack/plugins/start/vim-prettier
npm install --registry=https://registry.npmmirror.com
gemini還推薦到.vimrc寫(我沒試):

代码: 全选

Plug 'prettier/vim-prettier', { 'do': 'npm install --registry=https://registry.npmmirror.com' }

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 13:35
ejsoon
設置:

代码: 全选

" 是否使用單引號 (true 為單引號,false 為雙引號)
let g:prettier#config#single_quote = 'true'

" 縮進空格數 (設為 2)
let g:prettier#config#tab_width = '2'

" 是否使用分號 (true 為有分號)
let g:prettier#config#semi = 'true'

" 括號內部保留空格 { foo: bar } (true 為保留)
let g:prettier#config#bracket_spacing = 'true'

" 尾隨逗號 (none|es5|all)
let g:prettier#config#trailing_comma = 'es5'

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 13:54
ejsoon

代码: 全选

" 強制使用空格而不是 Tab
let g:prettier#config#use_tabs = 'false'

" 確保縮進寬度也是你想要的(例如 2 或 4)
let g:prettier#config#tab_width = '2'

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 13:54
ejsoon
改用全局版本:

代码: 全选

既然你已經完成了全局安裝,我們現在要把 Vim 從「依賴插件內部目錄」的路徑中解放出來,改為調用系統全局的 Prettier。

---

### 1. 如何檢查全局 Prettier 版本?

在終端機(Terminal)中輸入以下指令即可:

```bash
prettier --version
```

如果系統提示「command not found」,說明你的 npm 全局路徑尚未加入到系統的 `PATH` 環境變量中。你可以試著輸入以下指令來找到它的真身:

```bash
npm list -g --depth=0
# 或者查看安裝路徑
npm config get prefix
```

---

### 2. 如何讓 Vim 調用全局 Prettier?

雖然 `vim-prettier` 插件默認會先找它自己目錄下的 `node_modules`,但你可以透過在 `.vimrc` 中指定路徑,強制它使用你剛安裝好的全局版本。

#### 步驟 A:找到全局 Prettier 的路徑
在終端機輸入:
```bash
which prettier
```
這通常會返回類似 `/usr/local/bin/prettier` 或 `/usr/bin/prettier` 的路徑。

#### 步驟 B:修改 `.vimrc`
將找到的路徑寫入 `.vimrc` 中的 `g:prettier#exec` 變量:

```vim
" 指定使用全局的 Prettier 執行檔
let g:prettier#exec = '/usr/local/bin/prettier'  " 請替換成你 which prettier 得到的路徑

" 這樣即使你刪掉 ~/.vim/pack/... 目錄下的 node_modules,Vim 也能正常運行
```

---

### 3. 更聰明的方法:讓插件自動尋找

如果你不想寫死路徑(例如你以後可能會升級 Node 或更換機器),`vim-prettier` 其實有一個搜索邏輯。如果你**刪除**插件目錄下的 `node_modules`,它通常會退而求其次去尋找系統環境變量中的 `prettier`。

你可以嘗試:
1. 進入插件目錄:`cd ~/.vim/pack/plugins/start/vim-prettier`
2. 移除當前的局部依賴:`rm -rf node_modules`
3. 重啟 Vim 並執行 `:Prettier`。

如果它能跑,說明它已經自動抓到你 `npm install -g` 的那個版本了。

---

### 4. 為什麼推薦全局版本?



使用全局版本有幾個好處:
* **管理方便:** 你只需要運行一次 `npm update -g prettier`,所有的編輯器(Vim, VS Code, Sublime)都會同步升級。
* **節省空間:** 不需要每個 Vim 插件目錄都存一份幾十 MB 的 `node_modules`。
* **環境一致:** 確保你在命令行手動格式化與在 Vim 裡看到的結果完全一樣。

**小測試:**
你現在在 Vim 裡執行 `:PrettierCliVersion`(如果插件支持),或者直接運行一個格式化,看看它是否還會報錯?如果報錯「Prettier not found」,請務必檢查 `g:prettier#exec` 的路徑是否正確。

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 16:44
ejsoon
詳細介紹如何安裝coc.nvim,最好是用下載後放到start文件夾的方法

代码: 全选

這是一個非常硬核且復雜的安裝方式。通常大家使用插件管理器(如 vim-plug),但如果你堅持使用 Vim 8 自帶的軟連結方式(`pack/*/start`),也就是所謂的「手動安裝」,你需要處理 **插件本體** 和 **編譯後的二進制檔案** 兩個部分。

`coc.nvim` 不同於純 VimScript 插件,它是一個基於 Node.js 的應用程序,所以單純「下載放進去」是不夠的,還需要編譯。

---

### 第一步:環境準備(必須)
在開始之前,請確保你的系統已經安裝了:
1.  **Node.js** (版本 >= 14.14)
2.  **Vim 8.1+** 或 **Neovim**
3.  **git**(用於克隆代碼)

---

### 第二步:建立目錄結構
Vim 的原生插件目錄遵循 `pack/[隨便取名]/start/[插件名]` 的結構。

1.  打開終端機。
2.  建立目錄(如果不存在):
    ```bash
    mkdir -p ~/.vim/pack/plugins/start
    ```

---

### 第三步:下載並編譯 coc.nvim
因為 `coc.nvim` 需要編譯後的 JavaScript 才能運行,直接下載原始碼會報錯。

1.  進入該目錄:
    ```bash
    cd ~/.vim/pack/plugins/start
    ```
2.  克隆倉庫:
    ```bash
    git clone --branch release --depth 1 https://github.com/neoclide/coc.nvim.git
    ```
    > **注意**:這裡使用 `--branch release` 非常重要!這個分支包含了預編譯好的 `index.js`,這樣你就不需要手動執行 `npm install` 和 `npm run build` 了,這最符合你「直接放進去」的需求。

---

### 第四步:配置 .vimrc
雖然插件已經「放進去了」,但為了讓它運作良好(尤其是補全彈窗的觸發),你需要把官方推薦的配置加入 `~/.vimrc`。

這是最核心的基礎配置:
```vim
" 使用 Tab 鍵觸發補全
inoremap <silent><expr> <TAB>
      \ coc#pum#visible() ? coc#pum#next(1) :
      \ check_back_space() ? "\<Tab>" :
      \ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"

" 使用 Enter 確認補全
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

function! s:check_back_space() abort
  let col = col('.') - 1
  return !col || getline('.')[col - 1]  =~# '\s'
endfunction
```

---

### 第五步:安裝語言支援 (JS 提示的核心)
`coc.nvim` 本身只是一個引擎,它不內建 JS 提示。你需要安裝 `coc-tsserver` 擴展。

1.  打開 Vim。
2.  輸入以下指令並回車:
    ```vim
    :CocInstall coc-tsserver coc-json
    ```

---

### 第六步:測試
現在,新建一個 `test.js` 文件,輸入 `setT`,你應該會看到像下面這樣的自動補全選單:



### 常見問題排除
* **報錯「coc.nvim service not started」**:通常是因為 Node.js 版本太低,或者是你下載的是 `master` 分支而不是 `release` 分支(缺少編譯後的文件)。
* **沒有圖標**:如果你想要漂亮的圖標,需要安裝 **Nerd Fonts** 字體。
* **太卡頓**:`coc.nvim` 比較重,如果你的機器配置極低,可能會感覺到啟動稍微變慢。

### 為什麼不建議手動管理?
手動放到 `start` 文件夾雖然看起來乾淨,但**更新非常麻煩**。你以後必須手動進入目錄執行 `git pull`。如果未來你想嘗試更多插件,建議還是安裝一個 **vim-plug**,只需要一行指令就能管理所有插件的生死。

你想挑戰看看進一步配置「代碼跳轉(Go to Definition)」的功能嗎?這也是 Coc 的強項。

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 17:08
ejsoon
如何安裝和設置coc-prettier

代码: 全选

既然你已經手動安裝了 `coc.nvim`,安裝 `coc-prettier` 會讓你的 HTML、JS、Markdown 甚至 CSS 的排版能力直接提升到專業水準。

`Prettier` 的強大之處在於它不僅是縮進,它會根據代碼長度自動決定是否換行、如何處理引號等。

### 第一步:安裝 coc-prettier 擴展
這一步最簡單,直接在 Vim 命令行輸入:

```vim
:CocInstall coc-prettier
```

---

### 第二步:設置格式化快捷鍵
為了方便使用,我們通常會設定一組快捷鍵。請確保你的 `~/.vimrc` 中有這幾行:

```vim
" 格式化整個文件的內容
command! -nargs=0 Prettier :call CocAction('runCommand', 'prettier.formatFile')

" 設置快捷鍵 \f 進行格式化 (與之前教你的通用格式化共存)
vmap <leader>f  <Plug>(coc-format-selected)
nmap <leader>f  <Plug>(coc-format-selected)
```

---

### 第三步:設置「存檔時自動格式化」
這是很多人最喜歡的功能:只要按下 `:w` 存檔,代碼就自動變整齊。你可以透過修改 `coc-settings.json` 來實現。

1.  在 Vim 中輸入 `:CocConfig`(這會打開 `coc-settings.json`)。
2.  加入以下配置:

```json
{
  "coc.preferences.formatOnSaveFiletypes": [
    "javascript",
    "typescript",
    "html",
    "css",
    "json",
    "markdown"
  ],
  "prettier.singleQuote": true,
  "prettier.semi": true
}
```
* `formatOnSaveFiletypes`: 指定哪些文件在存檔時自動排版。
* `prettier.singleQuote`: 使用單引號(JS 開發常用)。
* `prettier.semi`: 強制在結尾加分號。

---

### 第四步:解決衝突(重要)
有時候你安裝了 `coc-html` 又安裝了 `coc-prettier`,Vim 會糾結要用哪一個來格式化。

你可以透過 `:CocConfig` 指定特定語言由誰負責:

```json
{
  "coc.preferences.formatOnSaveFiletypes": ["html", "javascript"],
  "languageserver": {
    // 這裡可以配置其他的 LSP
  },
  "[html]": {
    "coc.preferences.formatOnSave": true
  },
  "[javascript]": {
    "coc.preferences.formatOnSave": true
  }
}
```

---

### 測試一下
1.  新建一個 `test.js`。
2.  故意寫得很亂:`function   test(){console.log("hello")}`。
3.  輸入 `:w` 或按 `\f`。
4.  它應該會瞬間變成:
    ```javascript
    function test() {
      console.log("hello");
    }
    ```

### 進階提示:.prettierrc
如果你的專案根目錄下有一個 `.prettierrc` 文件,`coc-prettier` 會自動優先讀取該文件。這對團隊協作非常有用,因為大家可以共用一套排版標準,不管是用 Vim 還是 VS Code。

**小提醒:**
如果你發現 `:CocInstall coc-prettier` 失敗,通常是因為系統權限問題或 Node.js 環境不乾淨。這時可以嘗試在終端機進入 `~/.config/coc/extensions` 手動執行 `npm install coc-prettier`。

你的格式化功能現在運作正常嗎?有沒有遇到存檔沒反應的情況?

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 18:32
ejsoon
coc是否也可以整理代碼和縮進?如果是html呢?

代码: 全选

是的,**coc.nvim 完全可以勝任代碼整理(Formatting)和縮進(Indentation)的工作**。

它不僅能幫你補全代碼,還能像 VS Code 一樣,按下一個組合鍵就讓亂七八糟的代碼變得整齊劃一。

---

### 1. HTML 的代碼整理
對於 HTML,你同樣需要安裝對應的擴展。推薦安裝 **`coc-html`**,它內建了格式化功能。

* **安裝指令**:
    ```vim
    :CocInstall coc-html
    ```
* **功能**:它會幫你處理 HTML 標籤的對齊、屬性的換行以及縮進。

---

### 2. 如何執行「代碼整理」?
安裝好擴展後(如 `coc-html`、`coc-pyright`、`coc-phpls`),你可以通過以下幾種方式來整理代碼:

#### **方法 A:手動執行指令**
在 Vim 中輸入:
```vim
:call CocAction('format')
```
這會立即格式化當前文件的所有代碼。

#### **方法 B:設置快捷鍵(強烈建議)**
每次輸入指令太慢了,建議在 `.vimrc` 中綁定一個快捷鍵(例如 `<leader>f`):
```vim
" 格式化選中的代碼或整個文件
xmap <leader>f  <Plug>(coc-format-selected)
nmap <leader>f  <Plug>(coc-format-selected)
```
*註:`<leader>` 鍵預設是 `\`。設定後,你在普通模式按 `\f` 就能一鍵整理代碼。*

#### **方法 C:存檔時自動整理**
如果你希望每次按下 `:w` 存檔時,Vim 自動幫你排版,可以在 `.vimrc` 加入:
```vim
autocmd BufWritePre *.html,*.js,*.py,*.php silent! call CocAction('format')
```

---

### 3. 進階工具:Prettier (前端神器)
如果你對 HTML/CSS/JS 的排版要求很高(例如標籤屬性是否換行、單雙引號統一等),建議安裝 **`coc-prettier`**。它是目前前端開發的工業標準。

1.  **安裝**:
    ```vim
    :CocInstall coc-prettier
    ```
2.  它會覆蓋 `coc-html` 的預設格式化邏輯,提供更漂亮、更專業的排版效果。

---

### 4. 關於「縮進」的特別說明
Vim 的縮進分為兩個層次:

1.  **動態縮進(寫代碼時)**:當你按回車時,Vim 自動幫你縮進到下一行。這由 `.vimrc` 裡的 `filetype indent on` 決定。
2.  **格式化整理(寫完後)**:這是 `coc.nvim` 做的事,它會根據語言規則重新排版整個代碼塊。

**建議在 `~/.vimrc` 加入以下基礎縮進設定,配合 Coc 使用:**
```vim
set expandtab       " 將 Tab 轉為空格
set tabstop=4       " Tab 等於 4 個空格
set shiftwidth=4     " 自動縮進時的寬度
set softtabstop=4    " 按退格鍵時一次刪除 4 個空格
```

### 總結
* **HTML**: 安裝 `coc-html` 或 `coc-prettier`。
* **整理**: 使用 `:call CocAction('format')`。
* **縮進**: 配合 `.vimrc` 的 `shiftwidth` 設定與 Coc 的格式化功能。

如果你發現 `coc-phpls` 整理 PHP 的效果不滿意,可以再額外安裝 `coc-php-cs-fixer`,那是專門針對 PHP 的高階排版工具。你現在的 HTML 代碼已經能正常補全了嗎?

Re: vim代碼整理與補齊設置

发表于 : 2026年 4月 24日 20:22
ejsoon
如何得知coc-prettier的版本號?

代码: 全选

要查看 `coc-prettier` 的版本號,有幾種不同的方式,取決於你想看的是「插件本身的版本」還是「背後運行的 Prettier 核心版本」。

### 1. 最快的方法:使用 CocList
在 Vim 中輸入以下指令:
```vim
:CocList extensions
```
* **如何查看**:在打開的列表中找到 `coc-prettier`。
* **資訊**:你會在名稱旁邊看到類似 `1.1.25` 這樣的數字,這就是該擴展的版本號。
* **額外功能**:在這個界面,你可以按 `Tab` 鍵選擇 `update` 來更新它。

---

### 2. 詳細資訊法:使用 CocInfo
如果你想看更完整的環境資訊,輸入:
```vim
:CocInfo
```
* **如何查看**:這會打開一個新視窗。在 **「Installed extensions」** 這一欄下方,會列出所有已安裝的擴展及其版本號與路徑。
* **優點**:這裡同時能看到你的 Node.js 版本,這對排查 Prettier 為何不工作非常有用。

---

### 3. 查看 Prettier 核心引擎版本
`coc-prettier` 是一個殼,它呼叫的是 `prettier` 的程式庫。如果你想知道它具體是用哪個版本的 Prettier 來排版:

1. 打開一個文件(如 `test.js`)。
2. 輸入指令:
   ```vim
   :CocCommand prettier.openOutput
   ```
3. 這會打開 Coc 的輸出日誌,通常第一幾行就會顯示:
   > `[Info  - 5:20:00 AM] Extension core: coc-prettier 1.1.25`
   > `[Info  - 5:20:00 AM] Prettier version: 3.2.5` (這就是排版引擎的實際版本)

---

### 4. 文件夾確認法(手動檢查)
如果你想直接看檔案,可以去 Coc 存放擴展的目錄:
* **路徑**:`~/.config/coc/extensions/node_modules/coc-prettier/`
* **查看方式**:打開該目錄下的 `package.json`,裡面的 `"version": "x.x.x"` 就是答案。

---

### 如何判斷是否為最新版?
當你執行 `:CocList extensions` 時:
* 如果版本號後面有 **`?`** 或提示有更新,代表官網有新版。
* 你可以直接執行 **`:CocUpdate`**,這會一次性檢查並更新包括 `coc-prettier` 在內的所有擴展。

**小提醒:**
如果你發現版本號很久沒動,且執行 `:CocUpdate` 也沒反應,可能是因為你的 **Node.js 版本太舊**,導致新版的 `coc-prettier` 無法安裝。這時 `:CocInfo` 裡的資訊就非常重要了。