Nvim :help
页面,生成 自 源 使用 tree-sitter-vimdoc 解析器。
:make {arguments}如果生成了错误,它们将被捕获,并且编辑器会将你定位在第一个错误发生的位置。看看一个示例“:make”会话。(典型的“:make”会话会生成更多错误,但愚蠢的错误更少。)在输入“:make”后,屏幕看起来像这样
<Enter>
时,Vim 会显示文件“main.c”,光标定位在第 6 行,即第一行出现错误的代码行。你无需指定文件或行号,Vim 通过查看错误信息就知道了要跳转到哪里。+---------------------------------------------------+ |int main() | |{ | | int i=3; | cursor -> | do_sub("foo"); | | ++i; | | return (0); | |} | |} | | ~ | |(3 of 12): too many arguments to function 'do_sub' | +---------------------------------------------------+
:cnextVim 跳转到第 10 行,即文件中的最后一行,该行存在多余的'}'。如果空间不足,Vim 会缩短错误信息。要查看完整信息,请使用
:cc你可以使用“:clist”命令查看所有错误信息的概览。输出看起来像这样
:clist
:clist!
:cprevious在错误列表中移动的其他命令
:set makeprg=nmake你也可以在此选项中包含参数。特殊字符需要用反斜杠转义。示例
:set makeprg=nmake\ -f\ project.mak你可以在命令规范中包含特殊的 Vim 关键字。% 字符展开为当前文件的名称。因此,如果你执行以下命令
:set makeprg=make\ %:S当你正在编辑 main.c 时,“:make”会执行以下命令
make main.c这不太有用,因此你需要稍微调整一下命令并使用:r(根)修饰符
:set makeprg=make\ %:r:S.o现在执行的命令如下
make main.o有关这些修饰符的更多信息,请参见: filename-modifiers.
:colder然后使用“:clist”和“:cc
{nr}
”跳转到包含警告信息的位置。要向前跳转到下一个错误列表,请使用:cnewerVim 会记住十个错误列表。
:compiler msvc这将找到“msvc”编译器的 Vim 脚本并设置相应的选项。你可以编写自己的编译器文件。参见 write-compiler-plugin.
:cfile {filename}跳转到错误的功能与“:make”命令相同。
:set cindent shiftwidth=4启用此选项后,当你输入诸如“if (x)”之类的内容时,下一行将自动缩进一个额外的级别。
==这会缩进当前代码行。与所有运算符一样,可以使用三种方法。在 Visual 模式下,“=”会缩进选定的代码行。一个有用的文本对象是“a{”。这会选择当前的 {} 代码块。因此,要重新缩进光标所在的代码块,请使用以下命令
=a{如果你有格式极其糟糕的代码,你可以使用以下命令重新缩进整个文件
gg=G但是,不要在手动精心缩进的文件中执行此操作。自动缩进做得很好,但在某些情况下,你可能希望覆盖它。
:set cinoptions+={2这些项目很多。参见 cinoptions-values.
:filetype indent on实际上,这不仅仅是在 C 文件中开启 'cindent'。首先,它会启用检测文件类型的功能。这与用于语法高亮的相同功能。当文件类型已知时,Vim 会为此类型的文件搜索缩进文件。Vim 发行版包含许多针对各种编程语言的缩进文件。然后,此缩进文件将为专门针对此文件的自动缩进做好准备。
:filetype indent off如果你不喜欢针对特定类型文件的缩进,可以使用以下方法避免它。创建一个仅包含以下一行代码的文件
:let b:did_indent = 1现在你需要将此代码写入具有特定名称的文件
{directory}
/indent/{filetype}.vim{filetype}
是文件类型的名称,例如“cpp”或“java”。你可以使用以下命令查看 Vim 检测到的确切名称:set filetype在此文件中,输出为
{filetype}
,你需要使用“help”。对于 {directory}
部分,你需要使用你的运行时目录。查看以下命令的输出set runtimepath现在使用第一个项目,即第一个逗号之前的名称。因此,如果输出看起来像这样
{directory}
。然后,生成的文件名是CTRL-D
和 CTRL-T 命令。例如,您正在键入一个应该像这样显示的 shell 脚本:set autoindent shiftwidth=3您首先键入第一行,
<Enter>
和第二行的开头CTRL-T
。结果CTRL-T
命令会在您位于行的任何位置时,将缩进增加一个 'shiftwidth'。您继续键入第二行,<Enter>
和第三行。这次缩进是正确的。然后 <Enter>
和最后一行。现在您有以下内容CTRL-D
。这会删除一个 'shiftwidth' 的缩进量,无论您位于行的什么位置。当您处于普通模式时,您可以使用 ">>" 和 "<<" 命令来移动行。">" 和 "<" 是运算符,因此您可以通过三种通常的方式来指定要缩进的行。一个有用的组合是>i{这会将当前块内(在 {} 中)的行的缩进量增加一个。{ 和 } 行本身保持不变。">a{" 会包含它们。在这个例子中,光标位于 "printf" 上
<Tab>
是 8 个空格,而您想使用 4 个空格的缩进,因此您不能使用 <Tab>
字符来进行缩进。有两种方法可以处理这种情况<Tab>
和空格字符的组合。由于一个 <Tab>
会代替 8 个空格,因此您在文件中使用的字符更少。插入一个 <Tab>
比 8 个空格更快。退格键的速度也更快。<Tab>
键看起来和感觉起来就像选项卡设置在 'softtabstop' 的值一样,但实际上使用的是选项卡和空格的组合。执行以下命令后,每次您按 <Tab>
键时,光标都会移动到下一个 4 列边界:set softtabstop=4当您从第一列开始并按
<Tab>
时,您会在文本中插入 4 个空格。第二次,Vim 会删除这 4 个空格并插入一个 <Tab>
(因此您会移动到第 8 列)。因此 Vim 会尽可能多地使用 <Tab>
,然后用空格填充空白。当您退格时,操作方式相反。一个 <BS>
将始终删除用 'softtabstop' 指定的数量。然后使用 <Tab>
,尽可能多地使用,最后用空格填充空白。下面显示了按 <Tab>
几次,然后使用 <BS>
的情况。一个 "." 代表空格,"------->" 代表一个 <Tab>
。<Tab>
.... <Tab>
<Tab>
-------> <Tab>
<Tab>
<Tab>
------->.... <Tab>
<Tab>
<Tab>
<BS>
-------> <Tab>
<Tab>
<Tab>
<BS>
<BS>
....<Tab>
使用 'shiftwidth',并在键入第一个非空白字符之后使用真正的 <Tab>
。但是,<BS>
的工作方式与 'softtabstop' 不同。:set expandtab当此选项被设置时,
<Tab>
键会插入一系列空格。因此,您会获得与插入 <Tab>
字符相同数量的空白,但文件中没有真正的 <Tab>
字符。退格键会自行删除每个空格。因此,在键入一个 <Tab>
后,您必须按 <BS>
键最多 8 次才能撤消它。如果您在缩进处,按 CTRL-D
会快得多。:set expandtab :%retab现在 Vim 会将所有缩进都更改为使用空格而不是选项卡。但是,所有在非空白字符之后出现的选项卡都会保留。如果您希望将这些选项卡也转换,请添加一个 !
:%retab!这有点危险,因为它也会更改字符串内的选项卡。要检查是否存在这些选项卡,您可以使用以下命令
/"[^"\t]*\t[^"]*"建议不要在字符串内使用硬选项卡。将它们替换为 "\t" 以避免出现问题。
:set noexpandtab :%retab!
/*
* This is a test
* of the text formatting.
*/
然后您让 Vim 格式化它,方法是将光标定位在注释的开头并键入gq]/"gq" 是格式化文本的运算符。"]/" 是将您带到注释末尾的动作。结果是
/*
* This is a test of the text formatting.
*/
请注意,Vim 正确地处理了每行的开头。另一种方法是在 Visual 模式下选择要格式化的文本,然后键入 "gq"。/*
* This is a test of the text formatting.
*
*/
Vim 自动为您插入了一个星号和一个空格。现在您可以键入注释文本。当注释的长度超过 'textwidth' 时,Vim 会换行。同样,星号会自动插入/*
* This is a test of the text formatting.
* Typing a lot of text here will make Vim
* break
*/
为了使此功能正常工作,'formatoptions' 中必须存在一些标志<Enter>
时插入星号 o 在普通模式下使用 "o" 或 "O" 时插入星号 c 根据 'textwidth' 换行注释文本:set comments=://冒号将项目的标志与识别注释的文本分隔开。 'comments' 中项目的通用形式是
{flags}
:{text}{flags}
部分可以为空,在本例中就是如此。这些项目中的几个可以串联在一起,用逗号分隔。这允许同时识别不同类型的注释。例如,让我们编辑一封电子邮件。回复时,其他人写的文本前面会加上 ">" 和 "!" 字符。此命令将起作用:set comments=n:>,n:!有两个项目,一个用于以 ">" 开头的注释,一个用于以 "!" 开头的注释。两者都使用标志 "n"。这意味着这些注释是嵌套的。因此,以 ">" 开头的行之后可能还有另一个注释。这允许格式化如下所示的消息
:set comments=s1:/*,mb:*,ex:*/开头由 "s1:/*" 定义。 "s" 表示三部分注释的开头。冒号将标志与识别注释的文本分隔开:"/*"。有一个标志:"1"。这告诉 Vim 中间部分的偏移量为一个空格。中间部分 "mb:*" 以 "m" 开头,表示它是中间部分。 "b" 标志意味着文本之后必须有一个空格。否则 Vim 会将类似 "*pointer" 的文本也视为注释的中间部分。结尾部分 "ex:*/" 有 "e" 用于识别。 "x" 标志具有特殊含义。这意味着在 Vim 自动插入一个星号后,键入 / 会删除多余的空格。