来源:
ChinaUnix博客 作者:
ChinaUnix博客 发布时间:2007-01-01 19:29:00


*21.1* 挂起和继续
像多数 Unix 程式相同,Vim 能够按 CTRL-Z 挂起。这个动作把 Vim 停下来,并让您回
到那个您启动 Vim 的命令 shell 里。接着,您能够执行任何别的命令直到您觉得无聊为
止。然后再用 "fg" 命令回到 Vim。
CTRL-Z
{any sequence of shell commands}
fg
您正好回到那个当初您离开 Vim 的地方,什么也没改变。
当您按 CTRL-Z 行不通时,您还能够用命令 ":suspend"。别忘了把 Vim 引导回前
台,否则您会失去您任何的修改!
只有 Unix 支持这个功能。在其他系统上 Vim 将为您启动一个 shell。这也让您得以执
行 shell 命令。可那是个新 shell,而非您在其中启动 Vim 的那个。
当您运行图像用户界面时,您无法返回那个 Vim 从其中启动的 shell。CTRL-Z 的作
用只是把 Vim 窗口最小化。
*21.2* 执行 shell 命令
从 Vim 内部执行单个 shell 命令,用 ":!{command}"。例如,要显示目录表:
:!ls
:!dir
第一行用在 Unix 上,第二行用于微软视窗。
Vim 将执行该程式。当他结束时,您会得到提示,让您击打 。这提示允许您
在回去编辑您的文本之前看一看该命令的输出。
字符 "!" 也用在其他有个程式被调用运行的场合。让我们看一看共有哪些:
:!{program} 执行 {program}
:r !{program} 执行 {program} 并读取其输出
:w !{program} 执行 {program} 传送文本至其输入
:[range]!{program} 经由 {program} 过滤文本
注意 "!{program}" 前面那个作用区产生的区分可大了。不附带作用区,这个程式就跟
通常相同被执行,而加了这个作用区,作用区内的文本行就经由该程式过滤而出。
用这种方法执行一系列命令也是能够的。但 shell 在此却更胜一筹。您能够用这种方法
启动一个新 shell:
:shell
这有点类似于用 CTRL-Z 来挂起 Vim。不同之处在于这种方法启动的是个新 shell。
使用图像用户界面时,这个 shell 利用 Vim 的窗口作为其输入和输出端口。既然 Vim
并非终端仿真器,所以使用中未必尽善近美。要是您碰到麻烦,试试转换 ’guipty’ 选
项。假如这方法仍不奏效,那就只好启动一个新的终端来运行 shell。例如:
:!xterm&
*21.3* 记忆有关信息;viminfo
在您编辑了一会儿文档以后,您就会有些文本储存在寄存器内,有些标记指向各种各样文
件,更有一些精妙的命令保存在命令行历史记录内。当您退出 Vim,任何这些就全没了。
但不用担心,您能够把他们找回来!
信息文档 viminfo 设计用来储存状态信息:
命令行和模式搜索的历史记录
寄存器内文本
各种文档的标记
缓存器列表
全局变量
您每次退出 Vim,他就把此种信息存放在一个文档内。即 viminfo 信息文档。当 Vim 重
新启动时,就读取这个信息文档,而那些信息就被还原了。
选项 ’viminfo’ 的默认设定是还原有限的几种信息。您也许希望设定他记住更多的信
息。下面这个命令能够办到:
:set viminfo=string
其中字符串 "string" 规定了什么要储存。该字符串的语法为一个选项字符跟一个参数。
选项和参数组成的对子之间由逗号分隔。
来看一下您能够怎样构建您自己的 viminfo 字符串。首先,选项 ’ 用于规定您为多
少个文档保存标记 (a-z)。为此选项凑一个整数就行 (比如 1000)。您的命令现在看起来
像这样:
:set viminfo=’1000
选项 f 控制是否要储存全局标记 (A-Z 和 0-9)。假如这个选项设为 0,那么什么也不存
储。假如设为 1,或您对 f 选项不作规定,那么标记就被存储。您要这个功能,现在您
有了:
:set viminfo=’1000,f1
选项
:set viminfo=’1000,f1,
您也许用得着的其他选项:
: 保存命令行历史记录内的行数
@ 保存输入行历史记录内的行数
/ 保存搜索历史记录内的行数
r 可移介质,其上的文档不保存标记 (可用多次)
! 以大写字母开头并且不含有小写字母的全局变量
h 启动时关闭选项 ’hlsearch’ 高亮显示
% 缓冲区列表 (只有当不带参数启动 Vim 时才用来恢复)
c 用编码 ’encoding’ 转换文本
n 用于 viminfo 文档的名称 (必须为最后一项选项)
欲知更多详情,参见 ’viminfo’ 选项连同 |
viminfo-file
|。
当您多次运行 Vim,最后退出的那个就把信息储存起来。这可能导致以前退出的那些 Vim
所存放的信息流失,因为每个条目只能被记住一次。
重 返 原 处
您编辑一个文档到一半,但您得下班去度假了。您退出 Vim 就去享受您的人生,把您那
些工作忘得干干净净。两个星期以后您启动 Vim,键入:
’0
您正好回到当初离开 Vim 的地方。所以您就把您的工作接着做下去。
您每次退出 Vim,他都创建一个标记。最后那个是 ’0。原来那个 ’0 所指的位置就
成了 ’1。而原来那个 ’1 就成了 ’2,依此类推。而原来的标记 ’9 就没了。
要发现标记 ’0 至 ’9 指向何处,|
:marks
| 命令很有用。
Vim 间 信 息 移 动
在 Vim 仍然运行的情况下,您能够用命令 ":wviminfo" 和 ":rviminfo" 来保存和还原
信息。这很方便,比如在两个同时运行的 Vim 之间交换寄存器内容。在第一个 Vim 里执
行:
:wviminfo! ~/tmp/viminfo
而在第二个 Vim 里执行:
:rviminfo! ~/tmp/viminfo
很明显,字符 "w" 指 "写" 而字符 "r" 指 "读"。
":wviminfo" 用字符 ! 来强制重写一个已存在文档。假如省略而文档却存在,那么这
些信息就跟那个文档合并到一起。
用于 ":rviminfo" 的 ! 字符意味着任何的信息都被采用,这可能会重写一些已存在
信息。若不用 ! 字符,则只有那些尚未设定的信息才会被采用。
这些命令也能够用来储存信息为将来所用。您能够让一个目录专门存放信息文档,而
每一个所包含的信息各有其特别的目的。
*21.4* 会话
假定您编着编着,编到那一天要结束了。您想放下手上的工作,而于第二天再从您停下来
的那地方继续编下去。您能够做到这一点,只要把您的编辑会话保存起来,第二天再把他
还原回来。
Vim 会话存放着任何跟您的编辑相关的信息。这包括诸如文档列表、窗口布局、全局
变量、选项、连同其他信息。(究竟什么信息被记住,则由选项 ’sessionoptions’ 控
制,稍后叙述。)
下面这个命令创建一个会话文档:
:mksession vimbook.vim
假如您以后要还原这个会话,您能够用这个命令:
:source vimbook.vim
假如您要启动 Vim 并还原某个特别的会话,您能够用下面这个命令:
vim -S vimbook.vim
这命令告诉 Vim 在启动时读取一个特定的会话文档。参数 ’S’ 指会话 (实际上,您能够
用 -S 运行任何 Vim 脚本,因而,您也不妨指其为运行脚本,"source")。
那个曾打开的窗口就还原了,跟以前相同的位置和大小。映射和选项值也像以前相同。
究竟还原了什么取决于 ’sessionoptions’ 选项。默认值为 "blank,buffers,curdir,
folds,help,options,winsize"。
blank 保留空窗口
buffers 任何缓冲区,而非仅仅一个窗口内的
curdir 当前目录
folds 折叠,包括人工创建的
help 帮助窗口
options 任何选项和映射
winsize 窗口大小
您爱怎么改就怎么改。例如,除了上述项目以外,您还要还原 Vim 窗口大小:
:set sessionoptions+=resize
会 话 用 法
最显而易见的会话用法,是在编辑属于不同项目的文档时。假定您把会话文档都储存在目
录 "~/.vim" 下。您正编辑着项目 "secret" 的文档,而您必须转换到项目 "boring" 的
文档上:
:wall
:mksession! ~/.vim/secret.vim
:source ~/.vim/boring.vim
首先用命令 ":wall" 把任何修改过的文档存盘。然后用命令 ":mksession!" 保存当前会
话。他重写了前一次会话文档。下一次载入 "secret" 会话时,您便能够在原来那一点上
接着编辑下去。最后,您载入新的 "boring" 会话。
假如您打开帮助窗口,分割和关闭各种各样窗口,或一般来说把窗口布局搞砸了,此时
您能够恢复上次保存的会话:
:source ~/.vim/boring.vim
您因而享有充分的控制权,要么把当前会话中的配置保存起来,以便下一次编辑时从现在
这个位置接着编下去,要么保留会话文档不变,一切都从那儿开始。
另一种会话用法是您创建了一种您喜欢的窗口布局,并把他保存在一个会话文档中。
然后您能够在任何时候恢复这种窗口布局。
例如,这是个使用起来很不错的布局:
+----------------------------------------+
| VIM - main help file |
| |
|Move around: Use the cursor keys,or "h|
|help.txt================================|
|explorer | |
|dir |~ |
|dir |~ |
|file |~ |
|file |~ |
|file |~ |
|file |~ |
|~/=========|[No File]===================|
| |
+----------------------------------------+
其顶部有个帮助窗口,使您能够阅读本文。左边那个狭长窗口相当于一个文档浏览器。这
是个 Vim 插件,用来表列一个目录的内容。您能够在那儿挑选文档来编辑。有关这一
点,下一章有更多叙述。
从一个刚刚启动的 Vim 创建这样一个布局,请用:
:help
CTRL-W w
:vertical split ~/
您能够根据您的喜好稍稍改变一点那些窗口的大小。然后保存会话记录:
:mksession ~/.vim/mine.vim
现在您能够用这个布局启动 Vim:
vim -S ~/.vim/mine.vim
提示: 要在一个空窗口中打开一个表列在浏览器窗口中的文档,请把光标移到文档名上并
按 "O"。用鼠标双击也行。
UNIX 和 微 软 视 窗
有些人不得不今天在微软视窗上,而明天则在 Unix 上工作。假如您是其中之一,请考虑
把 "slash" 和 "unix" 加入选项 ’sessionoptions’。此后存盘的会话文档的格式在两种
系统上都适用。请把以下命令加进您的 vimrc 文档内:
:set sessionoptions+=unix,slash
Vim 将因而使用 Unix 格式,因为微软视窗上的 Vim 能读写 Unix 文档,但 Unix 上的
Vim 却不能读取微软视窗格式的会话文档。类似地,微软视窗上的 Vim 懂得文档路径名
称里用以分隔名字的 / ,但 Unix 上的 Vim 却不懂微软视窗上的 \。
会 话 记 录 和 信 息 文 件
会话记录储存了不少东西,但不储存标记位置,寄存器内容连同命令行历史记录。您需要
利用 Vim 信息文档 viminfo 储存这些信息。
在大多数情况下,您将需要利用会话记录而非全部信息文档内的信息。这么做能够让
您转换到另一个会话记录,但却保留着命令行历史记录。并得以在一个会话期内把文本抄
进寄存器,而于另一个会话期把他粘贴出来。
您也许宁可用会话记录保存信息。那么,您必须亲自动手。例如:
:mksession! ~/.vim/secret.vim
:wviminfo! ~/.vim/secret.viminfo
而再次把他还原:
:source ~/.vim/secret.vim
:rviminfo! ~/.vim/secret.viminfo
*21.5* 视图
会话记录储存着整个 Vim 窗口外观。当您只需要为某个窗口储存特性时,得用视图。
视图的用处在于您要以某种特定的方式编辑一个文档。例如,您以 ’number’ 选项显
示了行号,并定义了若干折叠。正如会话记录那样,您能够记住这一视图并在以后还原回
来。事实上,当您储存会话时,每个窗口的视图都储存了。
视图有两种基本用法。第一种是让 Vim 为视图文档挑一个文档名。您能够在以后编辑
同一文档时还原该视图。为当前窗口储存视图,用:
:mkview
Vim 将自行决定视图的储存位置。当您以后编辑同一文档时,用这个命令恢复该视图:
:loadview
这挺容易,不是吗?
现在您要阅读这个文档,阅读时您不要 ’number’ 选项显示行号,或您要把任何的
折叠都打开。您能够设定这些选项,使窗口看起来就是您要的那个样子。然后储存这个视
图:
:mkview 1
显而易见,您能够用下面的命令把他恢复:
:loadview 1
现在您能够用 ":loadview" 在这个文档的两个视图之间转换了,一个加参数 "1",另一
个则不加参数。
您能够用这个方法为同一个文档储存视图达十个之多,一个没序号的,而九个则有序
号 1 至 9。
命 名 视 图
第二种视图基本用法是把视图储存在一个您选定的文档内。您能够在编辑另外一个文档时
载入这个视图。Vim 将接着转而编辑该视图规定的文档。这样您就能够用这种方法迅速换
个文档来编辑,其任何的选项设定就跟他们在存盘时相同。
例如,要保存当前文档的视图:
:mkview ~/.vim/main.vim
您能够用这个命令把他还原:
:source ~/.vim/main.vim
*21.6* 模式行
当您编辑一个特定的文档,您也许为该文档设定了特定的选项。每次键入这些命令很无
聊。而在许多人共享一个文档时,利用会话和视图来编辑这个文档也无济于事。
解决这个困境的方法是给文档加一个模式行。那是一行文本,他把一些只适用于该文
件的选项设定告诉 Vim。
一个典型的例子是在一个 C 程式中您把缩进值设为 4 的倍数。这就需要把选项
’shiftwidth’ 设为 4。这个模式行能奏效:
/* vim:set shiftwidth=4: */
把这一行插入该文档起首五行或结尾五行。编辑这个文档时,您将注意到 ’shiftwidth’
选项已设定为 4。编辑另一个文档时,他再设回默认值 8。
对于有些文档,模式行放在头部挺合适,所以他应该置于该文档的顶部。对于文本文
件和其他那些模式行会影响正文阅读的文档,把模式行放在文档结尾处。
选项 ’modelines’ 规定了要在文档起首和结尾几行之内检查那儿是否包含了模式行。要
检查十行:
:set modelines=10
选项 ’modeline’ 能够用来撤销这个设定。假如您以终极用户身份 (Unix 的 root 或
MS-Windows 的 Administrator) 工作或您不信任要编辑的文档时应该如此:
:set nomodeline
模式行能够用这种格式:
any-text vim:set {option}={value} ... : any-text
其中 "any-text" 表示您能够在 Vim 实际用到的部分之前和之后加任意文本。这就允许
您使他看起来像个注释,正如上例采用了 /* 和 */。
" vim:" 部分使 Vim 识别出这个模式行。在 "vim" 的前面必须有空格,除非 "vim"
置于行首。因此像 "gvim:" 这样用法是不行的。
冒号之间的部分是命令 ":set" 。他的用法就跟键入 ":set" 命令一模相同,只除了
在命令包含的任何冒号之前需要插入一个反斜杠 (否则该冒号就会被看成模式行结尾)。
更有一个例子:
// vim:set textwidth=72 dir=c\:\tmp: use c:\tmp here
在第一个冒号之前多一个反斜杠,因此他被包括在 ":set" 命令内。第二个冒号后面的文
本则被忽略不计,因此能够在那儿放个注释。
本文来自ChinaUnix博客,假如查看原文请点:http://blog.chinaunix.net/u1/49923/showart_393555.html
|
还没有关于此文章的相关评论!