Linux系统下vim基本操作

2169阅读 0评论2011-10-28 lcmust
分类:LINUX

01) 一般模式::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     j
    h l
     k
    C-p    同k
    C-n    同j
    w     下一个单词词首
    b     上一个单词词首
    e     下一个单词词尾
    ge    上一个单词词尾
    f    在当前行向右查找某个字符,光标在目标字符上
    F    在当前行向左查找某个字符,光标在目标字符上
    t    在当前行向右查找某个字符,光标在目标字符之前
    T    在当前行向左查找某个字符,光标在目标字符之前
    3fa    向右查找第3个a字符,";"向同方向重复,
    3Fb    向左查找第3个b字符,","向反方向重复
    50%    光标移动到文档的百分比位置
    (/)    上一句首/下一句首
    {/}    上一段首/下一段首
    [[    上一{
    ]]    下一{
    ][    下一}
    []    上一}
    [{      跳到{}块首{,同%
    ]}      跳到{}块尾},同%
    %    在匹配(){}[]的括号首尾切换
    +    下一行行首非空格符(同Enter)
    -    上一行行首非空格符
    H    屏幕顶
    M    屏幕中
    L    屏幕尾
    G    文件尾
    gg    文件首
    nG    第n行
    n    向右移动n个字符
    n    向下移动n行
    C-f    前翻页
    C-b    后翻页
    C-d    前翻页页
    C-u    后翻半页
    C-e    屏幕前卷一行
    C-y    屏幕后卷一行
    C-x    光标处数字减1
    C-o     往前跳转到上一个跳转点
    C-i     往后跳转到下一个跳转点
    ``    跳转到上次起跳的位置
    ''    跳转到上次起跳的位置的行首(停留行)
    '.     移动光标到上一次的修改行(修改行)
    `.     移动光标到上一次的修改点(修改点)
    注意:对此命令而言,只要执行一个命令使光标定位到当前行外的某一行去,都叫跳转;像搜索类命令/和n都叫做跳转,但字符搜索类命令f和t等、以word为单位的移动光标命令w和e等、以及j、k命令都不叫跳转。
    >>    右缩进
    <<    左缩进
    0    行首
    ^    行首首字符
    $    行尾字符
    x    删除光标处字符
    nx    删除光标后n个字符
    X    删除光标前字符
    nX    删除光标前n个字符
    dd    删除光标所在整行
    D    删除从当前光标位置开始的整个行
    J    合并光标所在行与下一行
    a    进入插入模式并追加到光标后面
    A    进入插入模式并追加到当前行末尾
    i    进入插入模式并在当前光标处插入
    I    进入插入模式并在当前行的开始处插入
    c    更改选中的区域
    C    更改从光标当前位置开始的整个行
    o    光标当前位置下增加新的行,并进入编辑模式
    O    光标当前位置上增加新的行,并进入编辑模式
    r    替换光标当前位置的单个字符
    R    替换从光标当前位置开始的多个字符,并在退出插入模式时结束
    s    删除当前光标处字符,并进入编辑模式
    S    删除光标处整行,并进入编辑模式
    p    将复制的数据粘贴到光标之后
    P    将复制的数据粘贴到光标之前
    u    撤消最后的更改
    C+R    重做
    ndd    删除光标向下n行
    d1G    删除光标所在行到第1行
    dG    删除光标所在行到文件尾
    dh    删除光标左1字符
    dl    删除光标右1字符
    daw    删除光标右1单词
    diw    删除光标左1单词
    das    删除光标右1句子
    dis    删除光标左1句子
    dip    删除光标右1段
    dap    删除光标左1段
    yy    复制光标所在行
    Y    复制整行 ( yy )
    y1G    复制光标所在行到第1行
    yG    复制光标所在行到文件尾
    yfa     拷贝从当前光标到光标后面的第一个a字符之间的内容
    dfa     删除从当前光标到光标后面的第一个a字符之间的内容
    ~    将光标处的字符切换成大(小)写,移动光标到下一字符处
    q:    打开命令行窗口(可浏览历史命令。)
    *(#)    当光标停留在某个单词上时,  查找与该单词匹配的下(上)一个单词
    g*(g#)    与上条命令相似, 查找匹配包含该单词的所有字符串
    gd    本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的注释段外首次出现处
    /     表示向下查找,n 查找下一个匹配
    ?     表示向上查找,N 反方向查找
      快速处理 '、"、()、[]、{}、<> 等配对标点符号中的文本内容,包括更改、删除、复制等。
    1) ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
    2) di'、di"、di(、di[、di{、di< - 分别删除这些配对标点符号中的文本内容
    3) yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
    gC-g    单词统计
    K    查找"光标处的单词"的man帮助文档
    zNN    将屏幕的显示缓冲高度设置为NN行
    z    屏幕上移,光标所在行作为屏幕顶行,光标移动到行首非空字符
    zt    屏幕上移,光标所在行作为屏幕顶行,
    z.    屏幕中移,光标所在行作为屏幕中间行,光标移动到行首非空字符
    zz    屏幕中移,光标所在行作为屏幕中间行,
    z-    屏幕下移,光标所在行作为屏幕底行,光标移动到行首非空字符
    zb    屏幕下移,光标所在行作为屏幕底行,
    ze    屏幕右移,光标处于行尾
    zs    屏幕左移,光标处于行首
    zh    屏幕右移,
    zl    屏幕左移,
    ZZ    保存退出
    ZQ    不保存,退出

02) 折叠::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    :1,5fo    折叠1到5行
    zfap    折叠一段
    v选定范围后zf        折叠选定范围
    zf      F-old creation (创建折叠)
    zo      O-pen a fold (打开折叠)
    zc      C-lose a fold (关闭折叠)
    zr    R-educe打开1层的若干个折叠(不含嵌套)
    zm    M-ore关闭1层的若干个折叠(不含嵌套)
    zR    打开嵌套折叠(全文,折叠内折叠)展开全文
    zM    关闭嵌套折叠(全文,折叠内折叠)收起全文中的折叠
    zC    关闭光标处嵌套折叠(折叠内折叠)
    zO    打开光标处嵌套折叠(折叠内折叠)
    zf5j    折叠当前行与之后5行
    zf4k    折叠当前行与之前4行
    6zF    折叠光标处与下共6行
    zd1    删除折叠标记1
    zd    删除光标所在位置的折叠
    zD    删除光标处的所有嵌套折叠(折叠内折叠)
    zE    删除窗口中所有折叠
    za    展开/折叠转换
    zA    展开/折叠转换(嵌套)


03) 编辑模式::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    C-o    临时执行一条命令
    C-\ C-o    同上
    C-c    同ESC退出编辑模式
    C-[    同ESC退出编辑模式
    C-h    删除光标前1字符
    C-w    删除光标前1单词
    C-u    删除光标前所有字符
    C-z    临时切换到shell
    C-t    将本行右缩进
    C-d    将本行左缩进
    C-y    按光标所处列的上一行处的字符重复输入
    C-e    按光标所处列的下一行处的字符重复输入
    C-rX    在编辑模式下粘贴寄存器X中的内容    
    C-k??    在编辑模式下插入特殊字符? ?(:digraphs 查看所有特殊字符)
    C-a    重复插入上次在插入模式下输入的文本(第1次插入模式下输入文本,,移动光标到下一个插入位置,,,将在第2个光标位置重复插入第1次插入模式下输入的文件)
    C-@    同上,重复插入上次在插入模式下输入的文本,并退出编辑模式
    

    C-x    进入C-X模式
    C-X模式基本上是用来自动匹配的。
    vim可以自动匹配完成的内容包括:
    C-x C-l    整行自动匹配:C-l继续匹配下一行
    C-x C-i    在头文件中查找匹配单词
    C-x C-f    在系统中搜索路径/文件名匹配
    C-x C-]    在tag中补全单词
    C-x C-d    在头文件中查找宏定义    
    C-x C-k    在词典中搜索匹配单词
    C-x C-t    在近义词词典中搜索匹配单词
    C-x C-v    显示Vim命令行
    C-x C-e    在插入模式下让屏幕往上滚一行
    C-x C-y    同上,屏幕下滚一行
    C-p    在全文中自动匹配单词:匹配下一个
    C-n    在全文中自动匹配单词:匹配上一个
        将光标移动到本行之外的命令,即一个“跳转”
        j/k不作“跳转”
    C-o    光标跳转一个“较老”位置
    C-i    光标跳转一个“较新”位置
    左Alt-h/j/k/l    光标左/下/上/右移动,并退出编辑模式
    左Alt-0    光标移到行首,返回命令模式
    左Alt-$    光标移到行尾,返回命令模式

04) 末行命令模式::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
04-01) 末行命令模式下编辑快捷键:
    C-b    命令行行首
    C-e    命令行行尾
    C-u    删除光标前所有字符
    C-h    删除光标前1字符
    C-w    删除光标前1单词
    C-c    退出命令行模式
    Alt-h/j/k/l    退出编辑,取消命令行模式
04-02) 末行命令模式:
    :.,.+5w file    从当前行开始将6行内容存入文件file
    :1,$w! file    将全文件内容强制存入file
    :.,$d        删除当前行至文件尾的内容
    :,24y           表示拷贝光标所在行到第24行之间的内容
    :12,y           表示拷贝第12行到光标所在行之间的内容
    :6,9 co 12    复制第6行到第9行之间的内容到第12行后面
    光标移到起始行,输入ma
    光标移到结束行,输入mb
    光标移到粘贴行,输入mc
    :'a,'b co 'c    把 co 改成 m 就成剪切了
    :'a,'b m 'c    剪切+粘贴
    :5, 9 de    删除多行

    :abbr      即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个字符串
        比如编写java文件的常常输入 System.out.println, 这很是麻烦
        所以应该用缩写来减少敲字. 可以这么做:
    :abbr sprt System.out.println
        以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.out.println6.
    :g/^\s*$/d      删除所有不包含字符的空行(内容为空格或制表符的行也算空行)
    :g/^$/d        删除空行(内容为空格或制表符的行不算空行,将保留)

    :set number    显示行号
    :set nonumber    
    :set ignorecase 忽略大小写
    :set incsearch    查找时输入字符串过程中匹配即显示
    :set noncsearch    
    :set hlsearch    高亮显示匹配
    :set nohlsearch
    :set filetype=c/txt/...    设置文件类型
    :set backgroud=dark/light    设置背景色
    :syntax enable    语法加亮
    :syntax clear    关闭色彩显示文本
    :syntax off    完全关闭使用色彩
    :set syntax=ON    激活语法加亮功能
      :set autoindent    自动缩进
    :set showmatch    显示匹配
    :set matchtime=15    等待1.5秒显示匹配
    :display X    显示寄存器X的内容
    :reg        显示寄存器
    :digraphs    显示特殊字符
    :set tabstop=3    改变制表符
    :file    显示当前打开的文件(缓冲区列表) (  C-g )
    :ls    显示当前打开的多文件(缓冲区列表)
    :buffers 显示当前打开的多文件(缓冲区列表)
    :N    切换到同时打开的多文件中的上一个文件
    :n    切换到同时打开的多文件中的下一个文件
    :bp    循环切换到打开的多文件中的上一个文件
    :bn    循环切换到打开的多文件中的下一个文件
    :bf    切换到打开的多文件中的第一个文件
    :bl    切换到打开的多文件中的最后一个文件
    :bd [N]    删除当前文件(缓冲区列表N)
    :bdelete bufname    删除指定缓冲区列表中文件
    :bdelete N1 N2        删除缓冲区列表中多个列表编号
    :N,Mbdelete    删除缓冲区列表中从N到M
    :badd    增加一个新的文件到缓冲区列表中
    :sbl    将多文件缓冲区列表中的最后一个文件显示到新的窗口中
    :sbf    将多文件缓冲区列表中的第一个文件显示到新的窗口中
    :qall    退出所有窗口
    :wall    保存所有窗口
    :wqall    保存并退出所有窗口
    :qall!    不保存退出所有窗口
    :e!    放弃修改,重新打开文件
    :!    在 Vim 会话外执行 '
    :q    不保存,退出
    :q!    不保存,并强制退出
    :x    保存并退出
    :wq    保存并退出
    :w !sudo tee %    普通用户编辑并保存超级用户权限的文件
    
04-03) 标签页
    :tabnew filename 在新的标签页中打开文件
    :tabe    filename 同上
    :tabc    关闭当前标签页
    :tabp    切换到前一标签页中
    :tabn    切换到后一标签页中
    :tabm N    将当前标签页编号(排序)

04-04) 多窗口编辑多文件
    :sp(:vsp) 文件名    vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
                      从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会
                      把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打
                      开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看
                      到帮助信息.
    :split 文件名    同时在一个屏幕中分屏(横屏)显示多个文件的内容,类似多窗口
    :vsplit 文件名    同时在一个屏幕中分屏(竖屏)显示多个文件的内容,类似多窗口
    :e 文件名           vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.
    :set diff    多窗口中比较文件
    c-w-w    将光标循环定位到各个窗口之中
    c-w-f    切分显示光标处的单词作为文件名
              VIM 会在 path 中搜索该文件名,比如常用它打开 #include 语句中的文件
    c-w-_   当同时打开几个文件时,按 _ 使当前窗口最大化
    C-w命令指定光标移动
    C-w +    扩大窗口
    C-w -    缩小窗口
    C-w =    将所有窗口恢复到默认大小
    C-w f    将当前光标处的字符作为文件名,在新的窗口中打开
    C-w gf    将当前光标处的字符作为文件名,在新的标签中打开
    C-w h    移动到左窗口
    C-w j    移动到下窗口
    C-w k    移动到上窗口
    C-w l    移动到右窗口
    C-w H    将当前窗口的位置重新排列到所有窗口的左方
    C-w J    将当前窗口的位置重新排列到所有窗口的下方
    C-w K    将当前窗口的位置重新排列到所有窗口的上方
    C-w L    将当前窗口的位置重新排列到所有窗口的右方
    C-w q    退出当前窗口
    C-w o    关闭当前窗口之外的其它所有窗口
    C-w n    打开一个新的空白窗口
    C-w c    关闭当前窗口
    C-w T    多个窗口时,将当前窗口作为一个新的标签中打开
    :windo {command}    在所有窗口中同时执行命令
    :ls    看本 vim 程序已经打开了多少个文件, 在屏幕的最下方会显示出如下数据:
                      1   %a      "usevim.html"         行 162
                      2   #       "xxxxxx.html"         行 0
                      其中:
            1    表示打开的文件序号, 这个序号很有用处.
               %a    表示文件代号, % 表示当前编辑的文件,
            #     表示上次编辑的文件
            "usevim.html"   表示文件名.
            行 162          表示光标位置.

    :b 序号(代号)    此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)
                      就是用 :ls 命令看到的.

    :set diff    此命令用于比较两个文件,在每个文件窗口中输入此命令
    在启动vim时,可用"vim -o file1.a file2.b“在上下2个窗口中同时编辑多个文件
    用"vim -O file1.a file2.b" 在左右2个窗口中同时编辑多个文件

04-05) 宏替换(快捷键)
    vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,
因此我把它们定义到 - 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc
(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.
     map <要映射键> <被映射的按键序列>
    :map  e             ea              定义键e为按键序列ea
    :map      显示已定义快捷键
    :mapclear   清除所有已定义快捷键
    :nmap是:map的普通模式板,也就是说其绑定的键只作用于普通模式。
    :unmap e     取消定义a
    :nmap :nohls              取消被搜索字串的高亮
    :nmap w                  命令模式下转移光标到不同窗口
    :imap                输入模式下运行
    :nmap :%s= *$==          删除所有行尾多余的空格.
    :imap              同上

    :java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文
            会说到如何实现这一点)
    :nmap :comp javac:mak -d . %
       此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定
       义一个 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有两行字:
          setlocal makeprg=javac
          setlocal errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#

    :nmap :comp ant:mak
       此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装
       vim 后已经有了compiler/ant.vim文件, 因此这个命令可以直接使用. 但是需要
       在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行.

    :nmap :cl                 此命令用于查看所有的编译错误.
    :imap
    :nmap :cc                 此命令用于查看当前的编译错误.
    :imap
    :nmap :cn                 此命令用于跳到下一个出错位置.
    :imap
    :nmap :cp                 此命令用于跳到上一个出错位置.
    :imap
    :nmap :JavaBrowser
       此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括
       本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.
       在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.
    :imap

04-06) 制表符TAB
    <<                  输入此命令则光标所在行向左移动一个 tab.
    >>                  输入此命令则光标所在行向右移动一个 tab.
    5>>                 输入此命令则光标后 5 行向右移动一个 tab.
    :12,24>             此命令将12行到14行的数据都向右移动一个 tab.
    :12,24>>            此命令将12行到14行的数据都向右移动两个 tab.

   那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是tab. 没关系, vim 能帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.

    :set shiftwidth=4   设置自动缩进 4 个空格, 当然要设自动缩进先.
    :set sts=4          即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
    :set tabstop=4      实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
    :set expandtab      在输入 tab 后, vim 用恰当的空格来填充这个 tab.


文件格式自动匹配autocmd    这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.
    :autocmd!               删除所有之前的自动命令.
    autocmd FileType        java  source ~/.vim/files/java.vim
    autocmd FileType        java  source ~/.vim/files/jcommenter.vim
    以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.    
    autocmd BufNewFile      *.java  0r ~/.vim/files/skeletons/java.skel
    以上这条命令让我在新建java 文件时自动加入 java.skel 文件的内容.
    autocmd BufNewFile      *.java  normal gnp    以上这条命令让我在新建java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.

04-07) 视图模式下注释整块内容
    C-v> 选定要注释掉的行
    列块选定后I是在前边都插入,A是在后边都插入
    之后输入的东西就是插入到选定的行前边(后边)的,直至Esc.
    删除整块的注释时,
    C-v> 选定整块的注释//, 再按d删除
    v选定范围后=   对选定范围内自动格式(适用于编程)


04-08) 寄存器操作
    Vim可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴

    "<寄存器名称>   按下 " 键和另一个字符键,便可以定义一个寄存器。例如:
    "a  "1
    定义寄存器后直接进行操作
    "ayy    将当前行复制到寄存器 a 中
    "ap     将寄存器 a 中的内容粘贴到光标之后
    "ayy    "ayy复制当前行(整行)到寄存器a中
    "AY    "Ayy追加当前行到寄存器a中
    3"Ayy    追加3行到寄存器a中
    "Ay3j    追加3行到寄存器a中(同上)
    5"ayy    复制五行内容至寄存器a。
    5"Ayy    再复制五行附在寄存器a内容之后,现在寄存器a中有十行内容了!
        * 通常情况下,寄存器 + ( " + Shift+= )对应X下的剪贴板。您在其它程序中复制的内容,可以使用 "+p 粘贴到Vim中;
          您在Vim中,可以使用 "+y 将内容复制到剪贴板,再粘贴到其它程序中
        * 没有指定寄存器时,Vim使用“无名寄存器”存储内容

    使用撤销分支功能

    可以使用 :undolist 命令查看缓冲区存在的撤销分支列表。而通过 :undo <> 命令则能够移到撤销的某个分支。

寄存器的主要有以下几种:
a. The unnamed register ""
   "d", "c", "s", "x" 和 "y" 等涉及删除或拷贝的命令都会将内容存放于此(有例外)。

b. 10 numbered registers "0 to "9          
   0 为最近拷贝的内容,1-9 为最近删除的内容。
   指定 named register 时不会存放于此。

c. The small delete register "-
   删除不多于一行的内容会存在于此。

d. 26 named registers "a to "z or "A to "Z
   小写与大写的区别是,小写是覆盖方式,大写是添加方式。

e. four read-only registers ":, "., "% and "#
   ". 存放上次插入的文本
      有什么用?呵,例如,你输入了一段文本,在另一个地方也要有相同的内容,你输完后,一般要选择并复制一下吧?而用这个,直接移到需要插入的地方,i. 即可。

   "% 是当前编辑文件全名,vim 中,% 就是代表当前编辑文件名的变量,不过,一般直接用 % 就行,例如":!cat %",vim 会自动扩展。
   "# 是alternate file 名称 (这个我不知道)
   ": 上次执行的命令,记起来比较容易,冒号就是命令行提示符嘛。这个有些什么用呢?在测试配置文件时十分有用,先在命令行输入命令,调试好后,在 insert mode 里按C-R : 就可将该命令插到文件中。

f. the expression register "=
      表达式寄存器,可以输入一个表达式,并插入结果。

g. The selection and drop registers "*, "+ and "~

      跟 gui 即 X/Windows 剪贴板有关的变量。
      在 X 中,鼠标中键与系统剪贴板不一样,至于区别,大家自己试验一下,这里给个提示,在命令行下输入 reg 可以列出所有寄存器的内容。

h. The black hole register "_

      黑洞

i. Last search pattern register "/

      上次搜索的内容。例如,我要搜索一个单词 linuxforum,但我比较懒,先输入 /linux,发现出现很多个 linux,多次按 n 无果,难道要重新输入 /linuxforum ? 不用,只需要 //forum 即可。呵,聪明的你一定想到了,用命令行历史也可以调来,按 C-p 或 C-n即可上下翻阅。这样也可以嘛,也比较快捷,但要查找 forumlinux 呢?

      用 C-r 的话只需 /forum/ 。

    在使用X Window系统时,有两个特殊的寄存器是需要注意一下的:”"*”访问的寄存器是X的主选择区域

(primary selection),”"+”访问的寄存器是X的剪贴板(clipboard)。

=====================================

存入寄存器:

1)在visual模式下,输入:”寄存器y”

2)录制的时候:输入:“q{regsiter}”,使用:在normal模式下,按“@{regsiter}”
================================

调用寄存器:

在插入模式里,按C+r,再按寄存器名,如调用寄存器a:

C+r,a就可以了。

======================================
vim常用的寄存器:
‘”‘     无名寄存器,包含最近删除或抽出的文本
‘%’     当前文件名
‘#’     轮换文件名
‘*’     剪贴板内容 (X11: 主选择)
‘+’     剪贴板内容
‘/’     最近的搜索模式
‘:’     最近的命令行
‘.’     最近插入的文本
‘-’     最近的行内 (少于一行) 删除
‘=’     表达式寄存器;你会被提示输入一个表达式
==============================================


04-09) 自定义的标记
    m{mark}     用{mark} 标记当前的光标位置。你可以在文本中使用 26 个标记(a到z)。这些标记是不可见的,只
是一个由 Vim 记住的位置。
    打开了多个文件时,可以用A-Z来标记不同文件的不同标记,在不同的文件中跳转。
    `{mark}     {mark} 是指定义标记的那个字母。所以,移到标记a的命令是: 'a
    'mark        (单引号加上一个标记)会移到标记所在行的行首
    :marks    显示标记列表
    ``            跳转之前的位置
    ''            跳转之前的位置的行首

