vimbook-OPL(21-23)
Contents
vimbook-OPL(21-23)
CH21 窗口和会话
21.1 更多窗口命令
CTRL-Wt
切换到顶部窗口;CTRL-Wb
切换到底部窗口;CTRL-Wp
切换到前一个窗口;[count]CTRL-Ww
切换下一个窗口,如果指定了 count 表示切换到第 n 个窗口;[count]CTRL-WW
切换到上一个窗口,如果指定了 count 表示切换到第 n 个窗口;[count]CTRL-Wr
将窗口向下回绕一次,如果指定了 count 表示回绕 n 次;[count]CTRL-WR
向上回绕窗口;CTRL-Wx
将当前窗口与下一个窗口交换位置,如果窗口处于底部,就与上一个窗口交换位置;
:wall
写入所有窗口,:qall
退出所有窗口,:waqll
保存并退出所有窗口;
21.2 buffer 添加、删除、卸载
当编辑一个文件时,文件就被添加到缓冲列表。调用 :badd [+lnum] file
将文件手动添加到缓冲列表,此时文件并没有加载到内存,如果指定了 +lnum 参数,则当第一次进入缓冲时光标会自动定位到那一行。
调用以下命令均可删除一个缓冲:
:bd file.c
按照文件名删除缓冲;:bd 3
:3 bd
按照缓冲的索引删除,list
命令显示缓冲的列表,第一列就是索引;:1,3 bd
删除索引 1~3 的缓冲;:bd! file.c
强制删除 file.c 的缓冲;:bd
删除当前文件的缓冲;
卸载缓冲的意思是将缓冲从内存中卸载,并且关闭缓冲的所有窗口,但是文件还保留在缓冲列表中。:bunload
的命令语法类似于 :bd
,在此不再一一解释。
21.3 窗口选项
’laststatus’ 控制最后一个窗口何时有状态行:0 表示永不;1 表示只有在有至少两个窗口时;2 表示总是; ‘winheight’ 控制当前窗口的最少行数; ’equalalways’ 控制窗口分割时总是相同 size 分割; ‘splitbelow’ 选项控制分割窗口时,新窗口出现在下面;
21.4 会话(session)
在关闭 Vim 前可以将当前的缓冲列表、窗口信息、标记、寄存器和一些别的工作信息保存在会话文件中去。这个会话文件是 Vim 生成的 vimscript 脚本文件。当再次启动 Vim 时,可以从这个会话文件中恢复上次的工作信息。
:mksession vimbook.vim
将当前会话信息保存到文件中;
:source vimbook.vim
从文件中恢复会话;
‘sessionoption’ 选项控制哪些信息得保存在会话文件中。如::set sessionoptions=buffers,winsize,options,help,blank
。以下是每个参数的详细解释:
参数 | 信息 |
---|---|
buffers | 保存所有的缓冲列表,包括隐藏的和卸载的缓冲 |
globals | C 语言中的常量形式的变量 |
help | 帮助窗口 |
blank | 空窗口 |
options | 所有的选项以及按键映射 |
winpos | GUI 窗口的位置 |
resize | 屏幕的缩放 |
winsize | 窗口大小 |
slash | 将反斜线替换为正斜线,方便在 UNIX 和 Windows 共享会话信息 |
unix | 用 UNIX 的换行符来保存文件 |
22 更多高亮模式(visual mode)命令
gv
可以重复处理上一次的高亮模式;
在高亮模式下选择 word 有好几种不同的方式,aw
w
iw
,为何要提供这么多不同的方式呢?原因在于它们可以对选择进行微调。
-
aw
选择一个单词,包括结尾的空白,需要注意的一点是不论光标位于单词的任何地方,都会选中单词的开头; -
w
从当前位置开始选择一个单词,包括下一个单词的第一个字符; -
iw
选择一个内含单词,不会包含结尾的空白,除此之外跟aw
的效果是一样的; -
aW
选择一个字串,包括结尾的空白,不论光标位于字串的任何地方,都会选中整个字串; -
iW
选中一个内含字串,不会包含结尾的空白,除此之外跟aW
是一样的;
除此之外还有 as
is
选中句子(sentence),ap
ip
选中段落;
a(
i(
选中包围的 () ,其中,a 形式的命令会包含开闭符号 ( 、),i 形式命令则不包含。a<
i<
选中 <> 对,a[
i[
a{
i{
功能类似。
22.1 在高亮块中跳转
o
命令可以在高亮块的两个对角进行跳转。O
仅在块高亮模式(Block Visual Mode)时,用来在同一行的两端跳转。
22.2 其它命令
~
转换选择块的大小写,U
将整个高亮块都变成大写的,u
将整个高亮块变成小写的。
J
将整个高亮块拼接成一行,gJ
同样的作用,但是不添加额外的空白符。
:write block.txt
将选中的行写入到文件中;
!
将选中的行调用外部命令,如 !sort
22.3 选择模式(Select Mode)
选择模式类似于高亮模式,也会选中一大块文本,区别在于可用的命令。选择模式不能使用任何可打印字符的命令,如:j
k
,如果键入任何这种字符,都将导致被选中的块被删除,并被替换为键入的字符,然后进入插入模式。此外,还可以用 <BS> 删除选中块,然后进入插入模式。
在选择模式中要移动光标必须用方向键,CTRL 键和功能键(F1等)。进入选择模式有以下几种:
gh
进入按字符移动的选择模式;gH
进入按行移动的选择模式;gCTRL-H
进入块选择模式(block selecttion);
23 面向程序员的命令
Vim 编辑器是一个程序员写给程序员的编辑器,自然会带上很多程序员的特征。比如:<Tab> 键应该正常缩进还是替换成空格,自动缩进选项,make 命令选项。
23.1 移除或插入自动缩进
CTRL-D
移除一个缩进的空白符,0CTRL-D
移除所有缩进空白符,并将光标置于第一列。
CTRL-T
插入一个缩进,这个命令的效果类似于 <Tab> ,除了此命令是按照 ‘shiftwidth’ 的长度缩进,而 <Tab> 按照 ’tabstop’ 的长度缩进。
CTRL-T
和 CTRL-D
可以在行的任意位置调整缩进,而不仅仅是行首。
23.2 插入寄存器
在插入模式想要将寄存器中的内容粘贴并进行合理的缩进,必须调用 CTRL-R CTRL-P a
命令,其中 a 是寄存器。
23.3 空白符和 <Tab>
‘softtabstop’ 控制使得 <Tab> 的长度看起来是这么多。比如 :set softtabstop=4
,而此时 ’tabstop’ 的值还是 8 ,也就是说 <Tab> 本身占 8 个空格的长度。当第一次按 <Tab> 键时,将插入 4 个空格,按第二次时插入一个占 8 个空格场的 <Tab> 值,继续按则再此插入 4 个空格。<BS> 回退效果是一样的。
‘smarttab’ 选项如果打开,将在行首用 ‘shiftwidth’ 选项指定的宽度进行缩进,缩进的原则跟 ‘softtabstop’ 是一样的,就是不足 ’tabstop’ 的长度就用空格代替,足够的话就用 <Tab> 替换掉空格。而在其他地方依然使用 ‘softtabstop’ 或者 ’tabstop’ 的指定的宽度进行插入。
’tabstop’ 选项指定 <Tab> 的不同宽度,如: :set tabsto=4
。
‘shiftwidth’ 缩进或自动缩进使用的空白数目;
’expandtab’ 选项将 <Tab> 扩展成一系列的空格,设定了此选项不会将已经存在的 <Tab> 转换为空格,如果需要这么做,请调用 :retab
命令。如果你不希望 <Tab> 被扩展为空格,调用 CTRL-V<Tab>
将插入一个实实在在的 <Tab> 而不会扩展为空格。
:%retab 8
则将当前的 ’tabstop’ 宽度改为 8 并重新格式化文档。
如果没有指定 ‘shiftround’ 选项将导致每次用 >>
命令缩进时每次都缩进 ‘shiftwidth’ 数目的空白,如果指定了 ‘shiftround’ 将对齐到 ‘shiftwidth’ 宽度,这样看起来更加规整。
23.4 处理多个目录
‘path’ 选项是一个很重要的东西,能够给多个命令提供搜索查询的目录,它是一个逗号分隔的目录列表。这些命令包括 gf
:find
:sfind
tabfind
。 目录中的空格和反斜线需要转义,句点表示文件所在的目录,空字符串表示当前工作目录 ,,
是唯一形式;
两个特殊的目录通配形式:
*
匹配单层目录里边的所有文件,比如:./abc*
,表示当前目录下所有以 abc 开头的文件或文件夹;
**
匹配整个目录树,只能出现在两个 / 之间,或者路径的尾部。/usr/**/sys
匹配 /usr 下并且直达 sys 目录的所有目录。/usr/include/**
匹配 /usr/include 下的整个目录树;
调用 :set path-=
删除一个目录;:set path+=
增加一个目录;:set path^=../lib
将 lib 目录放到搜索目录列表的最前面。在 C 代码中经常会遇到 #include “lib.h” 这种预处理语句,调用 gf
命令可以跳转到对应的文件,而文件目录的地址必须先配置在 ‘path’ 选项中。
:checkpath
命令检查当前文件的所有 #include 文件是否可以被查找到,并且检查这些包含文件所包含的其它文件是否可以被找到。如果所有文件都可以找到将返回正确的信息,如果有任何文件找不到将显示出来。
23.5 未介绍的内容
- ‘comments’ 定义什么是注释,这是一个很复杂的配置,但是能够将什么是注释运用于很多语言;
- ‘cinkeys’ 定义哪些时候应该触发缩进重排 ‘cinoptions’ 控制如何进行缩进 ‘cinwords’ 定义哪些是 C/C++ 关键字;
- ‘matchpairs’ 控制哪些符号可以用 % 进行匹配,默认配置:
:set matchpairs=(:),{:},[:]
,将匹配这几种括号; - ‘makeprg’ 可以对怎样调用 make 进行精确控制,如:
:set makeprg=make\ %
将当前文件名作为参数传给 make ; - ‘makeef’ 控制 make 错误信息的重定向的文件名;
- ’errorformat’ 选项能够控制 Vim 如何去解析 make 产生的错误信息;
- ‘switchbuf’ 控制缓冲区切换的行为;
- ‘grepprg’ 控制用那个 grep 程序的调用,可以用 # 表示当前文件,% 表示 alternate 文件,‘grepformat’ 控制 grep 输出的解析格式;
- ‘highlight’ 控制语法高亮,可以控制三种终端(term,cterm,gui)的各种语法元素(Syntax Elements)的显示特性(颜色、下划线、加粗等);
Author zoro.wang
LastMod 2018-01-25