企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
如果说Vimscript有一个特性使得你能够按照你的意愿定制Vim,那就非键盘映射莫属。 你可以通过键盘映射告诉Vim: > 当我按下这个键时,我需要你放弃默认操作,按我的想法做。 我们先从normal模式的键盘映射开始。我们将在下一章节讨论insert模式和其他模式下的 键盘映射。 随意在文本中敲写几行文字,然后运行命令: ~~~ :map - x ~~~ 将光标置于文本中的某处,按下`-`。注意Vim删除了当前光标下的字符,就好像你按了`x`一样。 我们本来就有个按键用于 "删除当前光标下的字符" ,所以我们将`-`重新映射到稍微有用的 功能。执行命令: ~~~ :map - dd ~~~ 现在移动光标到任意一行,再按下`-`,这次Vim删除了整行的文本,因为`dd`的功能就是删除整行。 ## 特殊字符 你可以使用`<keyname>`告诉Vim一个特殊的按键。尝试如下命令: ~~~ :map <space> viw ~~~ 移动光标到一个单词上,按下空格键。Vim将高亮选中整个单词。 你也可以映射修饰键入Ctrl和Alt。执行: ~~~ :map <c-d> dd ~~~ 现在在键盘上按下`Ctrl+d`将执行`dd`命令。 ## 注释 还记得我们在第一章讨论的注释么?键盘映射就无法使用注释。尝试如下命令: ~~~ :map <space> viw " Select word ~~~ 现在你再按下空格键,一些恐怖的事情就会发生。想一想为什么会这样呢? 当你按下空格键时,Vim认为你是想执行命令`viw<space>"<space>Select<space>word`。 很明显,这不是你的本意。 如果你仔细查看了这个映射的结果,可能你会发现一些奇怪的事。利用几分钟时间, 弄明白使用这个映射时到底发生了什么,以及 _为什么_ 会是那样的结果。 暂时搞不明白也不要担心,我们很快就会再次谈论这个问题。 ## 练习 映射按键`-`为 "删除当前行,然后将其粘贴到下一行" 。然后你就可以一次按键就将一行 文本移动到下一行。 将那个映射命令添加到你的`~/.vimrc`文件中,以后每次启动Vim你都可以使用那个映射了。 试试如何映射按键`_`,使其将当前行上移一行。 将这个映射也加到你的的`~/.vimrc`文件中。 想想如果你想取消一个映射或重置一个按键为默认功能时该怎么操作。