zoukankan      html  css  js  c++  java
  • 【VIM使用技巧】常用操作和技巧

    作者:gnuhpc
    出处:http://www.cnblogs.com/gnuhpc/

    1.移动光标

    在当前行里面有效的移动光标,注意这些字母都可以配合删除、移动等操作。
    fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。
    tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)
    Fx:和 fx 类似,不过是往回找。
    :jumps 看你过去移动光标的历史

    % 跳转到配对的括号去
    [[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
    w:光标往前移动一个词。
    e:跳到一个词的尾部,然后从尾部跳到下一个词
    b:光标往后移动一个词。
    0:移动光标到当前行首。
    ^:移动光标到当前行的第一个字母位置。
    $:移动光标到行尾。
    ):移动光标到下一个句子。
    ( :移动光标到上一个句子。
    '' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
    gd 到达光标所在处函数或者变量的定义处。
    gf 跳转到相应的头文件。无法找出头文件的解决方法是:set path+=xxx,xxx是头文件所在目录。
    K 在 Man 里面查找光标当前所在处的词。
    Ctrl+b:向上移动一屏。
    Ctrl+f:向下移动一屏。
    G:到文件尾
    numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
    gg:到文件首
    H:移动光标到屏幕上面
    M:移动光标到屏幕中间
    L:移动光标到屏幕下面
    *:读取光标处的字符串,并且移动光标到它再次出现的地方。
    #:和上面的类似,但是是往反方向寻找。
    j 向下
    k 向上           k
    l 向右       h        l            ==>  hjkl  <=>左下上右
    h 向左           j



    2.查找

    /pattern:从光标开始处向文件尾搜索pattern
    ?pattern:从光标开始处向文件首搜索pattern
    n:在同一方向重复上一次搜索命令
    N:在反方向上重复上一次搜索命令
    :s/源串/目标串/g 替换当前行中所有符合条件的字符串
    :行号1,行号2s/源串/目标串/g 在指定行中进行替换
    :%s/源串/目标串/g 全文替换
    ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。大写字母(如A)是全局变量,在打开其他文件时,输入A则跳转到原来文件的部分
    `a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
    `.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
    :marks 查看标记列表
    复合搜索:例如,要想搜索出现在字符串
    {file}+1 后面的字符串 echo,应该使用 /{file}+1/;/echo/。复合搜索。例如,要想搜索出现在字符串 {file}+1 后面的字符串 echo,应该使用 /{file}+1/;/echo/


    3.复制粘贴剪切

    有效的移动大段的文本
    v:按字符选择。
    V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。
    Ctrl +v:按块选择。
    vi[ 选择一对 [] 中的所有字符

    vi( 选择一对 () 中的所有字符

    vi< 选择一对 <> 中的所有字符
    vi{ 选择一对 {} 中的所有字符
    vit 选择一对 HTML/XML 的标签内部的所有字符
    在选择模式的时候使用上面所述的方向键和命令(motion)。比如,vwww,会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。
    一旦你高亮了选区,你或许想进行一些操作:
    d:剪贴选择的内容到剪贴板。
    y:拷贝选择的内容到剪贴板。
    c:剪贴选择的内容到剪贴板并且进入插入模式。
    如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:
    d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。 d5w,则是剪切5个词,d0则剪切光标的前一个词
    y{motion}:和上面类似,不过是拷贝。
    c{motion}:和 d{motion} 类似,不过最后进入插入模式。
    dd:剪切当前行。
    yy:拷贝当前行。
    cc:剪切当前行并且进入插入模式。
    D:剪切从光标位置到行尾到剪贴板。
    C:和 D 类似,最后进入插入模式。
    x:剪切当前字符到剪贴板。
    :和x类似,不过最后进入插入模式。
    y+w 复制光标所在的位置到整个单词所在的位置

    使用多重剪贴板
    很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为":reg"。最好使用小写字母来作为寄存器的名称,因为大写的有些被 VIM 占用了。使用寄存器的命令为双引号 "。
    比如:我们要拷贝当前行到寄存器 k。你应该按 "kyy。(你也可以使用 V"ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。现在你可以使用命令 "kp 来粘贴寄存器 k 里面的内容到你想要的位置。
    "ayy 将当前行复制到寄存器 a 中
    "ap 将寄存器 a 中的内容粘贴到光标之后
    l :registers 查看所有寄存器的内容
    l 通常情况下,寄存器 + ( " + Shift+= )对应X下的剪贴板。您在其它程序中复制的内容,可以使用 "+p 粘贴到Vim中;您在Vim中,可以使用 "+y 将内容复制到剪贴板,再粘贴到其它程序中
    l 没有指定寄存器时,Vim使用“无名寄存器”存储内容
    要查找单词is,而不匹配miss中的is,则使用//<is/>/c ,/<表示以此为开头,/>表示以此为结尾,/c表示忽略大小写(/C为区分大小写)。


    4.删除(c命令和d命令就差一个插入操作)

    c{motion}:删除 motion
    命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包
    括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。

    例如:cw:删除光标所在处的词并插入。(c —— change)

    d{motion}:和上面差不多,但是不进入插入模式。
    vim中常用的删除文本命令:
    c+c 删除所在行,并插入
    d+d 连按两次d,可将光标所在的行删除,若连续删除,可以按住d不放
    d+w 删除光标所在的单词,若是光标在两字之间,则删光标后的一个词
    D 将光标所在行后面所有的单词删除
    x 将光标所在位置后一个字符删除
    X 将光标所在位置前一个字符删除
    daw 删除光标下的普通单词以及其后的空格
    ciW 删除光标下的以空格分隔的“单词”并进入插入模式 (i 表示 inner,不删除单词后的空格) 
    ci[ 删除一对 [] 中的所有字符并进入插入模式
    ci( 删除一对 () 中的所有字符并进入插入模式
    ci< 删除一对 <> 中的所有字符并进入插入模式
    ci{ 删除一对 {} 中的所有字符并进入插入模式
    cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式
     


    5.插入

    vim中命令行模式切换到输入模式,进行插入:
    i:在当前字符的左边插入
    I:在当前行首插入
    a:在当前字符的右边插入
    A:在当前行尾插入
    o:在当前行下面插入一个新行
    O:在当前行上面插入一个新行
    :ab 替代符 原始信息--自定义缩略符号。例如  :ab mymail warmbupt@gmail.com 以后在任意处输入mymail然后按空格就可以插入这个信息了


    6.修改

    r 修改光标所在字符
    R 修改光标所在位置的字符,可以一直替换字符,知道按下ESC键
    u 表示复原功能
    U 取消对行所作的所有改变
    >> 缩进所有选择的代码
    << 和上面类似,但是反缩进
    :1,20s/^//////g 连续行注释,注释第1行到第20行。(其中"^"表示在行首插入,"//"为要插的字符(要转义),"g"表示执行替换时不确认)
    :r 文件名 直接将其他文件或命令执行内容导入当前文件中(在注释中写入当前系统内核信息,只需:r !uname -a)
    v% = 在一遍的括号处按此组合键,括号中内容选定并按照C语言格式缩排,光标会自动跳到XXXX()函数的定义处, 变量, 结构, 宏, 等等, 都可以的。
    v是visual模式,%是跳到与其匹配的地方,=为源文件格式化。
    xp   前后交换两个字符
    ddp 上下交换两行(这两个挺好理解的)
    增加注释:(一个操作应用在多行)Ctrl + v
    定位到开始行,然后选定需要的行,然后执行 I 命令,然后输入 # 或 //,然后按
    Esc键两次,即可把注释操作应用到所有选定的行,记住选定不能使用v指令,而应该使用Ctrl + v
    (清除注释请参考上面的方法)(v是按行选定,Ctrl + v 是按照列选定)
    :line1,line2s!/s*//.*!!                         去掉line1到line2之间的//注释
    :line1,line2s!/s*//*/_./{-}/*//s*! !     去掉line1到line2之间的/* */注释
    :s%/^M//g  将DOS格式文本转成Unix格式文本,其中^M 必须是同时按 Ctrl+V+M ,表示回车。
    gg=G  格式化整个文件
    重放搜索模式:假设要在文件中搜索以单词 Martin 开头的行并对每个匹配添加前缀 Mr 和后缀 Wicks,那么进入命令模式,输入 vi 命令
    :%s/^/(Martin/)/Mr /1 Wicks/g,然后按回车。 

    下面把这个命令分解开解释一下:

    • :%s — 指示 vi 执行替换。
    • / — 模式分隔符。
    • ^/(Martin/) — 寻找以字符串 Martin 开头的行并把这个字符串保存在缓冲区 1 中。
    • / — 模式分隔符。
    • Mr /1 Wicks — 把找到的字符串替换为字符串 Mr,加上缓冲区 1 中的内容,再加上字符串 Wicks
    • / — 模式分隔符。
    • g — 全局修改(即修改所有匹配的地方)

     

     


    7.文件操作

    e 加载新的文件
    w 写文件,它是保存到临时文件中,直接退出,并没有保存到文件中的
    w! 如果想写只读文件,使用它强制写入文件
    q! 不问你是否保存文件,强制退出
    set 可以设置vim的某些特性。取消设置,使用 set none
    Z+Z 保存并退出vim
    直接利用命令修改文件:例如按 Escape,输入
    :1,$!sort 并按回车,这个文件就排序了
    还可以在 shell 命令前面加上从当前游标位置开始希望操作的行数。方法是按 Escape,然后输入指定行数的数字,然后输入两个惊叹号(
    !!
    ),最后输入 UNIX 命令:4!!awk '{print "New text",$0}' 
    保存部分内容:按 Escape,然后输入
    :start,endw file,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后一行,w
    表示希望写到另一个文件中(或者覆盖现有的文件),file 是指定的部分要保存到的文件。


    8.宏

    可以将一系列的操作录制为一个宏,然后执行它
    q<宏名称> 开始录制宏。宏名称为一个字符
    q 录制中按下“q”键,结束录制
    @<宏名称> 执行宏
    可以使用 :registers(寄存器列表) 命令查看已记录的宏


    9.统计:

    全文字数:g+Ctrl+G
    文章行数和当前位置占总行数的百分比:Ctrl+g

    10.Tips in VIM
    Tips:
    1,当你不知道你是处于编辑方式还是命令方式时,可以使用Esc键退出命令方式,然后进行操作。
    2,在使用vim时,万一发生了系统掉电或者突然关机时,可以使用恢复命令,如编辑file文件时突然断电或系统崩溃后的恢复命令:$ vi file -r
    3,启动vim的时候使用vim -u /root/vimrc.vim,并且使用:vertion可以查看到系统vimrc配置文件,用户vimrc配置文件等的路径
    4,想查看设置的快捷键,输入:map即可看到。
    如果要取消此快捷键,只需输入命令::unmap ^P
    5,&XXX为否定XXX这个变量,在写vimrc的function时可以使用,例如开关高亮显示的函数为:
    function ToggleHLSearch()
    if &hls
    set nohls
    else
    set hls
    endif
    endfunction
    调用函数用::call ToggleHLSearch()
    6,缩略语::ab sammail sam@163.com 在输入模式下录入"sammail",再敲任意字母符号或者回车空格, "sam @ 163.com" 若想暂时取消则使用Crtl+V在后边,这样空格就不会导致补全了。
    7,执行UNIX/Linux命令不需退出Vim/Vi :!命令
    8,:h quickref 翻到VIM Quick Reference页(有用!)。
    9,环境变量%表示当前文件名。
    10,# 加密(小心使用,不要忘了密码)
    :X : 然后vim会提示你输入密码
    :wq(只有保存密码才生效)
    11,使用数字也是 VIM 强大的而且很节省时间的重要特性之一。在很多 VIM 的命令之前都可以使用一个数字,这个数字将会告诉 VIM 这个命令需要执行几次。比如:
    * 3j 将会把光标向下移动三行。
    * 10dd 将会删除十行。
    * y3″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。
    数字是扩展 motion 命令作用域非常有效的方法。
    12,g 统计字数
    13. map可以进行键盘映射,unmap取消
    14.你可以快速处理 '、"、()、[]、{}、<> 等配对标点符号中的文本内容,包括更改、删除、复制等。

    • ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
    • di'、di"、di(、di[、di{、di< - 分别删除这些配对标点符号中的文本内容
    • yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容

    15. 打开并排的窗口 :split filename 纵向:vsplit filename  控制宽度:15 split  (split可以简化为sp) 跳转:Ctrl­+w Ctrl­+w  增加或减小:Ctrl­w – or Ctrl­w + 等大:Ctrl­w =
    16.代码折叠:

    zf12j 折叠13 行 (12 + current line),zo打开,zk,zj在下一个和上一个折叠处跳转,zd删除折叠,zm关闭折叠
    16.希望 vi 不区分大小写,那么可以使用
    :set ignorecase命令。使用 :set noignorecase 恢复区分大小写。还可以使用简写(:set ic:set noic
    )。

    附:VIM模式总结(http://denven.blog.hexun.com/11922673_d.html)

    Part1. 六种基本模式  

    1.Nomal Mode 普通模式 可以输入所有普通的编辑命令,启动编辑后默认处于普通模式,接受编辑命令。

    2.Insert Mode 插入模式 输入的内容会插入到当前缓冲区。这是我们最熟悉的普通编辑器的编辑模式。

    3.Visual Mode 可视模式 与普通模式相似,但移动光标时光标会扩展高亮区域,非光标命令则可作用于高亮区域。
    我将它分为三种具体的情况来理解。(图中$表示行尾)

    3.1. 普通可视模式。 按 
    v
     进入,不单独针对行或列,作用范围为光标最初位置与光标当前位置间的内容。
    ....cursor starts here|---------------------------------------------------------------$|
    +-------------------------------------------------------------------------------------------$|
    |---------------------------------------------------------------------------------------$|
    +---------------------------------------|the cursor stops here,maybe some content continued

    3.2. 可视“行”模式。按 
    V 
    进入,光标移动作用与光标所在的整行内容。
    如果光标开始位置所在行行号为i,选定时行号为j。
    则作用内容为[i,j]行的内容。如图所示:

    +----------------------------------------------------------starts here|--------------$|
    |----------------------------------------------------------------------------------------$|
    |-------------------------------------------------------------------------------------------$|
    +---------------------------------------$|the cursor stops here

    3.3 可视“块”模式。 按 
    CTRL-V 进入,gVim 则按 CTRL-Q(大写) 进入。
    选定范围为光标最初点和光标移动后所在位置决定的矩形区块内。

    cursor begin|-------------+ +----------------| end
    |-------------| |----------------|
    |-------------| |----------------|
    |-------------| |----------------|
    +-------------| end begin |----------------+

    exmaple 1 example 2

    4.Command Mode 命令行模式 在底行可以输入一行命令,也可称作底行模式完成。按冒号进入命令行模式。我通常把它当作时普通模式的特例。因为可执行的命令太少。

    5.Ex Mode Ex编辑器模式 以: 开始Ex模式,与命令行模式类似,但是命令完成后,会继续停留在该模式下。

    6.Select Mode 选择模式 gVim中鼠标选中的部分会在底下提示为“选择”。

    Part2. 五种附加模式: 

    1. 操作符等待模式:我尚未理解所谓的操作符指什么。
    2. 替换模式:可以认为是插入模式的特殊情况。

    在插入模式下,按 即回到一种临界的普通模式,这时可以切换其他模式,可以执行命令,但是完成命令后会立即返回至插入模式。例如:

    3. 插入普通模式 按 后执行一次编辑命令(即使是非a,i,A,I,o,O之类的命令)后进入插入模式。
    4. 插入可视模式 按 后不执行编辑命令,而按键进入可视模式,可视选择后执行一条命令(同上)就返回到插入模式。
    5. 插入选择模式 按 后可以用鼠标进行选择,选择结束(点击鼠标)就返回插入模式。

    作者:gnuhpc
    出处:http://www.cnblogs.com/gnuhpc/

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/gnuhpc/p/2813527.html
Copyright © 2011-2022 走看看