Vi 中的光标位置操作

Vi 中的光标操作是其他众多命令,如(d-delete, c-change, yy) 的基础。它犹如汇编中的寄存器/寻址方式,成为了许多 Vi 的初学者望而却步的一主要原因,特别是在某些系统版本的 Vi 中无法正常使用方向键移动光标的情况。那么好的习惯还是请试着用 h, j, k, l 来当方向键,对于键盘控来说,把手从字母上移动到方向键上去都是在浪费时间。

本来是想直接记录一下在 Vi 中怎么进行删除、修改操作的,然而却发现 Vi 的光标操作是无法逾越的一道沟。在这里,我会试着去理解每一个按键的更自然的意义,现在开始拉清单

    k
h  l  j
 k: 上,h: 左, l: 下, j: 右。也不知道为何选择右手横向上的 h, j, l, j 来分别表示 左右上下, 取键盘上的 ijkl 还好理解。总之适应这个方向的节奏。
h, j, k, l (May 11, 2017), Vi  用过一段时间后,再回味方向键的设计。h 和 l 分列两边,代表左和右,这个好理解; j 最常用,右食指的本位,余下 k 键向上。顺序依次是 左,下,上,右
    w  以字(单词)为单位向右移动光标, 可以理解为 word。光标停在下一个字的结尾
    b  与 w 相反,按字向左移动。光标停在上一个字的开始
    ^  光标移到当前行首(第一个非空字符上),这个好理解,正则表达式就是。数字 0 也一样的效果
    $  光标移到当前行尾,这也是正则表达式的用法。如果最后一个是空格也要跳上去
   g_  光标移到当前行最后一个非空字符上
   %  光标跳到与当前括号相匹配的括号,对花括号,中括号,圆括号都有效
  ( 或 )  当前的句子的开头或末尾
  { 或 }  当前段落的开头或末尾
    G  光标移到最后一行的行首,G 是行的跳跃操作。也可用命令 :$
   nG  光标移到第 n 行的行首, 所以移到第一行的行首就用 1G,或 gg。也可用命令 :n, 如 :2 回车跳到第二行
   /p  p 表示模式, 向后查找。回车后光标跳到第一个匹配到的位置上,n 跳到下一个匹配处
   ?p  与上类似,只不过是向前查找。之所以把模式查找放到移动光标的内容中,是因为它的重要性,可以让你快速准确的跳到想要位置,在删除或修改时配合 / ? s 就更妙了

我想,大部分 Vi 内置命令都支持数字加命令的操作,同样对于上面可被量化的移动操作,可以在前面加个数字来进行重复操作,它们包括 k, h, l, j, w, b, ^, $ 和 G。

举例来说

10k    光标向上移十行,保持在纵向相同的位置上
3w     光标向后移动三个字,停在第三个字的结尾
5$     光标跳到从当前行算起第 5 行的行尾,所以 1$ 与 $ 是一个效果。因为 $ 是指行尾,所以自然是向下移的趋势。
2^     光标跳到从当前行算起第 2 行的行首,1^ 与 $ 也是一个效果

nG  的操作前面表格中有提到。

这里的数字都必须写在命令的前面,即  10G,不能写成 G10

有了这篇的铺垫,接下来可以步入  dw, d2w, 2dw, d/abc, c3w 这样的操作。

参考:1. http://lxs647.iteye.com/blog/1245948
2. http://www.cs.colostate.edu/helpdocs/vi.html
3. 技巧:快速提高 Vi/Vim 使用效率的原则与途径
4. 每日一Vi

本文链接 https://yanbin.blog/vi-cursor-location-move/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Categories:
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments