zoukankan      html  css  js  c++  java
  • VIM常用快捷键整理 简单

    参考:

    1. http://www.cnblogs.com/zhanglong0426/archive/2010/10/07/1845268.html

    2. http://www.cnblogs.com/wangkangluo1/archive/2012/04/12/2444952.html

    1. 复制粘贴
    dd     删除光标所在行
    dw     删除一个字(word)
    x     删除当前字符
    X     删除前一个字符
    D     删除到行末
    yy     复制一行,此命令前可跟数字,标识复制多行,如6yy,表示从当前行开始复制6行
    yw     复制一个字
    y$     复制到行末
    p     粘贴粘贴板的内容到当前行的下面
    P     粘贴粘贴板的内容到当前行的上面
    ]p     有缩进的粘贴,vim会自动调节代码的缩进

    2. 移动光标

    h,j,k,l     上,下,左,右
    ctrl-f     上翻一页
    ctrl-b     下翻一页
    %     跳到与当前括号匹配的括号处,如当前在{,则跳转到与之匹配的}处
    w     跳到下一个字首,按标点或单词分割
    W     跳到下一个字首,长跳,如end-of-line被认为是一个字
    e     跳到下一个字尾
    E     跳到下一个字尾,长跳
    b     跳到上一个字
    B     跳到上一个字,长跳
    0     跳至行首,不管有无缩进,就是跳到第0个字符
    ^     跳至行首的第一个字符
    $     跳至行尾
    gg     跳至文件的第一行
    gd     跳至当前光标所在的变量的声明处
    [N]G     跳到第N行,如0G,就等价于gg,100G就是第100行
    fx     在当前行中找x字符,找到了就跳转至
    ;     重复上一个f命令,而不用重复的输入fx
    tx     与fx类似,但是只是跳转到x的前一个字符处
    Fx     跟fx的方向相反
    ),(     跳转到上/下一个语句
    *     查找光标所在处的单词,向下查找
    #     查找光标所在处的单词,向上查找
    `.     跳转至上次编辑位置
    在屏幕上移动
    H     移动光标到当前屏幕上最上边的一行
    M     移动光标到当前屏幕上中间的一行
    L     移动光标到当前屏幕上最下边的一行

    3. 编辑
    r     替换一个字符

    R    替换多个字符

    J     将下一行和当前行连接为一行
    cc     删除当前行并进入编辑模式
    cw     删除当前字,并进入编辑模式
    c$     擦除从当前位置至行末的内容,并进入编辑模式
    s     删除当前字符并进入编辑模式(s4s删除4个字符)
    S     删除光标所在行并进入编辑模式
    xp     交换当前字符和下一个字符
    u     撤销
    ctrl+r     重做
    .     重复上一个编辑命令
    ~     切换大小写,当前字符

    gu     变成小写

    gU     变成大写
    g~iw     切换当前字的大小写
    gUiw     将当前字变成大写
    guiw     将当前字变成小写
    >>     将当前行右移一个单位
    <<     将当前行左移一个单位(一个tab符)
    ==     自动缩进当前行

    4. 插入模式
    i     从当前光标处进入插入模式
    I     进入插入模式,并置光标于行首
    a     追加模式,置光标于当前光标之后
    A     追加模式,置光标于行末
    o     在当前行之下新加一行,并进入插入模式
    O     在当前行之上新加一行,并进入插入模式

    5. 可视模式
    标记文本
    v     进入可视模式,单字符模式
    V     进入可视模式,行模式
    o     跳转光标到选中块的另一个端点
    U     将选中块中的内容转成大写
    O     跳转光标到块的另一个端点
    aw     选中一个字
    ab     选中括号中的所有内容,包括括号本身
    aB     选中{}括号中的所有内容
    ib     选中括号中的内容,不含括号
    iB     选中{}中的内容,不含{}
    对标记进行动作
    >     块右移
    <     块左移
    y     复制块
    d     删除块
    ~     切换块中内容的大小写

    6. 搜索

    /    向下搜索 (search forward)
    ?    向上搜索 (search back)
    #    光标下反向搜索关键词 (search the word under cursor backward)
    *    光标下正向搜索关键词 (search the word under cursor forward)

    %    查找下一个结束,例如在”(“下查找下一个”)”,可以找”()”, “[]” 还有shell中常用的 if, else这些 (find next brace, bracket, comment or #if/#else/#endif)

    看几个示例:
    /a*    这个会搜到 a aa aaa
    /\(ab\)*    这个会搜到 ab abab ababab
    /ab\+    这个会搜到 ab abb abbb
    /folers\=    这个会搜到 folder folders
    /ab\{3,5}    这个会搜到 abbb abbbb abbbbb
    /ab\{-1,3}    这个会在abbb中搜到ab (will match ab in abbb)
    /a.\{-}b    这个会在axbxb中搜到axb (match ‘axb’ in ‘axbxb’)
    /a.*b    会搜索到任何a开头后面有b的 (match a*b any)
    /foo\|bar    搜索foo或者bar,就是同时搜索2个词 (match ‘foo’ or ‘bar’)
    /one\|two\|three    搜索3个词 (match ‘one’, ‘two’ or ‘three’)
    /\(foo\|bar\)\+    搜索foo, foobar, foofoo, barfoobar等等 (match ‘foo’, ‘foobar’, ‘foofoo’, ‘barfoobar’ … )
    /end\(if\|while\|for\)    搜索endif, endwhile endfor (match ‘endif’, ‘endwhile’, ‘endfor’)

    更多例子,例如搜索车牌规则,假设车牌是 “1MGU103” 也就是说,第一个是数字,3个大写字幕,3个数字的格式。那么我们可以直接搜索所有符合这个规则的字符
    (A sample license plate number is “1MGU103″. It has one digit, three upper case
    letters and three digits. Directly putting this into a search pattern)
    这个应该很好懂,我们搜索
    \数字\大写字母\大写字母\大写字母\数字\数字\数字

    /\d\u\u\u\d\d\d

    另外一个方法,是直接定义几位数字(不然要是30位,难道打30个\u去?)
    (specify there are three digits and letters with a count)

    /\d\u\{3}\d\{3}

    也可以用范围来搜索 (Using [] ranges)
    /[0-9][A-Z]\{3}[0-9]\{3}

    用到范围搜索,列出一些范围(range)
    /[a-z]
    /[0123456789abcdef] = /[0-9a-f]
    \e
    \t
    \r
    \b
    简写 (item matches equivalent)

    \d digit [0-9]
    \D non-digit [^0-9]
    \x hex digit [0-9a-fA-F]
    \X non-hex digit [^0-9a-fA-F]
    \s white space [ ] ( and )
    \S non-white characters [^ ] (not and )
    \l lowercase alpha [a-z]
    \L non-lowercase alpha [^a-z]
    \u uppercase alpha [A-Z]
    \U non-uppercase alpha [^A-Z]

    7. 替换

    %s/123/456/gc   其中%表示全文,s表示替换,g表示全部,c表示每次替换需要确认

    ,$s/123/456/g    表示从当前光标处开始,替换到末尾

    8. 全局操作

    :g/abc/p -> 查找并显示出只有abc的行 (only print line with “abc” )
    :g/abc/d -> 删除所有有abc的行 (delete all line with “abc”)
    :v/abc/d -> 这个会把凡是不是行里没有abc的都删掉 (delete all line without “abc”)

    9. 自动完成 (auto-completion)

    vim本身有自动完成功能(这里不是说ctag,而是vim内建的)
    CTRL-p -> 向后搜索自动完成 (search backward)
    CTRL-n -> 向前搜索自动完成 (search forward)
    CTRL-x+CTRL-o -> 代码自动补全 (code completion)

    10. 分屏 (split)

    vim提供了分屏功能(跟screen里面的split一样)

    :split    将屏幕分成2个 (split screen)
    :split abc.txt    将屏幕分成两个,第二个新的屏幕中显示abc.txt的内容 (split the windows, on new window, display abc.txt)
    :vsplit    竖着分屏 (split vertically)
    :{d}split    设定分屏的行数,例如我要一个屏幕只有20行,就可以下:20split (split the windows with {d} line. 20split: open new windows with 3 lines)
    :new    分屏并且在新屏中建立一个空白文件 (split windows with a new blank file)
    CTRL-w+j/k/h/l    利用CTRL加w加上j/k/h/l在不同的屏内切换 (switch, move between split screens)
    CTRL-w+ -/+    增减分屏的大小 (change split size)
    CTRL-w+t    移动到最顶端的那个屏 (move to the top windows)
    CTRL-w+b    移动到最下面的屏 (move to bottom window)

    set lines=n  修改屏高

    set columns=n 修改屏宽度


    :close    关闭一个分出来的屏 (close splited screen)
    :only    只显示光标当前屏 ,其他将会关闭(only display current active screen, close all others )
    :qall    退出所有屏 (quite all windows)
    :wall    保存所有屏 (write to all windows)
    :wqall    保存并退出所有屏 (write and quite all windows)
    :qall!    退出所有屏,不保存任何变动 (quite all windows without save)

    开启文件的时候,利用 -o选项,就可以直接开启多个文件在分屏中 (with -o option from command line, it will open files and display in split mode)
    vim -o a.txt b.txt

    11.vimdiff相关

    vimdiff a.txt b.txt 如果直接给 -d选项是一样的 vim -d a.txt b.txt
    :diffsplit abc.txt 如果你现在已经开启了一个文件,想vim帮你区分你的文件跟abc.txt有什么区别,可以在vim中用diffsplit的方式打开第二个文件,这个时 候vim会用split的方式开启第二个文件,并且通过颜色,fold来显示两个文件的区别
    这样vim就会用颜色帮你区分开2个文件的区别。如果文件比较大(源码)重复的部分会帮你折叠起来(折叠后面会说)

    :diffpatch filename 通过:diffpatch 你的patch的文件名,就可以以当前文件加上你的patch来显示。vim会split一个新的屏,显示patch后的信息并且用颜色标明区别。


    如果不喜欢上下对比,喜欢左右(比较符合视觉)可以在前面加vert,例如:
    :vert diffsplit abc.txt
    :vert diffpatch abc.txt
    看完diff,用: only回到原本编辑的文件,觉 得diff的讨厌颜色还是在哪里,只要用:diffoff关闭就好了。
    还有个常用的diff中的就是 :diffu 这个是 :diffupdate 的简写,更新用

    12. 折叠 (folding)(不太好使,还不太会用。。。)

    zc  关闭折叠

    13. 格式转换

    set fileformats=unix,dos 可以改变文件的格式 (change format)

    :set ff=unix -> 设定文件成unix格式 (set file in unix format)
    :set ff=dos -> 设定文件成dos格式 (set file in dos format)
    :set ff? -> 检查当前文件格式 (check the format of current file)
    如果改变格式,直接:w存档就会存成新的格式

  • 相关阅读:
    Caused by: java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor
    Android 数据库 OrmLite Failed to open database
    【译】Android 数据库 ORMLite
    SIP
    Android LRUCache
    Enumeration与Iterator的对比
    URI, URL, and URN
    adb device offline 解决办法
    AudioFormat
    AudioTrack
  • 原文地址:https://www.cnblogs.com/chyong168/p/2712542.html
Copyright © 2011-2022 走看看