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

📄 map.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 3 页
字号:
把它们设置为不同, 全局插件和filetype插件的映射冲突的机会也是很小的. 例如, 你可以保持把 "mapleader" 设置为缺省的反斜杠, 并且设置 "maplocalleader" 设置为下划线.							*map-<SID>*在一个脚本中有一个特殊关键字叫 "<SID>" 能被用来定义一个局部于脚本中的映射.具体细节请参考 |<SID>|.							*<Plug>*叫做 "<Plug>" 的特殊关键字可以用于一个内部映射, 它不于任何键顺序匹配.这在插件中有用 |using-<Plug>|.							*<Char>* *<Char->*要以一个字符的十进制, 八进制或十六进制数字映射, 可以使用 <Char> 来构造:	<Char-123>	character 123	<Char-033>	character 27	<Char-0x7f>	character 127它可以用来在一个 'keymap' 文件里指定一个 (多字节) 字符. 大小写的区别被忽略.							*map-comments*在这些命令的后面不可能放置注释, 因为 '"' 字符被认为是 {lhs} 或 {rhs}的一部分.							*map_bar*因为字符 '|' 用来分隔映射命令和后面的命令, 所以包括 '|' 的 {rhs} 要做一些特殊的处理, 有三种方法:   use	     works when			   example	~   <Bar>     '<' is not in 'cpoptions'	   :map _l :!ls <Bar> more^M   \|	     'b' is not in 'cpoptions'	   :map _l :!ls \| more^M   ^V|	     always, in Vim and Vi	   :map _l :!ls ^V| more^M(这里 ^V 表示 CTRL-V; 要输入一个 CTRL-V 你必需按键两次; 在这里不能使用 <> 符号 "<C-V>").当你使用 'cpoptions' 的缺省设置时三种方式都可以正常工作.当 'b' 出现在 'cpoptions' 中时, "\|" 会被认为是一个映射的结束, 后面的是另一个命令. 这是为了和Vi兼容, 但是当和其它命令比较时有点不合逻辑.							*map_return*当你的一个映射包含一个 Ex 命令时, 你需要放置一个行终结符在它后面才能让它执行.在这里推荐推荐使用 <CR>  (参考 |<>|).  例如: >   :map  _ls  :!ls -l %<CR>:echo "the end"<CR>在Command-line模式中输入时要避免字符被映射, 可以先输入一个 CTRL-V.在Insert模式中如果 'paste' 选项被打开的话, 映射会被禁止.注意当遇到错误时 (会导致一个错误信息或蜂鸣) 剩下的映射将不会被执行.这是为了保持和Vi兼容.注意这些命令 @zZtTfF[]rm'`"v 的第二个字符 (参数) 和 CTRL-X 不被映射.这样做是为了能够使用所有的命名寄存器和标记, 甚至当同样的名字被映射时也是如此.							*map-which-keys*如果你要做一些映射, 你得选择在 {lhs} 中要用哪些键. 你应该避免使用 Vim 命令所使用的那些键. 否则你将不再能使用这些命令了. 下面是一些建议:- 功能键 <F2>, <F3>, 等等..  和Shift加功能键 <S-F1>,  <S-F2>, 等等.  注意 <F1> 已经用做了帮助命令.- Meta键 (和 ALT 键一起按下).- 使用 '_' 或 ',' 字符然后加上任何其它的字符. "_" 和 "," 命令在 Vim 中是存在  的 (参考 |_| 和 |,|), 但你也许永远不会用到它们.- 使用一个键作为其它命令的同义字.  例如: CTRL-P 和  CTRL-N.  使用更多的字符做更多的映射.参考文件 "index" 可以知道哪些键没有被使用从而使映射不会覆盖任何内建的功能.也可使用 ":help {key}^D" 来找出是否一个键已经用于某些命令.({key} 用于指定你要寻找的键, ^D 是 CTRL-D).							*map-examples*以下是一些例子 (照字面输入它们, 对于 "<CR>" 你输入四个字符;当 '<' 标志不出现在 'cpoptions' 中时它们能正常工作). >   :map <F3>  o#include   :map <M-g> /foo<CR>cwbar<Esc>   :map _x    d/END/e<CR>   :map! qq   quadrillion questions<							*map-typing*当你输入一个映射键顺序时 Vim 会比较你的输入.  如果还不匹配, 它会等待更多的字符输入直到可以确定是否匹配. 例如: 如果你映射了 map! "qq", 然后你输入的第一个 'q' 将不会显示在屏幕上直到你输入另一个 'q' 或其它字符. 如果打开了'timeout' 选项 (这是缺省选项) Vim 仅会等待一秒钟 (或者等待 'timeoutlen' 所指定的时间). 然后假设 'q' 已经不会再被输入. 如果你的输入很慢, 或者你的系统很慢, 重置 'timeout' 选项. 或者你可能需要设置 'ttimeout' 选项.							*map-keys-fails*有一种情况键编码可能不被识别:- Vim 仅能读取部分的键编码.  通常仅仅是第一个字符. 在某些 Unix 版本的 xterm  上有这种情况.- 键编码后面的字符已经被映射.  举例来说, "<F1><F1>" 或 "g<F1>".其结果是在这种情况下键编码不会被识别, 所以映射失败.有两种方法可以避免这种问题:- 从 'cpoptions' 中删除 'K' 标志.  这会使 Vim 等待功能键剩下的部分.- <F1> 到 <F4> 实际产生的键编码与 <xF1> 到 <xF4> 符合.  这是 <xF1> 到 <F1>, <xF2> 到 <F2> 的映射, 等等, 但是这在映射的另一半不会被  识别.  确认从 <F1> 到 <F4> 的键编码是正确的: >	:set <F1>=<type CTRL-V><type F1>< 以四个字符输入 <F1>.  "=" 号后面的部分必需以实际的字符输入,  而不是字面的文本.另一种解决方法是在映射中为第二个特殊键使用实际的键编码: >	:map <F1><Esc>OP :echo "yes"<CR>不要输入一个真正的 <Esc>, 总之 Vim 将识别键编码并把它替换为 <F1>.						*recursive_mapping*如果 {rhs} 中包括了 {lhs} 那么就是一个递归映射.  当 {lhs} 被输入,它会被替换成 {rhs}.  当遇到 {rhs} 中包含的 {lhs} 它会被替换成 {rhs},依此类推.这可能会使一个命令被重复无数次.  这种情况唯一的问题是出错是停止它的唯一方法.有一些宏用来解决这种混乱情况, 看下面的例子. 有一个例外: 如果 {rhs} 以 {lhs}开始, 第一个字符不会被再次映射 (这与 Vi 兼容).例如: >   :map ab abcd将执行 "a" 命令并且在文本中插入 "bcd".  {rhs} 中的 "ab" 不会被再次映射.如果你要交换两个键的含义应该使用 :noremap 命令.  例如: >   :noremap k j   :noremap j k这会交换光标上移和光标下移命令.如果使用普通 :map 命令, 并且 'remap' 选项被打开, 映射一直进行直到文本不再是{lhs} 的一部分.  例如, 如果你用: >   :map x y   :map y xVim 将把 x 替换成 y, 并把 y 替换成 x, 等等.  这种情况会发生'maxmapdepth' 次 (缺省为 1000), 然后 Vim 会给出错误信息 "recursive mapping"(递归映射).							*:map-undo*如果你在一个被映射的序列中包含了一个 undo 命令, 将会把文本带回宏执行前的状态这和原始的 Vi 是兼容的, 只要被映射的序列仅包含一个 undo 命令 (原始的 Vi 中被映射的序列有两个 undo 命令是无意义的, 在第一个 undo 处你就会回到文本).							*:map-special-keys*有三中方法来映射一个特殊键:1. Vi 兼容的方法: 映射键编码.  通常这是一个以 <Esc> 开头的序列. 要输入一个   这样的映射先输入 ":map " 然后再敲入功能键之前得先输入一个 CTRL-V .  注意   这时键的编码是在 termcap (the t_ options) 里, 它会被自动转换到内部编码并it will   变成映射的第二种方法 (除非 'cpoptions' 里包括了 'k' 标志).2. 第二种方法是为功能键使用内部编码.  要输入这样的映射输入 CTRL-K 并敲要映射   的功能键, 或者使用 "#1", "#2", .. "#9", "#0", "<Up>", "<S-Down>", "<S-F7>",   等等的形式.(参考键表 |key-notation|, 所有从 <Up> 开始的键都可以使用)   enter such a mapping type CTRL-K and then hit the function key, or use   the form "#1", "#2", .. "#9", "#0", "<Up>", "<S-Down>", "<S-F7>", etc.   头十个功能键能以两种方式被定义: 仅用数字, 比如 "#2", 或者使用"<F>",    如 "<F2>". 两种都代表功能键 F2. "#0" 表示功能键 F10, 用选项 't_f10' 定义,   它在某些键盘上可能是F0. <> 的形式在 'cpoptions' 包含 '<' 标志时不能使用.3. 使用 termcap 条目, 以 <t_xx> 的形式, 这里 "xx" 是 termcap 条目的名字.   任何字串条目都可以使用.  例如: >     :map <t_F3> G<  把功能键 13 映射成 "G".  当 'cpoptions' 包括 '<' 标志时这种方式不能使用.第二种和第三种方法的优点是不加修改就可以在不同的终端上使用 (功能键会被转换成相同的内部编码或实际的键编码, 而不论使用何种终端. termcap 必需是正确的才能正常工作, 并且必需使用相同的映射).细节: Vim 首先检查是否从键盘输入的序列是否已被映射.  否的话将试图使用终端键编码 (参考 |terminal-options|).  如果一个终端键编码被找到它会被替换成内部编码.然后再次检查一个映射是否已完成 (因此你也能把一个内部编码映射成其它东西).在脚本文件中写入什么东西取决于识别了什么东西. 如果终端键编码被识别为一个映射它本身的键编码会被写入脚本. 如果它被识别为一个终端编码则在脚本中写入内部编码.==============================================================================2. 缩写			*abbreviations* *Abbreviations*缩写在插入, 替换和命令行模式中使用. 如果你输入一个是缩写的单词, 它会被替换成所表示的东西. 这可以在经常输入的长单词时节省键击. 并且能用它来自动更正经常犯的拼写错误. 例如:	:iab ms MicroSoft	:iab tihs this有三种类型的缩写:full-id	  "full-id" 类型由所有键盘字符组成 ('iskeyword' 选项里的字母和字符).	  这是最普通的缩写.	  例如: "foo", "g3", "-1"end-id	  "end-id" 类型以一个键盘字符结尾, 但所有其它字符都不是键盘字符.	  例如: "#i", "..f", "$/7"non-id	  "non-id" 类型以一个非键盘字符结尾, 其它字符可以是任意类型, 除了空格	  和 Tab.  {Vi 不支持这种类型}	  例如: "def#", "4/7$"不能被缩写的字串例子: "a.b", "#def", "a b", "_$r"仅当你输入一个非键盘字符时缩写才会被识别. 或者用 <Esc> 退出插入模式或用 <CR>结束一个命令. 结束缩写的非键盘字符被插入到缩写的扩展后面. 一个例外是字符 <C-]>,它用来不插入任何附加字符时扩展一个缩写.例如: >   :ab hh	hello<	    "hh<Space>" 被扩展为 "hello<Space>"	    "hh<C-]>" 被扩展为 "hello"光标前的字符必需和缩写匹配.  每种类型都有一个附加规则:full-id	  匹配的前面是一个非键盘字符, 或者是在行或插入的开始. 例外: 当缩写仅	  有一个字符时, 如果它前面有一个非键盘字符则不会被识别, 除了空格和	  <Tab>.end-id	  匹配的前面是一个键盘字符, 或者一个空格或 <Tab>,	  或者是行或插入的开始.non-id	  匹配的前面是一个空格, <Tab> 或者行或插入的开始.例如: ({CURSOR} 是你输入一个非键盘字符的地方) >   :ab foo   four old otters<		" foo{CURSOR}"	  被扩展为 " four old otters"		" foobar{CURSOR}" 不被扩展		"barfoo{CURSOR}"  不被扩展>   :ab #i #include<		"#i{CURSOR}"	  被扩展为 "#include"		">#i{CURSOR}"	  不被扩展>   :ab ;; <endofline>"<		"test;;"	  不被扩展		"test ;;"	  被扩展为 "test <endofline>"要避免在插入模式中避免缩写: 输入缩写的一部分, 以 <Esc> 退出插入模式, 再用 'a'进入插入模式并输入剩下的部分. 或者在缩写之后的字符前面输入 CTRL-V.要在命令行模式中避免缩写: 在缩写的某处输入 CTRL-V 两次来避免它被替换. 此外一个普通字符前面的 CTRL-V 通常会被忽略.把光标移动到缩写的后面是可能的: >   :iab if if ()<Left>如果 'cpoptions' 里面包含 '<' 标志时不能正常工作. |<>|你甚至可以做更复杂的事情.  例如, 要消灭一个缩写后面输入的空格:   func Eatchar(pat)      let c = nr2char(getchar())      return (c =~ a:pat) ? '' : c   endfunc   iabbr <silent> if if ()<Left><C-R>=Eatchar('\s')<CR>没有缺省的缩写.缩写永远不会递归.  你可以设置 ":ab f f-o-o" 而不会有任何问题. 但是缩写能被映射. {不清除原因, 一些版本的Vi支持递归缩写}'paste' 选项打开时, 缩写被禁止.				*:abbreviate-local* *:abbreviate-<buffer>*和映射一样, 缩写可以被局部于一个缓冲之内.  这经常被用于一个|filetype-plugin| 文件.  例如一个 C 插件文件: >	:abb <buffer> FF  for (i = 0; i < ; ++i)<						*:ab* *:abbreviate*:ab[breviate]		列出所有的缩写.  第一栏中的字符表示该缩写作用的模式:			'i' 指插入模式, 'c' 指命令行模式, '!' 指两种模式都有.			这和映射的相同,参看 |map-listing| 。:ab[breviate] {lhs}	列出以 {lhs} 开头的缩写:ab[breviate] {lhs} {rhs}			增加一个从 {lhs} 到 {rhs} 的缩写.  如果 {lhs} 已经存在			则它会被替换成新的 {rhs}.  {rhs} 可能包含空格.						*:una* *:unabbreviate*:una[bbreviate] {lhs}	从列表中删除 {lhs} 的缩写						*:norea* *:noreabbrev*:norea[bbrev] [lhs] [rhs]			与 ":ab" 一样, 但是不为这个 {rhs} 重映射 {not ni Vi}						*:ca* *:cabbrev*:ca[bbrev] [lhs] [rhs]	与 ":ab" 一样, 但仅在命令行模式中使用.  {not in Vi}						*:cuna* *:cunabbrev*:cuna[bbrev] {lhs}	与 ":una" 一样, 但仅在命令行模式中使用.  {not in Vi}						*:cnorea* *:cnoreabbrev*:cnorea[bbrev] [lhs] [rhs]			与 ":ab" 一样, 但仅在命令行模式中使用并且不为这个			{rhs} 重映射. {Vi 中没有}						*:ia* *:iabbrev*:ia[bbrev] [lhs] [rhs]	与 ":ab" 一样, 但仅在插入模式中使用.  {not in Vi}						*:iuna* *:iunabbrev*:iuna[bbrev] {lhs}	与 ":una" 一样, 但仅在插入模式中使用.  {not in			Vi}						*:inorea* *:inoreabbrev*:inorea[bbrev] [lhs] [rhs]			与 ":ab" 一样, 但仅在插入模式中使用并且			不为这个 {rhs} 重映射. {not in Vi}							*:abc* *:abclear*:abc[lear]		删除所有的缩写.  {not in Vi}							*:iabc* *:iabclear*:iabc[lear]		为插入模式删除所有的缩写.  {not in Vi}							*:cabc* *:cabclear*:cabc[lear]		为命令行模式删除所有的缩写.  {not			in Vi}							*using_CTRL-V*在一个缩写的 {rhs} 中使用特殊字符是可能的. CTRL-V 可以用来避免多数非打印字符的特殊含义. 需要输入多少个 CTRL-V 取决于你如何输入缩写. 这在映射中也可以应用.这里使用一个例子说明.假设你需要把 "esc" 缩写为输入一个 <Esc> 字符.  当你在 Vim 中输入":ab" 命令, 你必需这样输入: (这里 ^V 是一个 CTRL-V

⌨️ 快捷键说明

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