Vim常用命令小记(7)——可视模式

进入和退出可视模式


v                         进入可视模式,以字符为单位选择。

V                         进入可视模式,以行为单位选择。

CTRL-V                进入列块可视模式。

gv                       启动可视模式,重新选择上一次的选择区和相同模式。
                          在可视模式下,该命令将交换当前和上一次选择区。
                          在可视模式下使用 "p" 或 "P" 后,本命令选择被粘贴的文本。

<LeftMouse>        设置当前光标位置。
                           如果处在可视模式,则退出可视模式。此功能只有在 'mouse' 选项包含 'n' 或 'a' 才可用。
                           如果点击位置与屏幕最后一行的距离在 'so' 选项设置的范围之内,屏幕文本将会上滚。
                           如果点击位置与屏幕第一行的距离在 'so' 选项设置的范围之内,屏幕文本将会下滚。

<RightMouse>      如果当前不是可视模式,则进入可视模式。
                           光标位置和鼠标点击位置之间的文本将被高亮显示。
                          如果当前已经处于可视模式,文本高亮选择区的起点或终点之一将被置为鼠标点击的位置。
                           起点或终点的选择取决于谁离点击位置更近。此功能只有在 'mouse' 选项包含 'n' 或 'a' 时才可用。

<LeftRelease>       如果 <LeftRelease> 的位置与 <LeftMouse> 不同,那么它的作用等同于 <LeftMouse>。
                          此功能只有在 'mouse' 选项包含 'n' 或 'a' 时才可用。

<Esc>                  可视模式下: 停止可视模式。

CTRL-C                可视模式下: 停止可视模式。
                           如果插入模式等待中 (模式信息显示为 "-- (插入) 可视 --"),插入模式同时被停止。

改变可视区域


o              跳到高亮文本的另一端
                即当前光标位置变成高亮文本的起点,光标移动到高亮文本的另一端。高亮区域保持不变。

O              跳到高亮文本的另一端。
                同 "o" 命令相似,但是在列块模式下,光标移动到水平方向的另一个角。
                如果这个角上的字符占据了多个屏幕位置 (例如一个 <Tab>),那么高亮的文本区域会被改变。

相关概念


对可视区域可以使用的操作符包括:
    ~        切换大小写
    d         删除
    c         修改
    y         抽出
    >        右移
    <        左移
    !         通过外部命令过滤
    =        通过 'equalprg' 选项的命令过滤
    gq       按照 'textwidth' 指定的宽度排版行

可用的对象包括:
    aw     一个单词 (包括空格)
    iw      内含单词
    aW    一个字串 (包括空格)
    iW     内含字串
    as      一个句子 (包括空格)
    is      内含句子
    ap     一个段落 (包括空格
    ip      内含段落
    ab     一个 () 块 (包括小括号)
    ib      内含 () 块
    aB     一个 {} 块 (包括大括号)
    iB     内含 {} 块
    at     一个 <tag> </tag> 块 (包含 tag)   
    it      内含 <tag> </tag> 块
    a<    一个 <> 块 (包括 <>)<|
    i<     内含 <> 块<|
    a[     一个 [] 块 (包括 [])[|
    i[      内含 [] 块[|
    a"     一个双引号字符串 (包括引号)
    i"      内含双引号字符串
    a'     一个单引号字符串 (包括引号)   
    i'      内含单引号字符串
    a`    一个反引号字符串 (包括反引号)
    i`     内含反引号字符串

其它可以使用的命令:
    :     为高亮的行启动 Ex 命令
    r      修改 (4)
    s      修改
    C     修改 (2) (4)
    S     修改 (2)
    R     修改 (2)
    x     删除
    D     删除 (3)
    X     删除 (2)
    Y     抽出 (2)
    p     放置
    J      连接 (1)
    U     变成大写
    u     变成小写
    ^]    查找标签
    I      列块插入
    A     列块添加

(1): 总是应用到整行。
(2): 如果不是使用 CTRL-V,应用到整行。
(3): 如果不是使用 CTRL-V,应用到整行。如果使用 CTRL-V,删除到行尾。
(4): 如果使用 CTRL-V,只对列块操作。

----------------------------------------

列块插入
      对一个列块可视模式下的选择区,I{string}<ESC> 命令将会从选择区开始的位置在每一行插入字符串 {string}。
      但是只有那些和选择区有交集的行才会被插入,因此过短的行将不受影响。
      如果选择区包含制表符,制表符将会被分开,以维持选择区的可视列不变。

列块添加
      对一个列块可视模式下的选择区,A{string}<ESC> 命令将会从选择区结束处开始在每一行插入字符串 {string}。
      当行的长短不同的时候,将导致选择区的右边界不是直线,这时候列块添加操作的行为就会有所不同:
      - 如果列块是用 <C-v>$ 命令产生的,字符串被附加到每一行的结尾。
      - 如果列块是用 <C-v>{move-around} 命令产生的,字符串将被附加到每一行列块的结尾。
        对于比较短的行,行尾和列块结尾列之间将以空白填充。


列块修改 (c)
      选择区的所有文本将被相同的字符串代替。
      当使用 "c" 命令的时候选择区的文本将被删除,然后进入插入模式。
      可以键入不带回车的文本。当你 <Esc> 的时候所键入的文本将被插入选择区的每一行。

列块修改 (C)
      同 "c" 命令,但是选择区将扩展到每一行的结尾。

列块平移
      列块按照 'shiftwidth' 指定的单位移动。与块的右边界无关。
      块的左边界决定了从哪一点开始右移,填充的空白根据 'ts' 和 'et' 设置的宽度最优化制表符的使用方式。
      块的左边界决定了左移的终止点。

列块替换
      高亮区域的每个字符被同一个字符代替。
      制表符将被分割,虚拟空白字符也将被替换,以保持屏幕布局。

重复
      当重复一个可视模式操作时,该操作将被应用到与上次操作相同数量的文本上:
      - 行可视模式: 相同数量的行。
      - 列块可视模式: 相同数量的行和列。
      - 选择区在一行之内的普通可视模式: 相同数量的字符。
      - 跨越多行的普通可视模式: 相同数量的行,最后一行的字符数与上次相同。
      重复操作的起始点在当前光标位置。
      如果重复的命令中包含 "$" 命令来扩展选择区,那么重复操作将应用到最长行的最右一列。

posted @ 2012-07-03 08:22  小兔有点乖  阅读(1281)  评论(0)    收藏  举报