Usr_05

Nvim :help 頁面,使用 tree-sitter-vimdoc 解析器從 來源 產生


VIM 使用者手冊 - 作者:Bram Moolenaar
設定您的設定
您可以調整 Vim 的設定,使其以您想要的方式運作。本章將說明如何讓 Vim 在啟動時使用不同的選項值。新增外掛程式以擴展 Vim 的功能。或定義您自己的巨集。
05.1 vimrc 檔案 05.2 vimrc 檔案內容範例 05.3 簡單的映射 05.4 新增套件 05.5 新增外掛程式 05.6 新增說明檔案 05.7 選項視窗 05.8 常用選項
下一章:usr_06.txt 使用語法高亮 前一章:usr_04.txt 進行小變更 目錄:usr_toc.txt

vimrc 檔案 vimrc-intro

您可能已經厭倦了輸入您經常使用的命令。若要讓 Vim 在啟動時使用您最喜歡的選項設定和映射,請將它們寫入稱為 init.vim 的檔案中。Vim 會在啟動時執行此檔案中的命令。
如果您已經有 init.vim 檔案 (例如,您的系統管理員為您設定了一個),您可以透過這種方式編輯它
:edit $MYVIMRC
如果您還沒有 vimrc 檔案,請參閱 init.vim 以了解您可以在哪裡建立 vimrc 檔案。
此檔案始終會使用,且建議使用
~/.config/nvim/init.vim (Unix 和 OSX)
~/AppData/Local/nvim/init.vim (Windows)
vimrc 檔案可以包含您在冒號後輸入的所有命令。最簡單的命令是設定選項。例如,如果您希望 Vim 始終以啟用 'ignorecase' 選項啟動,請將此行新增至您的 vimrc 檔案
set ignorecase
若要使此新行生效,您需要退出 Vim 並再次啟動它。稍後您將學習如何在不退出 Vim 的情況下執行此操作。
本章僅說明最基本的項目。有關如何編寫 Vim 腳本檔案的更多資訊,請參閱:usr_41.txt

05.2 vimrc 檔案內容範例 vimrc_example.vim