使用宏来做一些重复工作
    q{mark}:使用q键然后跟一个a–z键,就可以开始记录键盘动作。
    q:在记录键盘动作开始之后,再次按下q键,就停止记录。

    @{mark}:使用@键然后跟一个a–z的字母,就会触发你刚才的记录的键盘动作。
    @@:键入连续两个@@就可以重复上次的宏。

vim_gcc(help quickfix)在vim编辑器中进入编译程序
    :set makeprg=gcc\ -Wall\ -otest\ test.c\ -std=c99\ -g
    使用\是对空格进行转义
    :make    vim自动按照makeprg选项定义的进行编译,并把编译输出重定向到一个临时文件中,当编译出错时,vim会从上述临时文件中读出错误信息,形成quickfix列表,并跳转到第一个错误地方。
    quickfix模式常用命令:
    :cc    显示详细错误信息
    :cp    跳到上一个错误
    :cn    跳到下一个错误
    :cl    列出所有错误
    :cw    如果有错误列表则打开quickfix窗口
    :cold    到前一个较旧的错误列表
    :cnew    到后一个较新的错误列表



05) SourceInstall:::::::::::::::::::::::::::::::::::::::::::::::::::::::
tar xjvf /mnt/sda5d/Linux/Software/vim-7.3.tar.bz2 -C /tmp
cd /tmp/vim-7.3/
./configure --prefix=/usr/local/vim73  --enable-cscope  --enable-tclinterp  --enable-rubyinterp  --enable-sniff  --enable-multibyte  --enable-hangulinput  --enable-gnome-check
make && make install

