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
另一个 autocommand。这次它在读取任何文件后使用。它后面的复杂内容会检查 '" 标记是否已定义,如果已定义,则跳到它。它不会对提交或 rebase 消息这样做,因为它们可能与上次不同,当使用 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。因此,假设默认的 updatetime,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" 中。
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 添加帮助文件 添加本地帮助

如果您幸运的话,您安装的插件也附带帮助文件。我们将解释如何安装帮助文件,以便您可以轻松地找到新插件的帮助信息。
让我们假设一个插件(“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'.

查看制表符

当文件中存在制表符时,您无法看到它们的位置。要使它们可见
:set list
现在每个制表符都显示为 ^I。在每行的末尾显示一个 $,以便您可以发现原本无法察觉的尾随空格。缺点是,当文件中有很多制表符时,这看起来很丑陋。如果您拥有彩色终端,或使用 GUI,Vim 可以将空格和制表符显示为突出显示的字符。使用 'listchars' 选项
:set listchars=tab:>-,trail:-
现在每个制表符都将显示为“>---”(带有或多或少的“-”)而尾随空白将显示为“-”。看起来好多了,不是吗?

关键字

'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
主要
命令索引
快速参考