📄 usr_30.cnx
字号:
*usr_30.txt* For Vim version 6.3. 最近更新:2004年6月 VIM 用户手册 - by Bram Moolenaar (译者:wandys http://vimcdoc.sf.net) 编辑程序Vim 有很多帮助编写程序代码的命令。例如:直接在 Vim 内编译程序并跳转到出错位置;根据文件类型自动设定缩进。|30.1| 编译|30.2| C 文件缩进|30.3| 自动缩进|30.4| 其它缩进|30.5| 制表符和空格|30.6| 排列注释格式 下一章:|usr_31.txt| 使用 GUI 前一章:|usr_29.txt| 在代码间移动 目录:|usr_toc.txt|==============================================================================*30.1* 编译Vim 有个 "quickfix" 命令集。通过这些命令,你可在 Vim 内编译程序并能直接跳转到出错位置进行修正。你可以接着重新编译并做修正,知道不再出错为止。下面的命令运行 "make" (包括你所给出的参数)程序并捕捉其运行结果: > :make {arguments}如果有错误产生那么它们将被捕获到。而且光标会停留在出现第一个错误的地方。 让我们看一个 "make" 的例子。当输入 ":make" 后,屏幕出现如下的结果: :!make | &tee /tmp/vim215953.err ~ gcc -g -Wall -o prog main.c sub.c ~ main.c: In function 'main': ~ main.c:6: too many arguments to function 'do_sub' ~ main.c: At top level: ~ main.c:10: parse error before '}' ~ make: *** [prog] Error 1 ~ 2 returned ~ "main.c" 11L, 111C ~ (3 of 6): too many arguments to function 'do_sub' ~ Hit ENTER or type command to continue ~你会看到编译 "main.c" 文件(见下)出现的错误。按一下 <Enter>,Vim 会显示文件 "main.c" 并将光标移到第一个出现错误行。你无需指定文件名或具体的行号,Vim 会根据出错信息指定相关位置。 +---------------------------------------------------+ |int main() | |{ | | int i=3; | cursor -> | do_sub("foo"); | | ++i; | | return (0); | |} | |} | | ~ | |(3 of 12): too many arguments to function 'do_sub' | +---------------------------------------------------+这个命令将光标移到下一个错误所在的行: > :cnext光标跳转到文件的最后一行(第十行),那里有一个多余的 '}'。 有时由于空间不够,Vim 会缩短出错信息。如果你想查看详细信息,可执行: > :cc你可以通过":clist"命令得到一个有关所有出错信息的概览。输出的内容如下所示: > :clist< 3 main.c: 6:too many arguments to function 'do_sub' ~ 5 main.c: 10:parse error before '}' ~只有那些含有文件名或行数的错误信息会被显示。Vim 假定你对其它的信息不敢兴趣。有时你也许需要查看那些并不含文件名或行数的信息(比如连接器输出的有关未定义函数的错误信息)。要查看所有信息,在命令后加上 "!" 就可以:> :clist!< 1 gcc -g -Wall -o prog main.c sub.c ~ 2 main.c: In function 'main': ~ 3 main.c:6: too many arguments to function 'do_sub' ~ 4 main.c: At top level: ~ 5 main.c:10: parse error before '}' ~ 6 make: *** [prog] Error 1 ~Vim 会高亮显示当前错误。如果你想回到上一个错误,执行:> :cprevious以下是一些其它的跳转命令: :cfirst 到第一处错误 :clast 到最后一处错误 :cc 3 到第三处错误指 定 编 译 器通过 'makeprg' 选项可以指定 ":make" 命令启动的程序名。通常它被设定为 "make"。但 Visual C++ 的用户需要将它设定为"nmake":> :set makeprg=nmake你可以对这个选项指定参数。如有特殊字符,请用 '\' 来屏蔽。比如:> :set makeprg=nmake\ -f\ project.mak你还可以使用特殊的 Vim 内部关键字。比如用 '%' 来代替当前文件名: > :set makeprg=make\ %这样,当你编辑文件"main.c"时,运行":make"命令会运行下面的程序:> make main.c你还可以利用 :r (root) 修饰符来修改 make 的参数,例如:> :set makeprg=make\ %:r.o现在运行的程序就成了:> make main.o有关修饰符的更多信息,请查看这里: |filename-modifiers|.旧 的 出 错 信 息 列 表假设你用 ":make" 编译了一个程序。其中的一个文件里有个警告(warning)信息而另一个文件中有一个出错(error)信息。你修改了这个错误,并再次运行":make"以参看它是否已被纠正。现在你想查看刚才的那个警告信息。但由于含有警告的那个文件并没有被重新编译,你无法在当前出错信息列表中看到原来的警告信息。在这种情况下,你可以用下面的命令来查看上一个出错信息列表:> :colder然后你可以通过 ":clist" 和 ":cc {nr}" 命令来跳转到出现警告的地方。 要查看下一个出错列表:> :cnewerVim 可以记住十个出错信息列表。更 换 编 译 器要做到这一点,你需要告诉 Vim 所使用编译器产生的错误信息格式。这可以通过 'errorformat' 来设定。这个选项几乎可以配合任意一个编译器的使用,但它的具体配置却很复杂。请在这里查看详细解释:|errorformat|。你可能会用到多种不同的编译器。每次都设定 'makeprg' 选项,尤其是 'errorformat'选项是很繁杂的。为此,Vim 提供一个简便的方法。比如:要使用微软的 Visual C++编译器:> :compiler msvc这个命令会找到适合 "msvc" 编译器的 Vim 脚本文件并设定相关选项。 你可以为编译器编写自己的脚本文件。请参考 |write-compiler-plugin|。输 出 重 定 向"make"_命令会将运行结果重定向到一个错误文件中。具体的工作方式取决于很多方面,比如 'shell' 选项。如果你的 ":make" 命令不能捕获输出,请检查 'makeef' 和'shellpipe' 选项。选项 'shellquote' 和 'shellxquote' 可能也会起作用。 如果你无法利用 ":make" 命令重定向输出,一种变通的方法是在另一个窗口编译程序并将输出重定向到一个文件中。然后你可在 Vim 中查看此文件:> :cfile {filename}这样,你就可以像运行 ":make" 命令那样跳转到出错的地方。==============================================================================*30.2* C 文件缩进合理的缩进会使程序更容易理解。Vim 提供了多种方法来简化这项工作。 要对 C 程序缩进,请设定 'cindent' 选项。Vim 相当地了解 C 程序,它会尽可能地为你自动缩进。通过 'shiftwidth' 选项,你可以指定下一级的缩进空格数。4 个空格的效果很好。用一个 ":set" 命令就可做到:> :set cindent shiftwidth=4设定了这一选项之后,当你输入了一个语句,比如 "if (x)" 后,下一行会自动向下一级缩进。 if (flag) 自动缩进 ---> do_the_work(); 自动取消缩进 <-- if (other_flag) { 自动缩进 ---> do_file(); 保持缩进 do_some_more(); 自动取消缩进 <-- }当你在大括号 ({}) 内输入时,语句会在开始处缩进,而在结束处取消缩进。每次输入'}'后都会取消缩进,因为 Vim 不知道你下一步将要输入什么。自动缩进还能帮助你提前发现代码中的错误。比如当你输入了一个'}'后,如果发现比预想中多的缩进,那可能缺少了一个 '}'。请用 "%" 命令查找与你输入的 '}' 相匹配的 '}'。 缺少 ')' 和 ';' 同样会引起额外的缩进。当你发现比预料中多的空格时,最好检查一下之前的代码。当你的代码没有被正确地排列,或者你插入或删除了某些行时,你需要重新进行代码缩进。操作符 "=" 能完成这项功能,最简单的格式是:> ==这会缩进当前行。像其它的操作符一样,有三种方式使用它。可视模式下,"=" 缩进选中的行。一个有用的文本对象是 "a{"。它会选中当前 {} 区。这样,要重新缩进光标所在代码块:> =a{你还可以重新缩进整个文件:> gg=G但是,不要对已经手工缩进的文件使用此命令。自动缩进的确做得很好,但在某些情况下你也许确实需要手工缩进。设 定 缩 进 风 格不同的人有不同的缩进风格。在默认情况下,Vim 采用了 90% 的程序员都使用的一种方式并能很好地完成工作。但是,如果你想使用其它的风格,你可以通过 'cinoptions' 选项来设定。 'cinoptions' 默认为空,Vim 会使用默认风格。你可以在你希望改变的地方添加相应的项目。例如,要使大括号的缩进如下所示: if (flag) ~ { ~ i = 8; ~ j = 0; ~ } ~请使用这个命令:> :set cinoptions+={2还有很多其它的项目可供使用。请参考 |cinoptions-values|。==============================================================================*30.3* 自动缩进你无需每次编辑 C 文件时都手工设定 'cindent' 选项。通过下面的命令你可以使它自动化: > :filetype indent on实际上,它不仅为 C 文件打开了 'cindent' 选项。首先,它会使 Vim 自动检查文件类型。语法高亮同样需要此功能。 一旦文件类型被识别,Vim 会为此类型的文件查找相关的缩进文件。(Vim 的发行中包含了适合多种不同编程语言的缩进文件。)该缩进文件将会被用来缩进当前文件。如果你不喜欢这项功能,可以将它关闭:> :filetype indent off如果你不想为某种特定类型的文件进行缩进,你可以这样做:首先建一个只包括下行的文件:> :let b:did_indent = 1然后将其重命名为: {directory}/indent/{filetype}.vim{filetype}是文件类型的名字,比如 "cpp" 或 "java"。你可以用下面的命令来得到 Vim识别到的文件类型名:> :set filetype对本文件,输出会是: filetype=help ~
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -