Vim notes
2006-12-01 23:10
///很简单的一些基本功能

滚屏
CTRL-U    使文本向下滚动半屏。
CTRL-D  使文本向下滚动半屏。

CTRL-F    使文本向前滚动一整屏。(实际上是整屏去两行)
CTRL-B    使文本向后滚动一整屏。

CTRL-E  使文本向上滚动一行。
CTRL-F    使文本向下滚动一行。(如果在使用windows兼容的映射键,它可能被映射为重做而
    不是向下滚屏)

zz    会把当前行置为屏幕正中央
zt    会把当前行置为屏幕顶端。
zb    会把当前行置为屏幕底端。

z字取其象形意义模拟一张纸的折叠及变形位置重置,广泛用作折叠类命令的前辍

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p    将最后一次删除(包括dd和x删除的)的内容置入光标之后  (cut->paste)

r    和一个字符替换光标所在位置的字符。
R    连续替换多个字符,直到按ESC回到普通模式

cw    改变一个单字/单词的部分或者全部

      使用c指令的其他更改类命令:
        操作格式是∶    [number]   c   object      
        或者        c    [number]   object
          object: w 代表单字/单词,$代表行末等等。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ctrl-g             显示当前光标所在位置和文件状态信息
Shift-G            将光标跳转至文件最后一行
行号 + Shift-G  将光标移动至该行号代表的行。

CTRL-G        显示文件名、当前行号、总的行数、当前行所在文件中的百分比、当前列.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
查找:
    /xxx(?xxx)    向后查找xxx(向前);
    n        在同一方向上重复上一次,其前可以带一个数字
    N        反方向重复上一次

    %        查找配对的括号 )、]、}

注:    1、字符.*[]^%/?~$有特殊意义,如果要找的东西包括这些内容,要在该字符前加\

    4、输入/后(或者输入/和要查找字符串的首字符后),按上下箭头键可以在查找历史
       中查找过的搜索。

       注: 以":"开始的命令也有一个历史记录. 它让你找到用过的冒号命令重复执行
        它. 这两个命令历史记录是相互独立的.

          5、如果要查的词word是一个不容易输入且易出错的词,一个便捷的方法是把光标定
       位于这个word上, 然后按下"*"键。Vim将会取当前光标所在的word并将它作用目
       标字符串进行搜索。"#"命令是"*"的反向版. 还可以在这两个命令前加一个命令
       计数。

          6、查找以word作为词的末尾时使用“/word\>”。"\"是一个特殊的记法, 它只匹配
       一个word的结束处.近似地,"\"匹配到一个word的开始处。所以如果查找作为一
       个独立的单词的word,可以用"/\<word\>",这样就不会匹配"there"和"soothe"。

          7、关于搜索结果的高亮显示等,参见下面的 :set xxx 命令。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
替换:
    :s/old/new    将当前行内 第一个 old 替换为new

    :s/old/new/g    将当前行内 所有   old 替换为new
    :s/\<aa\>/bb/g  将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词

    :#,#s/old/new/g    将两个号码代表的行号之间的所有 old 替换为 new
      :12,23s/^/#/    将从12行到23行的行首加入 # 字符

    :%s/old/new/g    将 文件内 所有 old 替换为 new
    :%s/old/new/gc    将 文件内 所有 old 替换为 new,每个替换时询问

    :%s= *$==       将所有行尾多余的空格删除
    :g/^\s*$/d      将所有不包含字符(空格也不包含)的空行删除.

$         将光标移动到本行的末尾。

:!command    执行一个外部命令 command
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
文件读写:
    :w FILENAME    当前编辑的文件保存到名为 FILENAME 的文件中
    :#,#w FILENAME    当前编辑的文件的两个行号之间的内容保存到名为 FILENAME 的文件中

    :r FILENAME    提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置后面

