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

📄 map.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 3 页
字号:
*map.txt*       For Vim version 6.3b.  原文最后更新: 2004年3月26日		  VIM 参考手册    作者: Bram Moolenaar		  		  翻译: con<con@netease.com>				  VCD主页:http://vimcdoc.sf.net键映射, 缩写和用户定义的命令.本主题在用户手册 |05.3|, |24.7| 和 |40.1| 中有过介绍.1. 键映射			|key-mapping|2. 缩写				|abbreviations|3. 局部映射和函数		|script-local|4. 用户定义的命令		|user-commands|==============================================================================1. 键映射				*key-mapping* *mapping* *macro*键映射用于改变输入键的含义. 最通常的用途是为一个功能键定义成一系列的命令.比如:	:map <F2> a<C-R>=strftime("%c")<CR><Esc>这个映射在光标之后追加当前的日期和时间. (in <> notation |<>|)有很多命令用于定义新的映射, 删除映射和列出当前的映射.可以从 |map-overview| 参考不同的 "映射" 形式和相关的模式.{lhs}	表示左手边	*{lhs}*{rhs}	表示右手边	*{rhs}*:map	{lhs} {rhs}					*:map*:nm[ap]	{lhs} {rhs}					*:nm* *:nmap*:vm[ap]	{lhs} {rhs}					*:vm* *:vmap*:om[ap]	{lhs} {rhs}					*:om* *:omap*:map!	{lhs} {rhs}					*:map!*:im[ap]	{lhs} {rhs}					*:im* *:imap*:lm[ap]	{lhs} {rhs}					*:lm* *:lmap*:cm[ap]	{lhs} {rhs}					*:cm* *:cmap*			在映射命令作用的模式中把键系列{lhs}映射为{rhs}. 并			且映射后的{rhs}也被进行映射扫描. 这个特性可以用来进			行映射的嵌套和递归.:no[remap]  {lhs} {rhs}					*:no*  *:noremap*:nn[oremap] {lhs} {rhs}					*:nn*  *:nnoremap*:vn[oremap] {lhs} {rhs}					*:vn*  *:vnoremap*:ono[remap] {lhs} {rhs}					*:ono* *:onoremap*:no[remap]! {lhs} {rhs}					*:no!* *:noremap!*:ino[remap] {lhs} {rhs}					*:ino* *:inoremap*:ln[oremap] {lhs} {rhs}					*:ln*  *:lnoremap*:cno[remap] {lhs} {rhs}					*:cno* *:cnoremap*			在映射命令作用的模式中把键序列{lhs}映射为{rhs}. 禁			止对映射后的{rhs}进行映射扫描. 这个特性可以避免映射			的嵌套和递归. 通常用于重定义一个命令.  {not in Vi}:unm[ap]  {lhs}						*:unm*  *:unmap*:nun[map] {lhs}						*:nun*  *:nunmap*:vu[nmap] {lhs}						*:vu*   *:vunmap*:ou[nmap] {lhs}						*:ou*   *:ounmap*:unm[ap]! {lhs}						*:unm!* *:unmap!*:iu[nmap] {lhs}						*:iu*   *:iunmap*:lu[nmap] {lhs}						*:lu*   *:lunmap*:cu[nmap] {lhs}						*:cu*   *:cunmap*			在映射命令作用的模式中删除 {lhs} 的映射. 该映射可能			会在它作用的其它模式中被保留.			Note: {lhs} 包含末尾的空格. 该映射取消操作不会生效:				:map @@ foo				:unmap @@ | print:mapc[lear]						*:mapc*   *:mapclear*:nmapc[lear]						*:nmapc*  *:nmapclear*:vmapc[lear]						*:vmapc*  *:vmapclear*:omapc[lear]						*:omapc*  *:omapclear*:mapc[lear]!						*:mapc!*  *:mapclear!*:imapc[lear]						*:imapc*  *:imapclear*:lmapc[lear]						*:lmapc*  *:lmapclear*:cmapc[lear]						*:cmapc*  *:cmapclear*			在映射命令作用的模式中删除所有的映射.  {not in Vi}			警告: 这也会删除缺省的映射.:map:nm[ap]:vm[ap]:om[ap]:map!:im[ap]:lm[ap]:cm[ap]			在映射命令作用的的模式中列出所有的键映射. 注意 ":map"			和":map!"是最常用的, 因为它们包括其它模式.:map    {lhs}						*:map_l*:nm[ap] {lhs}						*:nmap_l*:vm[ap] {lhs}						*:vmap_l*:om[ap] {lhs}						*:omap_l*:map!   {lhs}						*:map_l!*:im[ap] {lhs}						*:imap_l*:lm[ap] {lhs}						*:lmap_l*:cm[ap] {lhs}						*:cmap_l*			在映射命令作用的模式中列出以 {lhs}			开头的键映射的键系列.  {not in Vi}这些命令用于把一个或一个键系列映射成一个字符串.可以用它来在功能键里放置一系列命令, 把一个键转换成另一个, 等等.如何保存和恢复当前映射可以参考 |:mkexrc| .				*:map-local* *:map-<buffer>* *E224* *E225*如果这些命令的第一个参数是 "<buffer>" ,映射将只局限于当前的缓冲內. 例如: >	:map <buffer>  ,w  /[.,;]<CR>然后你可以把 ",w" 在另一个缓冲内作另外的映射: >	:map <buffer>  ,w  /[#&!]<CR>局部缓冲映射在全局映射之前被应用. "<buffer>" 参数也可以用于清除映射: >	:unmap <buffer> ,w	:mapclear <buffer>当一个缓冲被删除时局部映射也会被清除, 但是在它被卸载时不会. 就象本地选项值.						*:map-<silent>* *:map-silent*要在定义一个映射时不在命令行里回显, 可以使用 "<silent>" 作为第一个参数, 例如: >	:map <silent> ,h /Header<CR>在使用这个映射时搜索字串将不被回显. 被执行的命令的信息仍然会被显示.要把它也关掉, 可以在执行的命令里加入一个 ":silent" : >	:map <silent> ,h :exe ":silent normal /Header\r"<CR>提示仍然会给出, 比如使用 inputdialog() 的时候.在一个缩写上使用 "<silent>" 是可能的, 但将会使重绘命令行失败.						*:map-<script>* *:map-script*如果给这些命令的第一个参数是 "<script>" 并且它用于定义一个新的映射或缩写,该映射将仅仅重映射 {rhs} 中使用被一个以 "<SID>" 开头的脚本局部定义的映射中的字符.它可以用于避免来自外部的脚本的干扰 (举例来说, 在 mswin.vim 中 CTRL-V 被重新映射 ),但是又使用该脚本中定义的其它映射.Note: ":map <script>" 和 ":noremap <script>" 做同样的事情."<script>" 否决了该命令名.  更推荐使用 ":noremap <script>" ,因为它更清晰的表示了重映射已被 (大多数时候) 禁止.						*:map-<unique>* *E226* *E227*如果这些命令的第一个参数是 "<unique>" 并且它用于定义一个新的映射或缩写时该映射或缩写已经存在, 则该命令会失败. 例如: >	:map <unique> ,w  /[#&!]<CR>当定义一个局部映射, 同时也会检查是否已存在了一个相同的全局映射.这个例子将失败: >	:map ,w  /[#&!]<CR>	:map <buffer> <unique> ,w  /[.,;]<CR>"<buffer>", "<silent>", "<script>" 和 "<unique>" 可以以任意顺序被使用.它们必需出现在命令的右边, 并且在任何其它参数的之前边.映 射 与 运 行 模 式有五种映射存在- 对于普通模式: 当输入命令时.- 对于可视模式: 当输入命令并且 Visual 区域已被设置为高亮时.- 对于 Operator-pending mode: 当一个操作符正在进行中 ("d", "y", "c",等等之后)  例如: ":omap { w" 会使 "y{" 和 "yw" 一样, "d{" 和 "dw"一样.- 对于插入模式: 也被用于替换模式.- 对于命令行模式: 当输入一个 ":" 或 "/" 命令时.没有独立针对选择模式的映射.  和可视模式在 |Select-mode-mapping|中的一样.特殊情况:当在普通模式里为一个命令输入一个数时,对 0 的映射就会禁用。这样在输入一个带有0的数字时不会受到对 0 键映射的干扰。						*map-overview* *map-modes*每个映射命令工作的模式概况:    命令:				      模式: ~					    普通      可视  Operator-pending ~:map   :noremap   :unmap   :mapclear	    yes	       yes	  yes:nmap  :nnoremap  :nunmap  :nmapclear	    yes		-	   -:vmap  :vnoremap  :vunmap  :vmapclear	     -	       yes	   -:omap  :onoremap  :ounmap  :omapclear	     -		-	  yes					    插入     命令行	Lang-Arg ~:map!  :noremap!  :unmap!  :mapclear!	    yes	       yes	   -:imap  :inoremap  :iunmap  :imapclear	    yes		-	   -:cmap  :cnoremap  :cunmap  :cmapclear	     -	       yes	   -:lmap  :lnoremap  :lunmap  :lmapclear	    yes*       yes*	  yes*原来的 Vi 没有独立针对普通/可视/Operator-pending 模式和插入/命令行模式的映射. 因此 ":map" 和 ":map!" 命令对不同的模式都起作用。在 Vim 中你可以使用 ":nmap",":vmap", ":omap", ":cmap" 和 ":imap" 命令来对每个不同的模式分别定义输入映射。要为普通和可视模式但不包括 Operator-pending 模式输入一个映射, 首先在所有的三个模式中为它定义, 然后为它在 Operator-pending 模式中取消映射:	:map    xx something-difficult	:ounmap xx对于一个可视和 Operator-pending 模式或 普通和 Operator-pending 模式的映射也一样.						*language-mapping*":lmap" 定义一个映射应用于:- 插入模式- 命令行模式- 当输入一个搜索模式- 接受一个文本字符作为参数的命令, 比如 "r" 和 "f"- 对于 input() 行通常: 不论何时被输入的字符是缓冲区文本的一部分, 而非一个 Vim 命令字符."Lang-Arg" 不是真正的另外一个模式, 它在这里仅在这种情况下被使用.   载入一个相关语言映射集合的最简单的方法是通过使用 'keymap' 选项.参考 |45.5|.   在插入模式和命令行模式中可以用 CTRL-^ 命令来禁止映射|i_CTRL-^| |c_CTRL-^|.  当开始输入一个普通命令行 (非搜索模式)时, 映射被禁止直到输入一个 CTRL-^.  上次使用的状态在 Insert 模式和搜索模式中被单独记录.Insert 模式的状态也被用于当输入一个字符作为 "f" 或 "t" 之类命令的参数时.   当加入一个 ":lmap" 映射在Insert 模式和搜索模式中这些映射将被打开.   语言映射永远不能应用于已经映射的字符上.  它们仅用于已经输入的字符上.假设语言映射已经完成当输入映射时.							*map-multibyte*可以对多字节字符映射, 但只能是整个字符. 不能仅映射第一个字节.这是为了避免下面场景中的问题:	:set encoding=latin1	:imap <M-C> foo	:set encoding=utf-8对于 <M-C> 的映射是在 latin1 解码中被定义的, 结果是一个 0xc3 字节.如果你在UTF-8解码中输入 ?(0xea <M-a>) 它是双字节 0xc3 0xa1.这个时候你不希望 0xc3 字节被映射, 否则的话将不能输入 ? 字符了.							*map-listing*当列出映射时, 前面两栏的字符表示:      CHAR	MODE	~     <Space>	Normal, Visual 和 Operator-pending	n	Normal	v	Visual	o	Operator-pending	!	Insert 和 Command-line	i	Insert	l	":lmap" 为 Insert, Command-line 和 Lang-Arg映射	c	Command-line在紧跟 {rhs} 会显示一个特殊字符:	*	表示它不可重映射	&	表示仅 script-local 映射可以被重映射	@	表示一个 buffer-local 映射{lhs} 从以后的第一个非空字符到行的末尾(或 '|') 都被认为是 {rhs} 的一部分.这允许 {rhs} 以一个空格结尾.注意: 在 Visual 模式里使用映射时, 你可以使用 "'<" 标记, 它表示当前缓冲区中最后被选中的 Visual 区域的开始 |'<|.							*map_backslash*注意在这里仅有 CTRL-V 被提及作为映射和缩写时的一个特殊字符.当 'cpoptions' 不包含 'B', 一个反斜杠也可如 CTRL-V 一样被使用.而且 <> 符号能被完全可以被使用 |<>|.但你不能使用 "<C-V>" 如 CTRL-V 来转换后面的特殊含义.要映射一个反斜杠, 或者在 {rhs} 中使用一个字面意义的反斜杠, 可以使用特殊字符序列 "<Bslash>" .  这可以避免在使用嵌套映射时需要使用双反斜杠.							*map-ambiguous*当两个映射以相同的字符顺序开始,它们是含糊的.例如: >	:imap aa foo	:imap aaa bar当 Vim 读如 "aa", 它将需要取得另外一个字符才能决定是否是 "aa" 或是 "aaa"应该被映射. 这意味这当输入 "aa" 以后映射还不会展开, Vim还在等待另一个字符.如果你输入一个空格, 那么 "foo" 将被插入, 而不是空格. 如果你输入一个 "a",那么 "bar" 将被插入.{Vi does not allow ambiguous mappings}							*map_CTRL_C*在 {lhs} 中不可能使用一个 CTRL-C.  你不能映射 CTRL-C.原因是 CTRL-C 必需总是能够中断一个运行中的命令.例外: 当在MS-Windows上使用 GUI 版本时 CTRL-C 能被映射来允许一个Copy命令到剪裁板. 使用 CTRL-Break 来中断 Vim.							*map_space_in_lhs*要在 {lhs} 中包含一个空格, 在前面输入一个 CTRL-V (每个空格输入两个 CTRL-Vs).							*map_space_in_rhs*如果你需要 {rhs} 以空格开头, 使用 "<Space>".  要与Vi完全兼容 (但不可读),不要使用 |<>| 符号, 在 {rhs} 前面输入一个单独的 CTRL-V(你必需输入 CTRL-V 两次).							*map_empty_rhs*你可以通过在一个单独的 CTRL-V (你必需输入 CTRL-V 两次) 后面什么也不输入来建立一个空的 {rhs}. 不幸的是在一个vimrc文件中你不能使用这种方式.							*<Nop>*得到一个什么都不做的映射的更容易的一个方法是在 {rhs} 中使用 "<Nop>".仅当 |<>| 符号被允许时这种方法才生效.  例如确保功能键F8什么事情都不做:	:map  <F8>  <Nop>	:map! <F8>  <Nop>					*<Leader>* *mapleader*要定义一个使用 "mapleader" 变量的映射, 可以使用特殊字串 "<Leader>".它会被 "mapleader" 的字串值所替换. 如果 "mapleader" 未设置或为空,则用反斜杠代替, 例如:	:map <Leader>A  oanother line<Esc>和下面一样: >	:map \A  oanother line<Esc>但是当: >	:let mapleader = ","和下面一样: >	:map ,A  oanother line<Esc>注意 "mapleader" 的值仅当定义映射时被使用. 后来改变的 "mapleader" 不会影响已定义的映射.					*<LocalLeader>* *maplocalleader*和 <Leader> 类似, 除了它使用 "maplocalleader" 而非 "mapleader".<LocalLeader> 用来针对局部于一个缓冲的映射多所使用, 例如: >      :map <LocalLeader>q  \DoItNow<在一个全局插件里应该使用 <Leader> 而在一个 filetype 插件里应该使用<LocalLeader>.  "mapleader" 和 "maplocalleader" 可以是相同的. 尽管如此, 如果你

⌨️ 快捷键说明

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