第六部分 工具
第16章 通过ctags建立索引,并用其浏览源代码(实测不好用)
-
ctags
的使用 -
配置
vim
使用ctags
- 通过
:set tags?
查看tags选项的默认配置为tags=./tags,tags
,即Vim会在当前文件所在目录以及工作目录中查找标签文件 - 我们可以在工程的每一个子目录中都建立一个标签文件,或者为了简单起见,只在工程的根目录中维护一个全局的标签文件即可。
- 之后按
<C-]>
可以到达定义,按<C-t>
可以回来
- 之后按
-
ctags
的更新
- ② 每次保存缓冲区时自动更新:使用Vim的自动命令功能,它允许我们在某个事件发生时调用一条命令,这些事件包括缓冲区的创建、打开或者保存等,
:autocmd BufWritePost * call system("ctags -R")
会在每次保存文件时自动调用ctags,这样每当我们保存文件的改动时,都会对整个代码库进行更新索引操作。 - 但是编辑器之外的改动还是没办法及时更新,维护这个标签文件实在麻烦, 所以这个ctags我感觉还是比较鸡肋
第 17 章 编译代码,并通过Quickfix列表浏览错误信息
-
Quickfix 列表会维护一组由文件名、行号、列号(可选)与消息组成的注释定位信息。
-
⭐️ 不用离开Vim也能编译代码
-
Quickfix列表
-
每一项记录可以是在执行
:make
时由编译器产生的出错信息,也可以是在执行:grep
时找到的查找匹配。 -
浏览Quickfix列表
命令 用途 :cnext
跳转到下一项 :cprev
跳转到上一项 :cfirst
跳转到第一项 :clast
跳转到最后一项 :cnfile
跳转到下一个文件中的第一项 :cpfile
跳转到上一个文件中的最后一项 :cc N
跳转到第n项 :copen
打开quickfix窗口 :cclose
关闭quickfix窗口 :cnext
和:cprev
都可以在其前面附加执行次数- quickfix 窗口也有其特别之处。如果我们将光标置于某条列表项并按
<CR>
键的话,Vim 将会打开相应的文件,并将光标置于包含匹配结果的那一行上。文件会显示在 quickfix 窗口上方的窗口中,但如果该文件已经在当前标签页的某个窗口中打开了,那么就会复用该缓冲区。 - 通过运行
:colder
命令,我们可以回溯quickfix 列表之前的某个版本(Vim 会保存最近的 10 个列表)。为了从旧的quickfix 列表回到比较新的列表,我们可以运行:cnewer
。请注意,:colder
与:cnewer
命令也都支持次数,这意味着可以分别让这两个命令运行指定的次数 - 在运行
:colder
或者:cnewer
之后打开quickfix窗口,状态栏将会显示刚刚用于创建此列表的命令。 - 可以将 :colder与 :cnewer命令想象成针对quickfix列表的撤销(undo)与重做(redo)命令。就是说,我们可以试着执行其他重新生成 quickfix 列表的命令,而不必担心后果
-
位置列表
-
对于每一条用于填充 quickfix 列表的命令,都有一条对应的命令(加了个l前缀),把结果保存到位置列表,如
:make
、:grep
以及:vimgrep
会使用 quickfix 列表,类似地,:lmake
、:lgrep
以及:lvimgrep
将使用位置列表 -
区别在于:quickfix列表是全局的,但是每个窗口都对应一个位置列表。
-
-
定制外部编译器
-
makeprg
选项允许我们指定运行:make
时所调用的程序。通过以下命令,我们可以指示Vim运行nodelint:➾:setlocal makeprg=NODE_disABLE_COLORS=1\ nodelint\ %
这相当于在shell中执行了
export NODE_disABLE_COLORS=1 nodelint ~/quickfix/fizzbuzz.js
-
让Vim解析不同外部编译器的报错信息,使得它可以填充quickfix列表
errorformat
选项允许我们指导 Vim 如何解析由:make
产生的输出结果,配起来比较麻烦,详见:h errorformat
-
⭐️ 可以将
makeprg
和errorformat
保存到某个文件里,然后利用:compiler
命令来激活它 -
在Vim的术语中,编译器是指任何可以针对我们的文档进行处理,并生成错误或警告列表的外部程序。而
:make
命令只负责调用外部编译器,并对其输出进行解析,以此构建一个可供浏览的quickfix列表,因此编译器也可以是代码检查或者是什么转换器之类的
-
第18章 通过grep,vimgrep以及其他工具对整个工程进行查找
-
Vim的
:grep
命令给外部 grep(或类似 grep的)程序提供了一层封装 -
在命令行执行
grep
-
在Vim内部调用grep
-
定制
:grep
-
使用
:vimgrep
- 允许我们使用Vim自带的正则表达式引擎,实现跨文件的查找功能。
- 语法:
:vim[grep][!] /{pattern}/[g][j] {file} ...
- 一行中有多处匹配时,默认为整行文本创建一项记录,
g
标志位可以为一行中的每处匹配创建一条记录 - 设置
j
标志位使得只更新quickfix列表,但不跳到第一处匹配 {file}
可接受的参数与:args
命令的相同(文件名、通配符、反引号表达式以及这些内容的组合),还可以使用##
,它将被扩展成参数列表中的所有文件- ⚠️
:vimgrep
命令与Vim查找历史之间的关联程度并不高。因此,如果我们想重用最近一次的查找模式,不能空着,必须通过<C-r>/
将其直接粘贴至查找域才行。
第 19 章 自动补全
-
Vim的自动补全可以在插入模式下被触发,Vim首先会根据当前编辑会话内所有缓冲区的内容建立一份补全列表,然后再检测光标左侧的字符,看能否找到单词的一部分。如果找到的话,会用这个未完成的单词对补全列表进行过滤,所有不是以它开头的内容都将被过滤掉。最终的补全列表将以菜单形式出现,供我们选择。
-
大小写敏感问题:
-
触发Vim自动补全的方式
命令 补全类型 <C-n>
普通关键字 <C-x><C-n>
当前缓冲区关键字 <C-x><C-i>
包含文件关键字 <C-x><C-]>
标签文件关键字 <C-x><C-k>
字典查找 <C-x><C-l>
整行补全 <C-x><C-f>
文件名补全 <C-x><C-o>
全能(Omni)补全 -
- 详见
:h popumenu-completion
按键操作 作用 <C-n>
使用来自补全列表的下一个匹配项(next匹配项) <C-p>
使用来自补全列表的上一个匹配项(prevIoUs匹配项) <Down>
选择来自补全列表的下一个匹配项 <Up>
选择来自补全列表的上一个匹配项 <C-y>
确认使用当前选中的匹配项(yes) <C-e>
还原最早输入的文本(从自动补全中exit) <C-h>
/<BS>
从当前匹配项中删除一个字符 <C-l>
从当前匹配项中增加一个字符 {char}
中止自动补全并插入字符 {char}
- 详见
-
包含文件补全(
<C-x><C-i>
) -
普通关键字补全(
<C-n>
) -
字典单词自动补全(
<C-x><C-k>
) -
整行文本补全
<C-x><C-l>
根据当前缓冲区的行进行行补充
-
全能补全
-
Vim实现的intellsense 功能,它将提供一份为光标所处的上下文量身定做的补全建议列表
-
通过
<C-x><C-o>
命令进行触发 -
essential.vim set nocompatible filetype plugin on
-
必须安装一个为所用语言实现了全能补全功能的插件。Vim的发行版本身就支持十几种语言,包括HTML、CSS、JavaScript、PHP以及sql。可以通过
:h compl-omni-filetypes
找到完整的列表。 -
如果你对基于某个特定语言的全能补全功能不满意,就到官网上淘个新插件,或者干脆自己写一个。要了解如何撰写全能补全插件,你可以查阅
:h complete-functions
-
第 20 章 利用Vim的拼写检查器,查找并更正拼写错误
-
Vim的拼写检查器可以帮助人们更容易地查找并更正拼写错误
-
:set spell
启用Vim内置的拼写检查器- 缺省情况下,Vim 将用包含英文单词的字典进行拼写检查,拼写有误的单词下方会显示一条红色虚线
-
光标位于某个拼错单词之上时,可以通过
z=
命令来获取Vim提供的更正建议列表 -
常用命令
命令 用途 ]s
跳到下一处拼写错误 [s
跳到上一处拼写错误 z=
为当前单词提供更正建议 zg
把当前单词添加到拼写文件中 zw
把当前单词从拼写文件中删除 zug
撤销对当前单词的 zg
或zw
命令 -
配置
spelllang
选项,可以我们更改缺省的拼写字典 -
维护专用词典
-
更正拼写错误
第 21 章 接下来干什么
-
定制自己的
vimrc
-
⭐️ Vim的选项
:h option-list
-
可以使用
:set
命令来改变 -
有些Vim设置项的参数要用到字符串或者数字
- 例如
:set tabstop=2
- 例如
-
可以用一条 set 语句设置多组选项
- 例如
:set ts=2 sts=2 sw=2 et
- 例如
-
大多数Vim选项都有其简写形式
-
由
:setlocal
命令所触发的改动,只会影响当前窗口或者缓冲区(除非该选项只能被设置为全局性的)
-
-
我们可以将定制化的选项写入文件,加以保存。此后,我们可以通过
:source{file}
命令,将指定{file}
中的设置项应用于当前的编辑会话 -
为特定类型的文件应用个性化设置
-
少量的设置可以在vimrc中通过
autocmd
实现,例如if has("autocmd") filetype on autocmd FileType ruby setlocal ts=2 sts=2 sw=2 et autocmd FileType javascript setlocal ts=4 sts=4 sw=4 noet autocmd FileType javascript compiler nodelint endif
autocmd
语句的检测机制将指示Vim监听某一类事件,一旦该事件发生,Vim将执行指定的命令。- 在本例中,我们将监听FileType事件,它会在Vim检测出当前文件类型时被触发。
-
大量的设置最好使用**文件类型插件(ftplugin)**来为不同文件类型进行定制。
-
例如
customizations/ftplugin/javascript.vim setlocal ts=4 sts=4 sw=4 noet compiler nodelint
-
详见
:h ftplugin-name
-
要保证
filetype plugin on
是开启的
-
-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。