zoukankan      html  css  js  c++  java
  • Vim Reference

    VIM cheat sheets
    最好的指导资料Vim Tips Wiki

    启动

    vim -r file: 恢复上次异常退出的文件;
    vim -R file: 以只读的方式打开文件,但可以强制保存;
    vim -M file: 以只读的方式打开文件,不可以强制保存;
    vim + file: 从文件的末尾开始;
    vim +num file: 从第num行开始;

    移动

    行移动

    H: 把光标移到屏幕最顶端一行。
    M: 把光标移到屏幕中间一行。
    L: 把光标移到屏幕最底端一行。
    0^: 移动到行首。
    $: 移动到行尾。
    :set nu: 开启行号显示
    set nonu: 关闭行号显示
    gg: 跳到第一行
    G:跳到最后一行
    nG:n: 跳到第n行

    单词移动

    +Enter: 把光标移至下一行第一个非空白字符。
    -: 把光标移至上一行第一个非空白字符。
    w: 前移一个单词,光标停在下一个单词开头;
    W: 移动下一个单词开头,但忽略一些标点;
    e: 前移一个单词,光标停在下一个单词末尾;
    E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
    b: 后移一个单词,光标停在上一个单词开头;
    B: 移动到上一个单词开头,忽略一些标点;
    fa: 移动到下一个字符a
    shift+fa:移动到上一个字符a
    往右或往左移到下一个指定字母,需要用到前置的forward按键f和shift-f,比如往右移到下一个字母 'a' (fa),往左移到下一个字母 'a' (Fa)

    字符移动

    h退格: 左移一个字符;
    l空格: 右移一个字符;
    j: 下移一行;
    k: 上移一行;
    3l: 右移3个字符;
    3w: 左移3个字符;

    文档操作

    :e file --关闭当前编辑的文件,并开启新的文件。
    :e! file --放弃对当前文件的修改,编辑新的文件。
    :e+file -- 开始新的文件,并从文件尾开始编辑。
    :e+n file -- 开始新的文件,并从第n行开始编辑。
    :enew --编译一个未命名的新文档。(CTRL-W n)
    :e -- 重新加载当前文档。
    :e! -- 重新加载当前文档,并丢弃已做的改动。
    :w -- 保存修改。
    :wq -- 保存并退出。
    ZZ -- 保存并退出。
    :x -- 保存并退出。
    :q[uit] ——退出当前窗口。(CTRL-W qCTRL-W CTRL-Q)

    翻页

    ctrl+f: 下翻一屏(forward)。
    ctrl+b: 上翻一屏(back)。
    ctrl+d: 下翻半屏(down)。
    ctrl+u: 上翻半屏(up)。
    ctrl+e: 向下滚动一行。
    ctrl+y: 向上滚动一行。
    n%: 到文件n%的位置。
    zz: 将当前行移动到屏幕中央。
    zt: 将当前行移动到屏幕顶端。
    zb: 将当前行移动到屏幕底端。

    插入

    i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8=。 这在插入分割线时非常有用,如30i+<esc>就插入了36+组成的分割线。
    I: 在当前行第一个非空字符前插入;
    gI: 在当前行第一列插入;
    a: 在光标后插入;
    A: 在当前行最后插入;
    o: 在下面新建一行插入;
    O: 在上面新建一行插入;
    :r filename在当前位置插入另一个文件的内容。
    :[n]r filename在第n行插入另一个文件的内容。
    :r !date 在光标处插入当前日期与时间。同理,
    :r !command可以将其它shell命令的输出插入当前文档。

    复制/粘贴/剪切

    p: 在光标之后粘贴。
    P: 在光标之前粘贴。
    d$ or D: 删除(剪切)当前位置到行尾的内容。
    d[n]w: 删除(剪切)1(n)个单词
    d0: 删除(剪切)当前位置到行首的内容
    [n] dd: 删除(剪切)1(n)行。

    剪切

    首先,在normal模式下按v进入visual模式,使用方向键hjkl可以选择文字,再按下d就可以进行剪切。
    其他normal模式下剪切命令:
    x: 将光标所在处的字符进行剪切(删除)
    nx:将光标之后的n的字符进行剪切(删除)
    dd:剪切当前行
    nddn表示大于1的数字,剪切n
    D: 将光标所在处到行尾进行剪切(删除)
    dG:将光标所在行到文章末尾进行剪切(删除)
    dw:从光标处剪切至一个单子/单词的末尾,包括空格
    de:从光标处剪切至一个单子/单词的末尾,不包括空格
    d$:从当前光标剪切到行末
    d0:从当前光标位置(不包括光标位置)剪切之行首
    d3l:从光标位置(包括光标位置)向右剪切3个字符
    d5G:将当前行(包括当前行)至第5行(不包括它)剪切
    d3B:从当前光标位置(不包括光标位置)反向剪切3个单词
    dH:剪切从当前行至所显示屏幕顶行的全部行
    dM:剪切从当前行至命令M所指定行的全部行
    dL:剪切从当前行至所显示屏幕底的全部行
    :n1,n2d: 将n1到n2行内容进行剪切(删除)

    复制

    首先,在normal模式下按v进入自由选取模式,使用方向键hjkl可以文选中文字,选择需要复制的文字后,按下y就可以进行复制了。
    其他normal模式下复制命令:
    yy:复制当前行
    yiw:yank inner word 复制当前单词(不含前后空格)
    yaw: yank the current word 复制当前单词(包含前后空格)
    ytx:yank from the current cursor position up to and before the character (til x) 从当前位置复制到x所在的位置为止(不含x)
    yfx:yank from the current cursor position up to and including the character (find x) 从当前位置复制到x所在的位置(包含x)
    nyyn表示大于1的数字,复制n
    yw:从光标处复制至一个单子/单词的末尾,包括空格
    ye:从光标处复制至一个单子/单词的末尾,不包括空格
    y$:从当前光标复制到行末
    y0:从当前光标位置(不包括光标位置)复制之行首
    y3l:从光标位置(包括光标位置)向右复制3个字符
    y5G:将当前行(包括当前行)至第5行(不包括它)复制
    y3B:从当前光标位置(不包括光标位置)反向复制3个单词
    yw/yb/yy 复制当前单词右侧部分(按一下y再按一下w),复制当前单词左侧部分,复制当前行(按两下y),y是前置键(yank,可以理解为激活复制),紧跟着表示要复制哪一部分。注意y前面还可以加数字,表示操作几次,比如3yw,就会复制3个单词。我就想复制整个单词咋办?要习惯多使用w和b,另外还有一种方便的选中整个单词的方式viw(visual+inner word)。
    Copy, cut and paste

    选中:

    normal模式按下v进入visual模式
    viw: 选中单个单词 visual inner word
    V:选中当前行

    1. vim 有 12 个粘贴板,分别是 0、1、2、...、9、a、“、+;用 :reg 命令可以查看各个粘贴板里的内容。在 vim 中简单用 y 命令只是复制到 "(双引号)粘贴板里,同样用 p 命令粘贴的也是这个粘贴板里的内容;
    2. 要将 vim 的内容复制到某个粘贴板,需要先退出编辑模式,再进入命令模式后,选择要复制的内容,然后按 "Ny(注意带引号)完成复制,其中 N 为粘贴板号(注意是按下 双引号 + 粘贴板号 + y),例如要把内容复制到粘贴板 a,选中内容后按 "ay 就可以了,有 两点需要说明一下:
      • " 号粘贴板(临时粘贴板)比较特殊,直接按 y 就复制到这个粘贴板中了,直接按 p 就粘贴这个粘贴板中的内容;
      • + 号粘贴板是系统粘贴板,用 "+y 将内容复制到该粘贴板后可以使用 ctrl+v 将其粘贴到其他文档(如 firefox、gedit)中,同理,要把在其他地方用 ctrl+c或右键复制的内容复制到 vim 中,需要在正常模式下按 "+p
    3. 要将 vim 某个粘贴板里的内容粘贴进来,需要先退出编辑模式,再在命令模式按 "Np,其中 N 为粘贴板号,如上所述,命令 "5p 会将 5 号粘贴板里的内容粘贴进来,也可以按 "+p 将系统全局粘贴板里的内容粘贴进来。

    参考 vim常用复制粘贴命令 这篇文章对vim的复制粘贴有详细深入的讨论

    查找/替换

    r: 取代光标所在处的字符
    R: 进入替换模式,类似于 Windows 中的 insert
    r 只替换当前光标所在处的字符,命令模式下按r 然后按新的字符。
    R 进入替换模式,按 ESC 才能退出。

    /something: 在后面的文本中查找something。
    ?something: 在前面的文本中查找something。
    %something: 在全文搜索something。
    :n1,n2s/something: 在第n1到n2行范围内搜索
    /pattern/+number: 将光标停在包含pattern的行后面第number行上。
    /pattern/-number: 将光标停在包含pattern的行前面第number行上。
    n: 向后查找下一个。
    N: 向前查找下一个。

    :s/old/new : 用new替换当前行第一个old。
    :s/old/new/g : 用new替换当前行所有的old。

    d: 表示十进制数
    s: 表示空格
    S: 非空字符
    a: 英文字母
    |: 表示 或
    .: 表示.
    {m,n}: 表示m到n个字符。这要和 sa等连用,如 a{m,n} 表示mn个英文字母。
    {m,}: 表示m到无限多个字符。
    **: 当前目录下的所有子目录。

    常见组合需求

    先复制一个单词first,再用这个单词替换另一个单词second:

    光标放到first的任意位置, 按下yiw(yank inner word),再把光标导航到要替换掉的second的任意位置, 按下viwp, 即可完成替换。
    Replace a word with yanked text

    删除当前单词

    光标移到单词的任意位置,按下ciw

    在当前单词前/后插入

    光标移到单词任意位置,按下bi,在当前单词前进入插入模式;
    光标移到单词任意位置,按下wi,在当前单词后进入插入模式;

    针对双引号内的内容操作

    复制引号内容(不含引号): 把光标移到引号内容的任意位置,按下yi“ (yank inner "")
    删除引号内容(不含引号): 把光标移到引号内容的任意位置,按下ci“ (yank inner "")
    选中引号内容(不含引号): 把光标移到引号内容的任意位置,按下vi“ (yank inner "")

    复制一行line1, 然后用line1替换line2,再用line1替换line3

    先复制当前行line1: yy(此时line1被复制到默认寄存器)
    移动光标到line2
    按下 Vp,使得line2被替换为line1(此时用默认寄存器"的内容line1替换了line2,并将line2复制到了默认寄存器"中,并将原来保存在"中的line1复制到0号寄存器中
    移动光标到line3
    按下V"0p, 使得line3被替换为line1(用0号寄存器中的内容line1替换line3)

    Deleting, changing and yanking text copies the affected text to the unnamed register (""). Yanking text also copies the text to register 0 ("0). So the command yiw copies the current word to "" and to "0.
    删除、改变或者复制text会将text保存到默认寄存器"中,复制操作还会把"中的内容拷贝到0号寄存器中。

    排版

    << : 向左缩进一个shiftwidth
    >>: 向右缩进一个shiftwidth
    :ce(nter): 本行文字居中
    :le(ft) :本行文字靠左
    :ri(ght): 本行文字靠右


    编辑多个文件

    :next(:n):编辑下一个文件。
    :previous:N:编辑上一个文件。
    :wnext:保存当前文件,并编辑下一个文件。
    :wprevious:保存当前文件,并编辑上一个文件。
    :args: 显示文件列表。
    vi -o filenames: 在水平分割的多个窗口中编辑多个文件。
    vi -O filenames: 在垂直分割的多个窗口中编辑多个文件。


    切换窗口

    ctrl+w : 切换到下一个窗口。或者是ctrl+w w。
    ctrl+w p: 切换到前一个窗口。


    快速编辑/撤销/反撤销

    ~: 反转光标所在字符的大小写。
    r: 替换光标处的字符,同样支持汉字。
    R: 进入替换模式,按esc回到正常模式。

    [n] u: 取消一(n)个改动。
    :undo 5: 撤销5个改变。
    :undolist: 你的撤销历史。
    ctrl + r: 重做最后的改动。
    U: 取消当前行中所有的改动。
    :earlier 4m: 回到4分钟前
    :later 55s :前进55秒

    查看文件编码

    :set fenc:set fileencoding:查看当前文件的编码。
    :set ff:显示当前文件的格式。
    :pwd: 显示vim的工作目录。
    :ver: 显示版本信息。

    其他使用技巧

    :r filename: 将指定文件的内容导入到光标所在位置
    :r ! command :将command运行结果导入到光标所在位置
    :map 快捷键 触发命令: 自定义快捷键
    :ab old new: 在编辑时自动替换一些字符

    :r ! command 是一个很好用的命令,比如:r !date可以把当前日期时间快速导入到当前光标位置。
    :map 快捷键 触发命令 用于自定义快捷键,在命令模式下,输入“:map ”然后输入“Ctrl+V+P”,会出现“^P”,代表快捷键为“Ctrl+P”。最后一部分触发命令是指按下快捷键后,触发的命令,比如“I#”,这代表快捷方式触发的命令为“I#”,然后按下“ESC”键。含义即为在行首添加“#”井号,快速注释。
    连续行注释:n1,n2s/^/#/g,代表将指定范围内的行首替换为“#”井号。其中,“^”代表行首。
    :ab是编辑时快速替换命令,当你自定义替换字符串后,当你在编辑模式下输入要替换的字符串时,空格或者回车后,这个就字符串就回立即被你定义的新字符串替换掉,很方便。

    在线帮助

    :h(elp):或F1 打开总的帮助。
    :help user-manual: 打开用户手册。命令帮助的格式为:第一行指明怎么使用那个命令; 然后是缩进的一段解释这个命令的作用,然后是进一步的信息。
    :helptags somepath: 为somepath中的文档生成索引。
    :helpgrep: 可以搜索整个帮助文档,匹配的列表显示在quickfix窗口中。
    Ctrl+]: 跳转到tag主题,
    Ctrl+t 跳回。

    参考列表

    vim常用复制粘贴命令
    我是这样用vim写代码的--基础篇
    Vim 基本命令入门
    最全的vim快捷键

  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/greatLong/p/11978666.html
Copyright © 2011-2022 走看看