⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usr_40.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 2 页
字号:
*usr_40.txt*	For Vim version 6.3.  最近更新:2004年6月		     VIM USER MANUAL - by Bram Moolenaar		     (译者:lang2 http://vimcdoc.sf.net)			      创建新的命令Vim 是一个可扩展的编辑器。你可以把一系列你常用的命令组合成一个新的命令。或者重新定义一个现存的命令。各种命令的自动执行可以通过自动命令实现。|40.1|	键映射|40.2|	定义命令行命令|40.3|	自动命令            下一章: |usr_41.txt|  编写 Vim 脚本            前一章: |usr_31.txt|  利用 GUI              目录: |usr_toc.txt|==============================================================================*40.1*	键映射简单的映射已经在 |05.3| 介绍过了。基本的概念是将一系列的键输入转换成为另外一个键输入序列。这是一个很简单,但是很有效的机制。   最简单的形式是将一个键输入序列映射到一个键上。由于那些除了 <F1> 外的功能键都没有预先定义的功能,选择它们作为映射对象是很有效的。例如: >	:map <F2> GoDate: <Esc>:read !date<CR>kJ这显示了如何使用三种不同的运行模式。 在用 "G" 移动到最后一行后,"o" 命令开始一个新行并开始插入模式。然后文本 "Date: " 被输入并用 <Esc> 离开插入模式。   注意在 <> 内使用的特殊键。这叫尖括号标识。你要分别的输入这些字符,而不是键入要表示的键本身。这使得映射更据可读性,而且你也可以方便的拷贝,粘贴文本。   ":" 使得 Vim 回到命令行。 ":read !date" 命令读取 "date" 命令的输出并添加到当前行之下。 <CR> 是用来执行该命令的。   到这为止文本可能是:	Date:  ~	Fri Jun 15 12:54:34 CEST 2001 ~然后 "kJ" 将光标上移并将两行连接起来。   参阅 |map-which-keys| 可以帮助你决定应该使用那些键来作映射。映 射 与 运 行 模 式":map" 命令定义普通模式的键映射。你也可以为其它运行模式定义映射。例如,":imap" 用来定义插入模式的映射。你可以用它来定义一个插入日期的映射: >	:imap <F2> <CR>Date: <Esc>:read !date<CR>kJ看起来很象前面为普通模式定义的 <F2> 映射。但开始的地方是不同的。普通模式下的<F2> 映射依然有效。这样你就可以为各种不同的模式定义同一个映射键。   应该注意的是,虽然这个映射以插入模式开始,但它却以普通模式结束。如果你希望继续插入模式,可以在最后加上 "a"。下面是一个映射命令及其生效模式的总览:	:map		普通,可视模式及操作符等待模式	:vmap		可视模式	:nmap		普通模式	:omap		操作符等待模式	:map!		插入和命令行模式	:imap		插入模式	:cmap		命令行模式操作符等待模式是当你键入一个操作符(比如 "d" 或 "y")之后,Vim 期待你键入一个动作命令或者文本对象时的状态。比如,当你键入命令 "dw", 那个 "w" 就是在操作符等待模式下键入的。假定你想定义映射 <F7> 使得命令 d<F7> 删除一个 C 程序块({} 包括的文本)。类似的 y<F7> 会将程序块拷贝到匿名的寄存器。因此,你所要做的就是定义 <F7> 来选择当前的语法块。你可以用下面的命令做到: >	:omap <F7> a{这使得 <F7> 在操作符等待模式下选择一个块,就像是你键入了 "a{" 一样。这个映射在你不容易键入 { 时比较有用。映 射 列 表要查看当前定义的映射,使用不代参数的 ":map" 命令。或者其它带有运行模式的变体。输出应该类似于:	   _g		 :call MyGrep(1)<CR> ~	v  <F2>		 :s/^/> /<CR>:noh<CR>`` ~	n  <F2>		 :.,$s/^/> /<CR>:noh<CR>`` ~	   <xHome>	 <Home>	   <xEnd>	 <End>第一列显示该映射有效的运行模式。 "n" 表示普通模式,"i" 表示插入模式等。空白表示用 ":map" 命令定义的映射,也就是对普通和可视模式有效。   列出映射的一个比较实用的目的是检查 <> 表示的特殊键是否被识别了(仅当支持多色彩是有效)。例如,当 <Esc> 被用彩色显示时,它表示逃逸???字符。否则,只是5个不同的字符。重 映 射映射的结果会检查其中包括的其他映射。例如,上面对 <F2> 的映射可以减短为: >	:map <F2> G<F3>	:imap <F2> <Esc><F3>	:map <F3>  oDate: <Esc>:read !date<CR>kJ在普通模式下 <F2> 被映射为:行进至最后一行,然后输入 <F3>;在插入模式下先键入<Esc> 后也输入 <F3>。接下来定义 <F3> 来做真正的工作。假设你几乎不使用 Ex 模式,并想用 "Q" 命令来格式化文本 (就像旧版本的 Vim 那样)下面的映射就能做到: >	:map Q gq但是,你总有需要用到 Ex 模式的时候。我们来将 "gQ" 映射为 Q, 这样你仍然可以进入Ex 模式: >	:map gQ Q这样一来当你键入 "gQ" 时它被映射为 "Q"。 到现在为止一切顺利。但由于 "Q" 被映射为 "gq", 输入的 "gQ" 被解释成为 "gq", 你根本就没进入 Ex 模式。   要避免键被再次映射,使用 ":noremap" 命令: >	:noremap gQ Q现在 Vim 就知道了对 "Q" 不需要检查与之相关的映射。对于每个模式都有一个类似的命令:	:noremap	普通,可视和操作符等待模式	:vnoremap	可视模式	:nnoremap	普通模式	:onoremap	操作符等待模式	:noremap!	插入和命令行模式	:inoremap	插入模式	:cnoremap	命令行模式递 归 映 射当一个映射调用它本身的时候,会无限制的运行下去。这可以被用来将一个操作重复无限次。   例如,你有一组文件,每个的第一行都包括一个版本号。你用 "vim *.txt" 来编辑它们。你现在正在编辑第一个文件。定义下面的映射: >	:map ,, :s/5.1/5.2/<CR>:wnext<CR>,,现在当你键入 ",," 时,上面的映射被触发。它把第一行的 "5.1" 替换为 "5.2"。接着执行 ":wnext" 来写入文件并开始编辑下一个。映射以 ",," 结束。这又触发了同一个映射,再次执行替换操作,依此类推。   这个映射会一直进行下去,直至遇到错误。在这里可能是查找命令无法匹配到 "5.1"。你可以自行插入 "5.1" 然后再次键入 ",,"。或者 ":wnext" 因为遇到最后一个文件而失败。   当映射在中途遇到错误时,映射的剩余部分会被放弃。CTRL-C 会中断映射。 (在MS-Windows 上用 CTRL-Break)。删 除 映 射要删除一个映射,使用 ":unmap" 命令。同样,删除映射的命令也和运行模式相关:	:noremap	普通,可视和操作符等待模式	:vnoremap	可视模式	:nnoremap	普通模式	:onoremap	操作符等待模式	:noremap!	插入和命令行模式	:inoremap	插入模式	:cnoremap	命令行模式这里有个小技巧可以定义一个对普通模式和操作符等待模式有效而对可视模式无效的映射:先对三个模式都定义映射,然后将可视模式的那个删除: >	:map <C-A> /---><CR>	:vunmap <C-A>注意那 5 个字符 "<C-A>" 表示一个键组合 CTRL-A.要清除楚所有的映射,使用 |:mapclear| 命令。现在你应该可以猜到对各种模式下的变体了吧。要当心使用这个命令,它是不可能被取消的。特 殊 字 符在 ":map" 命令后面可以追加另一个命令。需要用 | 字符来将两个命令分开。这也就意味着一个映射中不能使用该字符。在需要时,可以用 <Bar> (五个字符)。例如:>	:map <F8> :write <Bar> !checkin %<CR>":unmap" 命令有同样的问题,而且你得留意后缀的空白字符。下面两个命令是不同的:>	:unmap a | unmap b	:unmap a| unmap b第一个命令试图删除映射 "a ",后面带有一个空格。当要在一个映射内使用空格时,应该用 <Space> (七个字符): >	:map <Space> W这使得空格键移动到下一个空白字符分割的单词。在一个映射后加注释是不可能的,因为出 " 字符也被当作是映射的一部分。你可以用|" 绕过这一限制。这实际上是开始一个新的空命令。例如: >	:map <Space> W|     " Use spacebar to move forward a word映 射 与 缩 写缩写和插入模式的映射很象。对参数的处理它们是一样的。它们主要的不同在于触发的方式。缩写是由一个非单词字符触发的。而映射是由其最后一个字符触发的。   另一个区别是你键入的缩写的字符会在你键入的同时被插入到文本内。当缩写被触发时,这些字符会被删除并替换成缩写所对应的字符。当你键入一个映射时,直到你完成所有的映射键而映射被触发时,映射所对应的字符才会被插入。如果你设置了 'showcmd'选项,你键入的字符会被显示在 Vim 窗口的最后一行。   有一个例外是当映射有歧义的时候。假定你有两个映射: >	:imap aa foo	:imap aaa bar现在,当你键入 "aa" 时,Vim 不知道是否要使用第一个映射。它会等待另一个键输入。如果是 "a",第二个映射被执行,结果是 "bar"。 如果是其它字符,例如空格,第一个映射被执行,结果是 "foo", 而且空格字符也会被插入。另 外 ...<script> 关键字可以被用来使一个映射仅对当前脚本有效。参见 |:map-<script>|.<buffer> 关键字可以被用来使一个映射仅对当前缓冲有效。参见 |:map-<buffer>|.<unique> 关键字可以被用来当一个映射已经存在时不允许重新定义。否则的话新的映射会简单的覆盖旧的。参见 |:map-<unique>|.如果要使一个键无效,将之映射至 <Nop> (五个字符)。下面的映射会使 <F7> 什么也干不了: >	:map <F7> <Nop>| map! <F7> <Nop>注意 <Nop> 之后一定不能有空格。==============================================================================*40.2*	定义命令行命令Vim 编辑器允许你定义你自己的命令。你可以像运行其他命令行命令一样运行你自定义的命令。   要定义一个命令,象下面一样执行 ":command" 命令: >	:command DeleteFirst 1delete现在当你执行 ":DeleteFirst" 命令时,Vim 执行 ":1delete" 来删除第一行。	Note:	用户定义的命令必须以大写字母开始。你不能使用 ":X", ":Next" 和	":Print"。也不能用下划线!你可以使用数字,但是这种做法不受鼓励。要列出用户定义的命令,执行下面的命令: >	:command象那些内建的命令一样,用户自定义的命令也可以被缩写。你只需要键入足够区别于其它命令的字符就可以了。命令行补全也有效。参 数 个 数自定义命令可以带一系列的参数。参数的数目必须用 -nargs 选项来指定。例如,上面例子中的 :DeleteFirst 命令不带参数,所以你也可以这样来定义: >	:command -nargs=0 DeleteFirst 1delete然而,因为 0 参数是缺省的,你没有必要加上 "-nargs=0"。 其它可用的值是:	-nargs=0	无参数	-nargs=1	一个参数	-nargs=*	任意数目的参数	-nargs=?	没有或一个参数	-nargs=+	一个或更多参数使 用 参 数在命令的定义中,<args> 关键字可以用来表示命令带的参数。例如: >	:command -nargs=+ Say :echo "<args>"现在当你输入  >	:Say Hello World

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -