天天看点

[倚天屠龙记] vim 光标移动(入门)

        我喜欢上vim的重要因素之一就是vim快速而精准的移动定位能力,在诸多编辑器之中,无出其右者。

[倚天屠龙记] vim 光标移动(入门)

        最基本的移动命令是 h j k l,分别代表向左下上右四个方向移动一个字符,效果等同于四个方向键,在vim诞生的那个年代,键盘上还没有方向键的设置,所以vim的作者就用了右手高频键区的这四个键代替,在今天看来,这四个键仍然优于方向键,因为右手手指无需离开高频键区。h和l命令在默认情况下,光标只能到达当前行的首尾两端,并不能跨越行边界的,但是通过设置whichwrap选项可以摆脱这个限制(:help whichwrap)。vim大多数命令都可以加上一个数字前缀表示重复执行多次同样的命令,这里可以用5h表示向左移动5个字符,20k表示向上移动20行,为了验证这个行的移动,你可以打开行号显示开关(:set number,或者简单点:set nu,用:set nonu可以关闭行号显示)。

        如果一行的内容实在太长(vim的一行是按换行符识别的,所以通常所谓的一行其实是一个段落),可以使用gj和gk命令在一个文件行被宽度有限的显示屏强行显示的多行中上下移动。在同一行内,按下数字0可以移动到行首,而按下符号$则是移动到行尾,命令^则是移动到行首的第一个非空白字符。

        使用f和t命令可以在行内快速的移动到某个指定的字符,只要在f和t后面跟上指定字符即可,例如fc表示移动到当前位置右侧字符c第一次出现的位置,而tc则表示移动到当前位置右侧字符c第一次出现位置的前一个字符,f和t就这点区别,而F和T则分别表示向左侧移动,用法完全一样,不过Tc则是表示左侧字符c第一次出现的后一个字符(搜索方向的前一个字符)。同样可以在这些命令前面加上数字前缀,3fa则向右移动字符a的第三次出现位置,依此类推。

        vim使用<C-f>和<C-b>向前和向后翻屏,<C-f>表示Ctrl+f组合键,余者类似,<C-d>向前翻动半屏,<C-u>向后翻动半屏,<C-e>向前滚动一行,<C-y>向后滚动一行,在这些翻屏命令中,只要光标所在行仍然在当前屏中,光标就不会被移动(实际上如果通过:set scrolloff选项设置了光标距离屏幕顶部和底部的最小行数时,这个命题不成立)。在这些命令前面加上数字前缀之后,你将获得一次翻动几百屏的能力。

        如果文件还是太长了,以致翻屏都是一件辛苦的事情,那么使用相对位置可以节省一点你的体力,使用gg可以迅速移动到文件头,而G则移动到文件尾部,使用188G则直接移动到文件的第188行,这是一个在命令之前添加数字前缀不代表重复执行的例子,因为将光标移动文件尾188次是什么意思呢?按下50%则直接移动到文件的最中间的那一行,亦即按文件比例进行移动。

        有了同一行上的移动,文件层面的快速移动,接下来还有同一屏上的快速移动,H是移动光标到屏幕最上面那一行,M是移动到屏幕中央那一行,而L是移动到屏幕最底部那一行,怎么样,这个有用吧?

        接下来还有光标不动,按光标进行滚屏的方式,zz表示通过上下滚屏使得光标所在行显示在屏幕正中央,而zt则是使得光标所在行显示在屏幕顶部第一行处,而zb当然就只剩下显示到屏幕底部那一行了。这里如果通过:set scrolloff设置了光标距离屏幕上下边界的最小行数距离的话,就需要作相应的适配了,比如如果scrolloff=3,则zt命令就是将光标所在行显示到屏幕顶部第四行的位置上了。

        此外,还有按单词和句子进行光标移动的命令,不过我没怎么用,这里就不介绍了,另外,通过查找进行移动光标,由于查找本身就是vim的一项重大主题,就留待查找那一部分去介绍了。