用户自定义配置~/.vimrc
filetype plugin on
filetype indent on
syntax on
set number
"set fileencodings=utf8,gb18030,gbk,gb2312,latin1,ucs-bom,default
set fileencodings=utf8,gb18030,gbk,gb2312,latin1,ucs-bom,default

用vim编辑远程文件:
vim ftp://love@192.168.135.2/sda5d/fglrx-install.log
REMOTE EDITING
        :e dav://machine[:port]/path                    uses cadaver
        :e fetch://[user@]machine/path                  uses fetch
        :e ftp://[user@]machine[[:#]port]/path          uses ftp   autodetects <.netrc>
        :e http://[user@]machine/path                   uses http  uses wget
        :e rcp://[user@]machine/path                    uses rcp
        :e rsync://[user@]machine[:port]/path           uses rsync
        :e scp://[user@]machine[[:#]port]//path/file    uses scp
        :e sftp://[user@]machine/path                   uses sftp

REMOTE READING
        :Nread ?                                        give help
        :Nread "machine:path"                           uses rcp
        :Nread "machine path"                           uses ftp   with <.netrc>
        :Nread "machine id password path"               uses ftp
        :Nread "dav://machine[:port]/path"              uses cadaver
        :Nread "fetch://[user@]machine/path"            uses fetch
        :Nread "ftp://[user@]machine[[:#]port]/path"    uses ftp   autodetects <.netrc>
        :Nread "http://[user@]machine/path"             uses http  uses wget
        :Nread "rcp://[user@]machine/path"              uses rcp
        :Nread "rsync://[user@]machine[:port]/path"     uses rsync
        :Nread "scp://[user@]machine[[:#]port]/path"    uses scp
        :Nread "sftp://[user@]machine/path"             uses sftp

REMOTE WRITING
        :Nwrite ?                                       give help
        :Nwrite "machine:path"                          uses rcp
        :Nwrite "machine path"                          uses ftp   with <.netrc>
        :Nwrite "machine id password path"              uses ftp
        :Nwrite "dav://machine[:port]/path"             uses cadaver
        :Nwrite "ftp://[user@]machine[[:#]port]/path"   uses ftp   autodetects <.netrc>
        :Nwrite "rcp://[user@]machine/path"             uses rcp
        :Nwrite "rsync://[user@]machine[:port]/path"    uses rsync
        :Nwrite "scp://[user@]machine[[:#]port]/path"   uses scp
        :Nwrite "sftp://[user@]machine/path"            uses sftp
        http: not supported!

REMOTE DIRECTORY BROWSING
        :e [protocol]://[user]@hostname/path/
        :Nread [protocol]://[user]@hostname/path/

LOCAL DIRECTORY BROWSING
        :e /some/path/to/a/directory
                                                                 

06) 从2011-07开始转向使用emacs编辑器,vim只在修改服务配置文件时使用。其它如编辑学习文档或者脚本编程时使用emacs。
上一篇:Linux系统下emacs基本操作(20130707-1700更新)
下一篇:C语言运算符优先级