:set xxx    设置 xxx 选项,如

    :set ic   (ignore case)忽略大小写
    :set ignorecase    忽略大小写
    :set noignorecase

    :set hls    (highlight search)高亮显示搜索结果
    :set hlsearch   同上
    :set nohlsearch 关闭高亮搜索

    : nohlsearch    只去掉当前的高亮显示,它只是暂时关闭了该语法项高亮显示,
            一旦你再次执行搜索指令,被匹配到的目标就又会以高亮形式显
            示了

    :set is     (incsearch)在键入目标字符串的过程中Vim就同时开始了搜索工作
    :set incsearch    同上

    :set nowrapscan    使搜索过程在文件结束时就停止。反向时到达文件开始时停止。
            wrapscan选项的默认值是开。

      和查找“/”命令配合,可以使所有要查的内容以高亮显示

    :set number    在每行的前面显示一个行号。
    :set nonumber    关闭该选项

    注:no放置在boolean选项前面表示关闭该选项,如"number"是一个二值选项

    :set ruler    在Vim窗口的右下角显示当前光标位置

    网络上有很多文档, 以Vim查看时如果set number, 则每行会超出屏幕少许,从而被折
叠放到下一行上, 看起来很不方便, 这时就可以使用:set nonumber ruler, 如果还是坚持
想打开number, 可以考虑重新格式化文本, 请参考|gq|

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在线帮助
    - 按下 <HELP> 键 (如果键盘上有的话)
    - 按下 <F1> 键 (如果键盘上有的话)
    - 输入    :help <回车>
      提供一个正确的参数给":help"命令,您可以找到关于该主题的帮助,如:help w

               第八讲∶创建一个启动脚本

              ** 启用vim的功能 **

Vim的功能特性要比vi多得多,但大部分功能都没有缺省激活。为了启动更多的
功能,您得创建一个vimrc文件。

  1. 开始编辑vimrc文件,这取决于您所使用的操作系统∶

     :edit ~/.vimrc        这是Unix系统所使用的命令
     :edit $VIM/_vimrc        这是Windows系统所使用的命令

  2. 接着导入vimrc范例文件∶

     :read $VIMRUNTIME/vimrc_example.vim

  3. 保存文件,命令为∶

     :w

  在下次您启动vim的时候,编辑器就会有了语法高亮的功能。您可以继续把您喜
  欢的其它功能设置添加到这个vimrc文件中。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
移动命令:规律:一个命令的大写字母形式会做同样的事情,但是方向相反

$        命令将光标移动到当前行行尾.
$#        接受一个计数,表示移动到后面第n行行尾

^        命令将光标移动到当前行的第一个非空白字符上
0        总是把光标移动到当前行的第一个字符上

一个最有用的移动命令是单字符搜索命令:
;        重复.
,        也是重复同样的命令, 但是方向与原命令的方向相反

总结移动命令:
        无论如何, 这4个命令都不会使光标跑到其它行上去. 即使当前的句子还没有结束

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

fx        在当前行上查找下一个字符x(光标停留在被搜索字符上). "f"意为"find"
Fx        在当前行上查找上一个字符x(光标停留在被搜索字符上)
nf(F)x        移动到下(上)第n个x字符的位置

tx        同fx命令, 光标停留在被搜索字符之前的一个字符上. "t"意为"To"
Tx        同Fx命令, 光标停留在被搜索字符之前的一个字符上

注:    x也可以是一个汉字
    重复命令 ( ; 和 , )也可以用于此处

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

移动到指定行

G    把光标定位到最后一行上
#G    把光标定位到由#指定的行上.
    (对编译时转到出错的地方去很有用。还有更好的方法遍历错误信息列表,可参考:make命令的相关信息)

gg    跳转到第一行的快捷的方法。1G效果也是一样,但是敲起来就没那么顺手了

50%    把光标定位在文件的中间,...
   
   
如果只是想移动到目前显示在屏幕上的那些行,则下图展示了达到这一目标的几个命令:
        +---------------------------+
    H -->     | text sample text         |
        | sample text             |
        | text sample text         |
        | sample text             |
    M -->     | text sample text         |
        | sample text             |
        | text sample text         |
        | sample text             |
    L -->     | text sample text         |
        +---------------------------+
    "H"意为Home, "M"为Middle, "L"为Last.