• 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快捷键

  • 相关阅读:
    无聊死了,救我
    人间奇事:什么都涨,就工资不涨
    关于Javascript Hijacking
    参考答案:关注成本和投资回报率
    IE中一个值得关注的JS问题
    100%高度的div(转载)
    维基百科开放拉
    乱弹:出名、中医、程序
    Javascript的for...in语句在IE和Firefox的差异
    真实案例:给所有想要创业的朋友的一个管理方面的测试题
  • 原文地址:https://www.cnblogs.com/greatLong/p/11978666.html
Copyright © 2020-2023  润新知