第一章說明了如何建立 vimrc 檔案。
:exe 'edit' stdpath('config').'/init.vim'
在本節中,我們將說明此檔案中可以指定的各種命令。這將為您提供有關如何設定您自己的偏好的提示。但並非所有內容都會被解釋。請使用「:help」命令來尋找更多資訊。
set backup
這會告訴 Vim 在覆寫檔案時保留檔案的備份副本。備份檔案的名稱會與原始檔案相同,並加上「~」。請參閱 07.4
set history=50
在歷史記錄中保留 50 個命令和 50 個搜尋模式。如果您想要記住較少或較多行,請使用其他數字。
map Q gq
這定義了一個按鍵映射。下一節會詳細介紹。這會將「Q」命令定義為使用「gq」運算子進行格式化。否則,「Q」命令會重複上次記錄的暫存器。
vnoremap _g y:exe "grep /" .. escape(@", '\\/') .. "/ *.c *.h"<CR>
此映射會複製視覺選取的文字,並在 C 檔案中搜尋它。這是一個複雜的映射。您可以看到,映射可以用來執行相當複雜的事情。不過,它只是一系列像您輸入的命令一樣執行的命令。
vimrc-filetype
filetype plugin indent on
這會開啟三個非常聰明的機制:1. 檔案類型偵測。每當您開始編輯檔案時,Vim 都會嘗試找出這是一個什麼類型的檔案。當您編輯「main.c」時,Vim 會看到「.c」擴充功能,並將其識別為「c」檔案類型。當您編輯以「#!/bin/sh」開頭的檔案時,Vim 會將其識別為「sh」檔案類型。檔案類型偵測會用於語法高亮和其他兩個項目。請參閱 filetypes
2. 使用檔案類型外掛程式檔案。許多不同的檔案類型會使用不同的選項進行編輯。例如,當您編輯「c」檔案時,設定 'cindent' 選項以自動縮排行會非常有用。這些常用的選項設定包含在 Vim 的檔案類型外掛程式中。您也可以新增自己的外掛程式,請參閱 write-filetype-plugin
3. 使用縮排檔案。編輯程式時,通常可以自動計算行的縮排。Vim 隨附許多檔案類型的這些縮排規則。請參閱 :filetype-indent-on'indentexpr'
restore-cursor last-position-jump
augroup RestoreCursor
  autocmd!
  autocmd BufReadPre * autocmd FileType <buffer> ++once
    \ let s:line = line("'\"")
    \ | if s:line >= 1 && s:line <= line("$") && &filetype !~# 'commit'
    \      && index(['xxd', 'gitrebase'], &filetype) == -1
    \ |   execute "normal! g`\""
    \ | endif
augroup END
另一個自動命令。這次它用於讀取任何檔案之後。它之後的複雜內容會檢查是否已定義「"」標記,如果已定義,則跳至該標記。它不會針對提交或重新設定基準訊息執行此操作,這些訊息可能與上次不同,並且當使用 xxd(1) 來篩選和編輯二進位檔案時,這些檔案會來回轉換輸入檔案,導致它們具有雙重性質。另請參閱 using-xxd
行開頭的反斜線用於從上一行繼續執行命令。這樣可以避免行變得非常長。請參閱 line-continuation。這僅適用於 Vim 腳本檔案,而不適用於在命令列中輸入命令時。
command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
          \ | wincmd p | diffthis
這會新增「:DiffOrig」命令。在修改過的緩衝區中使用此命令,以查看與其載入的檔案的差異。請參閱 diff:DiffOrig
set nolangremap
防止 langmap 選項應用於從映射產生的字元。如果設定 (預設),這可能會中斷外掛程式 (但它是向後相容的)。請參閱 'langremap'

05.3 簡單的映射

映射可讓您將一組 Vim 命令繫結至單一按鍵。例如,假設您需要用大括號將某些字詞括起來。換句話說,您需要將「amount」之類的字詞變更為「{amount}」。使用 :map 命令,您可以告訴 Vim F5 鍵執行這項工作。命令如下
:map <F5> i{<Esc>ea}<Esc>
注意: 輸入此命令時,您必須輸入 <F5>,方法是輸入四個字元。同樣地,<Esc> 並非透過按下 <Esc> 鍵輸入,而是透過輸入五個字元。閱讀手冊時請注意這種差異!
讓我們分解一下:<F5> F5 功能鍵。這是觸發按鍵,會在按下按鍵時執行命令。
i{<Esc> 插入 { 字元。<Esc> 鍵會結束插入模式。
e 移動到字詞結尾。
a}<Esc> 將 } 附加到字詞。
執行「:map」命令後,您所需要做的就是將游標放在第一個字元上並按下 F5,即可將 {} 放在字詞周圍。
在此範例中,觸發器是單一按鍵;它可以是任何字串。但是,當您使用現有的 Vim 命令時,該命令將不再可用。您最好避免這種情況。可以用於映射的一個按鍵是反斜線。由於您可能想要定義多個映射,請新增另一個字元。例如,您可以將「\p」映射為在字詞周圍新增括號,並將「\c」映射為新增大括號
:map \p i(<Esc>ea)<Esc>
:map \c i{<Esc>ea}<Esc>
您需要快速依序輸入 \ 和 p,以便 Vim 知道它們屬於一起。
「:map」命令 (不含引數) 會列出您目前的映射。至少是針對一般模式的映射。有關映射的詳細資訊,請參閱 40.1 節。

05.4 新增套件 add-package

您可以使用 :packadd 來依需求啟用套件。這適用於您只想偶爾啟用的外掛程式。若要啟用 example_package,請使用下列命令
packadd example_package
就這樣!現在您可以找到有關此外掛程式的說明
:help example_package
這有效,因為當 :packadd 載入外掛程式時,它也會將套件目錄新增至 'runtimepath',以便可以找到說明檔案。
套件是一組您可以新增至 Vim 的檔案。套件有兩種:選用和在啟動時自動載入。
您可以在網路上各個地方找到套件。它通常以封存檔或儲存庫的形式出現。對於封存檔,您可以執行下列步驟:1. 建立套件目錄
mkdir -p ~/.local/share/nvim/site/pack/fancy
「fancy」可以是您喜歡的任何名稱。請使用描述套件的名稱。2. 將封存檔解壓縮到該目錄中。這假設封存檔中的頂層目錄是「start」
cd ~/.local/share/nvim/site/pack/fancy
unzip /tmp/fancy.zip
如果封存檔配置不同,請確保您最終得到如下路徑
~/.local/share/nvim/site/pack/fancy/start/fancytext/plugin/fancy.vim
這裡「fancytext」是套件的名稱,它可以是任何其他名稱。
新增 nohlsearch 套件 nohlsearch-install
使用此命令載入外掛程式
packadd nohlsearch
'updatetime' 之後或進入 插入 模式後自動執行 :nohlsearch。因此,假設預設的更新時間,hlsearch 會在閒置 4 秒後暫停/關閉。
若要停用載入後的外掛程式效果
au! nohlsearch
有關套件的更多資訊,請參閱此處:packages

05.5 新增外掛程式 add-plugin plugin

Vim 的功能可以透過新增外掛程式來擴充。外掛程式只不過是一個 Vim 腳本檔案,會在 Vim 啟動時自動載入。您可以將外掛程式放入您的外掛程式目錄中,即可輕鬆新增外掛程式。
有兩種外掛程式
全域外掛程式:用於所有類型的檔案 檔案類型外掛程式:僅用於特定類型的檔案
將首先討論全域外掛程式,然後討論檔案類型外掛程式 add-filetype-plugin

全域外掛程式 standard-plugin

當您啟動 Vim 時,它會自動載入許多全域外掛程式。您不必為此執行任何動作。它們會新增大多數人想要使用的功能,但該功能是作為 Vim 腳本實作,而不是編譯到 Vim 中。您可以在說明索引中找到它們的清單 standard-plugin-list。另請參閱 load-plugins
add-global-plugin
您可以新增全域外掛程式來新增在使用 Vim 時始終存在的功能。新增全域外掛程式只有兩個步驟:1. 取得外掛程式的副本。2. 將其放入正確的目錄中。
取得全域外掛程式
您可以在哪裡找到外掛程式?
有些外掛程式始終會載入,您可以在 $VIMRUNTIME/plugin 目錄中看到它們。
有些外掛程式隨附於 Vim。您可以在 $VIMRUNTIME/macros 目錄及其子目錄以及 $VIM/vimfiles/pack/dist/opt/ 下找到它們。
從網路下載。在 https://www.vim.org 上有一個大型集合。
它們有時會發佈在 Vim 郵件清單中。
您可以自己編寫一個,請參閱 write-plugin
使用全域外掛程式
首先閱讀外掛程式本身中的文字,以檢查是否有任何特殊條件。然後將檔案複製到您的外掛程式目錄
系統外掛程式目錄
Unix ~/.local/share/nvim/site/plugin
Unix 的範例 (假設您還沒有外掛程式目錄)
mkdir -p ~/.local/share/nvim/site/plugin
cp /tmp/yourplugin.vim ~/.local/share/nvim/site/plugin
就這樣!現在您可以使用此外掛程式中定義的命令。
你最好將插件放置在 plugin/ 目錄下的子目錄中,而不是直接放在 plugin/ 目錄中,這樣可以更好地組織它們。例如,你可以將所有 Perl 插件放在 "~/.local/share/nvim/site/plugin/perl/*.vim" 中。

檔案類型插件 add-filetype-plugin ftplugins

Vim 發行版內建了一組用於不同檔案類型的插件,你可以使用此命令開始使用它們
:filetype plugin on
就是這樣!請參閱 vimrc-filetype
如果你發現你正在使用的檔案類型缺少插件,或者你找到了更好的插件,你可以新增它。新增檔案類型插件有兩個步驟:1. 取得插件的副本。2. 將其放入正確的目錄。
取得檔案類型插件
你可以在與全域插件相同的地方找到它們。請注意是否提到了檔案的類型,這樣你就可以知道該插件是全域的還是檔案類型專用的。 $VIMRUNTIME/macros 中的腳本是全域的,而檔案類型插件位於 $VIMRUNTIME/ftplugin 中。
使用檔案類型插件 ftplugin-name
你可以透過將檔案類型插件放入正確的目錄來新增它。此目錄的名稱與上面提到的全域插件的目錄相同,但最後一部分是 "ftplugin"。假設你找到了用於 "stuff" 檔案類型的插件,並且你正在使用 Unix 系統。那麼你可以將此檔案移動到 ftplugin 目錄中
mkdir -p ~/.local/share/nvim/site/ftplugin
mv thefile ~/.local/share/nvim/site/ftplugin/stuff.vim
如果該檔案已經存在,表示你已經有了一個用於 "stuff" 的插件。你可能需要檢查現有的插件是否與你正在新增的插件衝突。如果沒問題,你可以給新插件另一個名稱
mv thefile ~/.local/share/nvim/site/ftplugin/stuff_too.vim
底線符號用於分隔檔案類型名稱和其餘部分,其餘部分可以是任何內容。 如果你使用 "otherstuff.vim" 它將無法正常運作,它將被載入為 "otherstuff" 檔案類型。
檔案類型插件的通用名稱如下
ftplugin/<filetype>.vim
ftplugin/<filetype>_<name>.vim
ftplugin/<filetype>/<name>.vim
這裡 "<name>" 可以是你喜歡的任何名稱。以下是 Unix 系統中用於 "stuff" 檔案類型的範例
~/.local/share/nvim/site/ftplugin/stuff.vim
~/.local/share/nvim/site/ftplugin/stuff_def.vim
~/.local/share/nvim/site/ftplugin/stuff/header.vim
<filetype> 部分是插件要使用的檔案類型名稱。只有這種檔案類型的檔案才會使用插件中的設定。插件檔案的 <name> 部分並不重要,你可以使用它來為同一檔案類型新增多個插件。請注意,它必須以 ".vim" 或 ".lua" 結尾。
延伸閱讀:filetype-plugins 有關檔案類型插件的說明文件,以及如何避免映射造成問題的資訊。load-plugins 說明在啟動期間何時載入全域插件。ftplugin-overrule 說明如何覆蓋全域插件的設定。write-plugin 說明如何編寫插件腳本。plugin-details 提供有關使用插件的更多資訊,或當你的插件無法正常運作時的處理方式。new-filetype 說明如何偵測新的檔案類型。

05.6 新增說明檔案 add-local-help

如果你幸運的話,你安裝的插件也會附帶說明檔案。我們將說明如何安裝說明檔案,以便你可以輕鬆地找到新插件的說明。
假設有一個插件 ("my-plugin"),其說明檔案位於非標準位置(它通常位於名為 doc/ 的子資料夾中)。
首先,在 'runtimepath' 中的某個目錄中建立一個 "doc" 目錄。
:!mkdir -p ~/.local/share/nvim/site/doc
現在,將說明檔案複製到 "doc" 目錄
:!cp my-plugin/my-plugin-doc.txt ~/.local/share/nvim/site/doc
接下來是訣竅,它允許你跳轉到新說明檔案中的主題。使用 :helptags 命令產生本機標籤檔案
:helptags ~/.local/share/nvim/site/doc
當你執行以下操作時,你可以看到本機說明檔案的條目
:help local-additions
本機說明檔案的標題行會自動新增到此區段。在那裡你可以看到已新增哪些本機說明檔案,並透過標籤跳轉到它們。
有關編寫本機說明檔案,請參閱 write-local-help

05.7 選項視窗

如果你正在尋找可以執行你想要的操作的選項,你可以在此處的說明檔案中搜尋:options。另一種方法是使用此命令
:options
這會開啟一個新視窗,其中列出了帶有一行解釋的選項。這些選項按主題分組。將游標移動到主題上,然後按下 <Enter> 以跳轉到該主題。再次按下 <Enter> 以跳轉回。或者使用 CTRL-O
你可以變更選項的值。例如,移動到 "顯示文字" 主題。然後將游標向下移動到此行
set wrap nowrap
當你按下 <Enter> 時,該行會變更為
set nowrap wrap
該選項現在已關閉。
此行正上方是 'wrap' 選項的簡短描述。將游標向上移動一行,將其放置在此行中。現在按下 <Enter>,你會跳轉到 'wrap' 選項的完整說明。
對於採用數字或字串引數的選項,你可以編輯該值。然後按下 <Enter> 以套用新值。例如,將游標向上移動幾行到此行
set so=0
使用 "$" 將游標放置在零上。使用 "r5" 將其變更為五。然後按下 <Enter> 以套用新值。當你現在移動游標時,你會注意到文字會在到達邊界之前開始滾動。這就是 'scrolloff' 選項的作用,它指定滾動開始的視窗邊界偏移量。

05.8 常用選項

有很多選項。其中大多數你幾乎不會使用。這裡將提及一些更有用的選項。別忘了你可以使用 ":help" 命令,在選項名稱前後加上單引號,找到有關這些選項的更多說明。例如
:help 'wrap'
如果你弄亂了選項值,你可以將其設定回預設值,方法是在選項名稱後加上一個 & 符號 (&)。範例
:set iskeyword&

不換行

Vim 通常會換行長行,以便你可以看到所有文字。有時最好讓文字繼續在視窗的右側。然後你需要左右滾動文字才能看到長行的所有內容。使用此命令關閉換行
:set nowrap
當你移動到未顯示的文字時,Vim 會自動滾動文字。若要查看十個字元的上下文,請執行此操作
:set sidescroll=10
這不會變更檔案中的文字,只會變更其顯示方式。

換行移動命令

大多數移動命令都會在行首和行尾停止移動。你可以使用 'whichwrap' 選項變更此行為。這會將其設定為預設值
:set whichwrap=b,s
這允許 <BS> 鍵在行的第一個位置使用時,將游標移動到前一行的末尾。而 <Space> 鍵會將游標從一行的末尾移動到下一行的開頭。
若要允許游標鍵 <Left><Right> 也換行,請使用此命令
:set whichwrap=b,s,<,>
這仍然僅適用於一般模式。若要讓 <Left><Right> 在插入模式中也執行此操作
:set whichwrap=b,s,<,>,[,]
還可以新增其他幾個標誌,請參閱 'whichwrap'

檢視 Tab 鍵

當檔案中有 Tab 鍵時,你無法看到它們的位置。若要使其可見
:set list
現在每個 Tab 鍵都顯示為 ^I。並且在每行的末尾都會顯示一個 $ 符號,以便你可以發現否則會被忽略的尾隨空格。缺點是當檔案中有很多 Tab 鍵時,這看起來會很醜。如果你有彩色終端機,或正在使用 GUI,Vim 可以將空格和 Tab 鍵顯示為反白字元。使用 'listchars' 選項
:set listchars=tab:>-,trail:-
現在每個 Tab 鍵都將顯示為 ">---"(帶有或多或少的 "-"),而尾隨空格將顯示為 "-"。看起來好多了,不是嗎?

關鍵字

'iskeyword' 選項指定哪些字元可以出現在單字中
:set iskeyword
iskeyword=@,48-57,_,192-255
"@" 代表所有字母字元。"48-57" 代表 ASCII 字元 48 到 57,也就是數字 0 到 9。"192-255" 是可列印的拉丁字元。有時你會想要在關鍵字中包含破折號,以便 "w" 等命令將 "upper-case" 視為一個單字。你可以這樣做
:set iskeyword+=-
:set iskeyword
iskeyword=@,48-57,_,192-255,-
如果你查看新值,你會看到 Vim 為你新增了一個逗號。若要移除字元,請使用 "-="。例如,若要移除底線
:set iskeyword-=_
:set iskeyword
iskeyword=@,48-57,192-255,-
這次逗號會自動刪除。

訊息空間

當 Vim 啟動時,底部有一行用於顯示訊息。當訊息很長時,它會被截斷,因此你只能看到一部分,或文字會滾動,你必須按下 <Enter> 才能繼續。你可以將 'cmdheight' 選項設定為用於訊息的行數。範例
:set cmdheight=3
這確實意味著編輯文字的空間會變少,因此這是一種妥協。
下一章:usr_06.txt 使用語法反白顯示
版權:請參閱 manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
主要
命令索引
快速參考